我正在VBA中创建一组csv文件。使用VBA将Excel数据保存为csv - 删除文件末尾的空行以保存
我的脚本正在创建我需要的数据集,但循环的多次迭代中行数不同。例如,对于i = 2,我有100,000行,但对于i = 3,我有22,000行。问题是,当Excel保存这些单独的csv文件时,它不会在最后截断空间。这会在文件末尾留下78,000空白行,这是一个问题,因为我需要生成大约2,000个文件,每个文件需要几兆字节。 (我在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
我添加了一段调用保存例程的代码。它是我无法真正在线共享的系统的一部分,所使用的数百行代码与这个问题无关。当然,如果有一些方法可以完成这个任务,所有这些都不相关 - 我不只是希望“固定”代码作为解决方案,我想知道如何做到这一点。 – 2012-07-12 14:28:34