Страницы: 1
RSS
Преобразование множества файлов. Ошибка 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))
 
а что за задачу вы пытаетесь решить?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
а что за задачу вы пытаетесь решить?
Преобразование множества файлов, которые находятся в одной папке благодаря макросу
В примере есть 3 изначальных файла
И 3 файла, какие должны получится после выполнения макроса

Файлов около 10к, уже добавлял функцию, которая удаляет строки, где в столбце D нули, но массив заполняет память, в некоторых файлах дает сбои, по итогу обработает файлов 500 только и виснет из-за недостатка памяти
 
не
Цитата
aroz написал:
благодаря макросу
а задача какая?
понимаете, задача "не благодаря макросу", а в задаче предполагается что-то решить
что за задачу вы решаете? знаете? обьяснить можете?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
а задача какая?
Задача в следующем: Найти дубликаты либо в столбце C, либо D, у каждого дубликата есть своя итоговая сумма, которая отображается в столбце I. Необходимо устранить дубли, а итоговые суммы сложить в одну.
Например: в столбце D 3 дубля с значением 1001, в первой строке столбца i сумма 10, во второй строке 20, в третьей 30.
По итогу должна получится одна строка с общей суммой 10+20+30= 60
После выполнения этих действий удалить лишние столбцы (C, E, F, G, H).
 
aroz, ОДИН файл-пример с листами "как есть" и "как надо" увеличить скорость ответа и его качество
Пока что можно направить вас в сторону группировки через PQ или сводную, а также можно создать уникальный список (удалить дубли) и использовать =СУММЕСЛИ() для каждого значения из него, суммируя по ключу из исходных данных
Изменено: Jack Famous - 26.07.2021 10:17:06
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Приложил 3 файла "как есть" и 3 файла "как надо", проблема в том, что нужно автоматизировать чтобы процесс шел для 10к файлов
 
Цитата
aroz написал:
Пытаюсь очистить массив с помощью Erase arr2
1. В коде попытки использования Erase отсутствуют
2. Зачем очищать массив с помощью Erase, если он очищается командой ReDim arr2?
 
RAN, Спасибо, проверю, надеюсь сработает
 
Нашел проблему, была в коллекции COL
Решилась добавлением строчки:
Код
Set COL = Nothing
Страницы: 1
Наверх