Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Преобразование множества файлов. Ошибка Type missmatch VBA при попытке очистить массив
 
Добрый день, возник вопрос с очисткой массива, макрос vba:
Код
Sub Get_All_File_from_Folder()
    Dim sFolder As String, sFiles As String, arr, arr2, arr3, i As Long, n As Long, lr As Long, k As Long, COL As New Collection
    
    Dim wb As Workbook
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = False Then Exit Sub
        sFolder = .SelectedItems(1)
    End With
    sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
    Application.ScreenUpdating = False
    sFiles = Dir(sFolder & "*.xls*")
    Do While sFiles <> ""
        Set wb = Application.Workbooks.Open(sFolder & sFiles)
        Erase arr2
        With Sheets(1)
        Columns(6).Delete
        Columns(6).Delete
        Columns(6).Delete
lr = .Cells(Rows.Count, 1).End(xlUp).Row
arr = .Range("A2:F" & lr)
For i = LBound(arr) To UBound(arr)
    On Error Resume Next
    COL.Add arr(i, 1) & "//" & arr(i, 2) & "//" & arr(i, 3) & "//" & arr(i, 4) & "//" & "?????", arr(i, 1) & "//" & arr(i, 2) & "//" & arr(i, 3) & "//" & arr(i, 4) & "//" & "?????" & "//"
Next i
ReDim arr2(1 To COL.Count, 1 To 6)
For i = 1 To COL.Count
    arr3 = Split(COL(i), "//")
    For n = LBound(arr3) To UBound(arr3)
        arr2(i, n + 1) = arr3(n)
    Next n
    arr2(i, 6) = Application.WorksheetFunction.SumIfs(.Columns(6), _
                 .Columns(1), arr3(0), _
                 .Columns(2), arr3(1), _
                 .Columns(3), arr3(2), _
                 .Columns(4), arr3(3))
Next i
End With
ActiveSheet.UsedRange.Offset(1).Clear
Sheets(1).Range("A2").Resize(UBound(arr2), 6) = arr2
Columns(5).Delete
Columns(3).Delete

        wb.Close True
        sFiles = Dir
    Loop
    Application.ScreenUpdating = True
End Sub


Пытаюсь очистить массив с помощью Erase arr2 - выходит ошибка, если в самом конце перед wb.Close ставить Erase arr2, то он не очищается

Пробовал уже в каждую строку Erase засовывать - либо ошибка, либо вообще все очищается, либо наоборот ничего не меняется

Выкладываю изначальные файлы (3 файла (*-file))
И что должно получится в итоге (3 файла(*-result))
Из строк с одинаковым значение - сделать одну, и сложить сумму с определенного столбца
 
Добрый день, искал в интернете подобное, но всё не то, возможно даже не знаю как правильно формулировать вопрос

Есть папка с файлами excel, ~10.000 файлов, в каждом по 150 строк, в строках повторяются названия - для каждого своя сумма, нужно сделать, чтобы повторений не было и каждую сумму сложить в единую, на словах ничего не понятно, поэтому делаю пример и прикладываю файл с примером (1 лист - исходная база, 2 лист - то, что должно получится)

Исходная база:
ДатаДокДатаСостНаимНаимУслугОбщСумУсл
10.04.202131.12.2019Ourav961874287Груша4626;54
10.04.202131.12.2019Ourav961874287Яблоко102672;68
10.04.202131.12.2019Ourav961874287Арбуз23801;47
10.04.202131.12.2019Bylar710597001Апельсин27191;76
10.04.202131.12.2019Bylar710597001Банан1000
10.04.202131.12.2019Kiandlay374495991Груша200
10.04.202131.12.2019Kiandlay374495991Огурец733;3
10.04.202131.12.2019Kiandlay374495991Помидор170
10.04.202131.12.2019Kiandlay374495991Груша96;7
то, что должно получится:
ДатаДокДатаСостНаимНаимУслугОбщСумУсл
10.04.202131.12.2019Ourav961874287Общее131100;69
10.04.202131.12.2019Bylar710597001Общее28191;76
10.04.202131.12.2019Kiandlay374495991Общее1200
Подскажите, как можно это сделать, может быть с помощью макросов vba, или хотя бы намек, буду очень признателен!
Добавление в существующий макрос - замену значений
 
Всем привет, есть макрос, который перебирает файлы и удаляет первые 3 строки, а также удаляет второй лист.
Возникла проблема с добавлением функции с заменой символов, в данной ситуации нужно все "," поменять на "."

Сам скрипт:
Код
Sub del30()
Dim objFS, objExcel, objWB, strPath, strExt, strList
strPath = "D:\vyborka\r1\r3\r2"
Set objFS = CreateObject("Scripting.FileSystemObject")
If objFS.FolderExists(strPath) Then
    Set objExcel = CreateObject("Excel.Application")
    For Each objItem In objFS.GetFolder(strPath).Files
        strExt = Left(LCase(objFS.GetExtensionName(objItem)), 3)
         If strExt = "xls" Or strExt = "xlsx" Or strExt = "xlsm" Then
            objExcel.Visible = False
            objExcel.DisplayAlerts = False
            Set objWB = objExcel.Workbooks.Open(objItem.Path)
            With objWB
                 .Worksheets(1).Rows("1:3").Delete
                 .Sheets("Условия запроса").Delete
                .Save
                .Close
            End With
            strList = strList & objItem.Name & vbNewLine
         End If
    Next
    objExcel.Quit: Set objExcel = Nothing
    If Len(strList) > 0 Then
        WScript.Echo "Обработанные файлы:" & vbNewLine & strList
    Else
        WScript.Echo "Ни одного подходящего файла не найдено."
    End If
Else
    WScript.Echo "Не найден путь " & UCase(strPath)
End If
Set objFS = Nothing
WScript.Quit 0
End Sub

Находил скрипты, которые работают отдельно, но добавить их в этот существующий - не получалось никак.
Буду благодарен за помощь

Страницы: 1
Наверх