Сохранение данных Excel как csv с VBA - удаление пустых строк в конце файла для сохранения

Я создаю набор CSV-файлов в VBA.

Мой сценарий создает набор данных, который мне нужен, но количество строк отличается в нескольких итерациях цикла. Например, для i = 2 у меня 100 000 строк, но для i = 3 у меня 22 000 строк. Проблема в том, что когда Excel сохраняет эти отдельные файлы CSV, он не усекает пространство в конце. Это оставляет 78 000 пустых строк в конце файла, что является проблемой, учитывая, что мне нужно создать около 2000 файлов, каждый размером несколько мегабайт. (У меня есть некоторые данные, которые мне нужны в SQL, но я не могу выполнить математику в самом SQL. Длинная история.)

Эта проблема обычно возникает при сохранении вручную - вам нужно закрыть файл после удаления строк, а затем снова открыть, что в данном случае не вариант, поскольку это происходит автоматически в VBA. Удаление пустых строк после сохранения с использованием сценария на другом языке - это не вариант, поскольку мне действительно нужны выходные файлы, чтобы поместиться на имеющемся диске, и теперь они неоправданно велики.

я пыталсяSheets(1).Range("A2:F1000001").ClearContents, но это ничего не усекает. Удаление строк не должно иметь аналогичного эффекта перед сохранением, поскольку Excel сохраняет все строки до конца файла, так как в нем хранится нижняя правая часть большинства используемых ячеек. Можно ли в Excel сохранить только те строки, которые мне нужны?

Вот мой код, используемый для сохранения: (Усечение происходит раньше, в маршрутизации, которая вызывает этот)

Sub SaveCSV()
'Save the file as a CSV...
  Dim OutputFile As Variant
  Dim FilePath As Variant

  OutputPath = ActiveWorkbook.Worksheets("Macro").Range("B2").Value
  OutputFile = OutputPath & ActiveWorkbook.Worksheets("Macro").Range("B1").Value
  Application.DisplayAlerts = False 'DISABLE ALERT on Save - overwrite, etc.
  ActiveWorkbook.SaveAs Filename:=OutputFile, FileFormat:=xlCSV, CreateBackup:=False
  Application.DisplayAlerts = True 'DISPLAY ALERTS
End Sub

Соответствующий фрагмент кода здесь:

'While looping through Al, inside of looping through A and B...
'Created output values needed in this case, in an array...

Sheets(1).Range("A2:E90001") = Output

ActiveWorkbook.Worksheets(1).Range("F2").Formula = "=(does not matter, some formula)"
ActiveWorkbook.Worksheets(1).Range("F2").AutoFill Destination:=Range("F2:F90001")

'Set Filename to save into...
ActiveWorkbook.Worksheets("Macro").Range("B1").Value = "Values_AP" & Format(A, "#") & "_BP" & Format(B, "#") & "_Al" & Format(Al, "#")

'Save Sheet and reset...
Call SaveCSV
Sheets(1).Range("A2:F90001").ClearContents
CurrRow = 1

Next Al

Ответы на вопрос(2)

Ваш ответ на вопрос