Speichern von Excel-Daten als CSV mit VBA - Entfernen von leeren Zeilen am Ende der zu speichernden Datei

Ich erstelle eine Reihe von CSV-Dateien in VBA.

Mein Skript erstellt den benötigten Datensatz, aber die Anzahl der Zeilen unterscheidet sich in mehreren Iterationen der Schleife. Zum Beispiel habe ich für i = 2 100.000 Zeilen, aber für i = 3 habe ich 22.000 Zeilen. Das Problem ist, dass Excel beim Speichern dieser separaten CSV-Dateien den Platz am Ende nicht abschneidet. Dadurch verbleiben am Ende der Datei 78.000 leere Zeilen. Dies ist ein Problem, da etwa 2.000 Dateien mit einer Größe von jeweils mehreren Megabyte erstellt werden müssen. (Ich habe einige Daten, die ich in SQL benötige, kann aber nicht in SQL selbst rechnen. Lange Geschichte.)

Dieses Problem tritt normalerweise beim manuellen Speichern auf. Sie müssen die Datei nach dem Entfernen der Zeilen schließen und dann erneut öffnen. Dies ist in diesem Fall keine Option, da dies in VBA automatisch geschieht. Das Entfernen der leeren Zeilen nach dem Speichern mithilfe eines Skripts in einer anderen Sprache ist nicht wirklich eine Option, da die Ausgabedateien tatsächlich auf das verfügbare Laufwerk passen müssen und sie jetzt unnötig groß sind.

Ich habe versuchtSheets(1).Range("A2:F1000001").ClearContents, aber das schneidet nichts ab. Das Entfernen der Zeilen sollte vor dem Speichern ebenfalls keine Auswirkungen haben, da Excel alle Zeilen bis zum Ende der Datei speichert, da die Zelle ganz unten rechts gespeichert wird, an der gearbeitet wird. Gibt es eine Möglichkeit, Excel nur die Zeilen speichern zu lassen, die ich benötige?

Hier ist mein Code zum Speichern: (Die Kürzung erfolgt früher in dem Routing, das diesen aufruft.)

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

Der relevante Code ist hier:

'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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage