Добрый день, Есть код, который из собирает в текущий .xlsm файл данные из .csv файлов (все файлы лежат в одной папке). По сути берет первую строку из .csv файла и копирует её в конец .xlsm.
Однако когда .csv файлов >200 тыс., то чувствуется, что оперативка начинает утекать...Не пойму на каком моменте идет утечка, сами ж файлы закрываю вроде, переменные обнуляю. Может кто ткнуть носом в место, где собака зарыта?
Код
Option Explicit
Sub xlsm_csv()
Dim a_path As String
Dim csvF As String
Dim shb As Worksheet
Dim sh As Worksheet
Dim WB As Workbook
Dim lcol_from As Long
Dim lrow_insert As Long
Set shb = ActiveSheet
a_path = ActiveWorkbook.Path & "\"
csvF = Dir(a_path & "*.csv", vbNormal)
Application.ScreenUpdating = False
Do Until csvF = ""
Set WB = Nothing
Set sh = Nothing
Set WB = Workbooks.Open(Filename:=a_path & csvF, ReadOnly:=True, Local:=True)
Set sh = WB.Worksheets(1)
lcol_from = sh.Cells(1, sh.Columns.Count).End(xlToLeft).Column
lrow_insert = shb.Cells(shb.Rows.Count, 1).End(xlUp).Row + 1
shb.Range(shb.Cells(lrow_insert, 1), shb.Cells(lrow_insert, lcol_from)) = _
sh.Range(sh.Cells(1, 1), sh.Cells(1, lcol_from)).Value
WB.Close False
csvF = Dir()
Loop
Application.ScreenUpdating = True
End Sub
Что-то не вяжется. Если вы пишите именно в xls, и в каждом csv имеется минимум одна строка, то где-то в районе 64к строк эти строки в файле кончаются, и тут вы плывете. Или все таки в xlsx/xlsb?
heso, про понять, это не ко мне, я в ВБА не шарю, а если не принципиально, то киньте для примера пару-тройку файлов и какой результат хотите получить в итоге, смогу накидать вариант на PQ. Обязательно уточните нужно ли данные добавлять к уже существующему массиву или всегда загружать заново поверх уже имеющихся.