Подскажите пожалуйста, что могло навредить данному скрипту, после того, как я добавил на экспортируемый лист еще один столбец, который, как и все остальные на данном листе состоят из формул, которые забирают данные из соседних листов книги и если до добавления этого столбца скрипт отрабатывает около 30000 строк за 5 секунд, то теперь (с этим новым столбцом) на каждую строку уходит 1-2 секунды... Стоит удалить этот новый столбец - всё снова летает. В этом столбце вот такая формула (помогли в соседней теме) и он спокойно прогружает все эти данные и никаких затыков.
Код |
---|
=ЕСЛИОШИБКА(
ВПР([@ID];static_prices;10;0);
ЕСЛИ(И(ABS(ДЕНЬНЕД(ТДАТА();2)+ОСТАТ(ОКРУГЛ(ТДАТА();4);1)-6,625)<=1;[@Поставщик]<>"Pavilion");0;[@Остаток]))
|
Повторюсь, все данные во всех ячейках уже есть, все ок, а при работе скрипта, такое ощущение, что снова идет работа по всем этим ячейкам и формулам, как бы просто экспортировать этот лист, с теми данными, что есть на этом листе, с условиями в этом скрипте (разделитель "|", UTF8, разрезать на 3000 строк). Ниже привожу рабочий код скрипта:
Код |
---|
Sub ExportToCSVUTF8()
Dim ws As Worksheet, nws As Worksheet
Dim wb As Workbook
Dim delim$, Path$, txt$
Dim i&, j&, s&
Dim arr(), arr2()
Set ws = ActiveWorkbook.Worksheets("Итоговые цены")
arr = ws.UsedRange.Value
delim = "|": s = 3000
For i = LBound(arr, 1) To UBound(arr, 1)
ReDim Preserve arr2(i - 1)
For j = LBound(arr, 2) To UBound(arr, 2)
If txt = "" Then
txt = arr(i, j)
Else
txt = txt & delim & arr(i, j)
End If
Next j
arr2(i - 1) = txt
txt = ""
Next i
For i = LBound(arr2) To UBound(arr2) Step s
Set wb = Workbooks.Add
For j = i To i + (s - 1)
If j > UBound(arr2) Then Exit For
wb.Worksheets(1).Cells(j - i + 1, 1).Value = arr2(j)
Next j
Application.DisplayAlerts = False
wb.SaveAs "d:\Clouds\Yandex.Disk\Магазин\pricelists\import\" & "Prices_marketplaces_from_" & i & "_to_" & i + s & ".csv", xlCSVUTF8
wb.Close False
Next i
'MsgBox "Готово", vbInformation, "PlanetaExcel"
End Sub
|