Zapisywanie danych Excel jako csv z VBA - usuwanie pustych wierszy na końcu pliku w celu zapisania

Tworzę zestaw plików csv w VBA.

Mój skrypt tworzy zestaw danych, którego potrzebuję, ale liczba wierszy różni się w wielu iteracjach pętli. Na przykład dla i = 2 mam 100 000 wierszy, ale dla i = 3 mam 22 000 wierszy. Problem polega na tym, że gdy Excel zapisuje te oddzielne pliki csv, nie obcina miejsca na końcu. Pozostaje 78 000 pustych wierszy na końcu pliku, co jest problemem, ponieważ potrzebuję wygenerować około 2000 plików, każdy o rozmiarze kilku megabajtów. (Mam pewne dane potrzebne w SQL, ale nie mogę wykonać matematyki w samym SQL. Długa historia.)

Ten problem występuje zwykle podczas ręcznego zapisywania - należy zamknąć plik po usunięciu wierszy, a następnie ponownie otworzyć, co w tym przypadku nie jest opcją, ponieważ dzieje się to automatycznie w VBA. Usunięcie pustych wierszy po zapisaniu za pomocą skryptu w innym języku nie jest właściwie opcją, ponieważ faktycznie potrzebuję plików wyjściowych, aby pasowały do ​​dostępnego dysku, a teraz są niepotrzebnie ogromne.

próbowałemSheets(1).Range("A2:F1000001").ClearContents, ale to nie obcina niczego. Usunięcie wierszy nie powinno mieć podobnego efektu przed zapisaniem, ponieważ Excel zapisuje wszystkie wiersze aż do końca pliku, ponieważ przechowuje on najbardziej obsługiwaną komórkę w prawym dolnym rogu. Czy istnieje sposób, aby zachować Excela tylko w wierszach, których potrzebuję?

Oto mój kod używany do zapisywania: (Obcinanie dzieje się wcześniej, w routingu, który wywołuje ten kod)

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

Odpowiedni bit kodu jest tutaj:

'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

questionAnswers(2)

yourAnswerToTheQuestion