我知道导出到csv已经被询问了十亿次,而我已经做了很多次,但是我试图弄清楚如何仅将部分工作表导出到csv,而不循环遍历每一行或每一个单元格并将它们单独打印到文件中。我需要维护本地格式作为一项要求。
Sheets("PI_OUTPUT").Copy
这将复制整个工作表,疣和全部。我在第1到20000行和第A到X列中有公式,但是在处理完数据后有可变数量的空白行。如果使用复制方法,我将复制所有空行,并将其输出为逗号行。 、、、、、等...
我尝试使用activesheet.deleterows在复制后修剪输出文件,但这给了我一个错误。
我试过使用:
Worksheets("PI_OUTPUT").Activate
Sheets("PI_OUTPUT").Range("A2:X5000").Copy
我尝试使用另一个建议:specialcells(xlCellTypeVisible),但似乎无法正常工作:
Set rng = Sheets("PI_OUTPUT").SpecialCells(xlCellTypeVisible)
Set Workbook = Workbooks.Add
With Workbook
Call rng.Copy
.Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues
.SaveAs filename:=MyPath & MyFileName, FileFormat:=xlCSV
.Close
End With
更糟的是,我必须跨许多工作表,所有工作表都具有可变的列数,行数,并且全部保存到单独的文件中,因此我正在寻找可以重复多次的东西。我弹出了一个文件夹路径来选择位置,并有一个动态构造的文件名,但是复制/粘贴逃避给我。
目前,在无数次Google搜索之后,我一直在撕扯我的头发,非常感谢。
最佳答案
您可以使用下面的代码;
Sub testexport()
'Adpated from OzGrid;
' export Macro as CSV
Dim wsh As Worksheet
Set wsh = ThisWorkbook.Worksheets("PI_OUTPUT")
With wsh.Range("A2:X20000")
.AutoFilter 1, "<>" 'Filter to get only non-blank cells
'assuming there is no blank cell within a filled row:
wsh.Range(wsh.Cells(2, 1), wsh.Cells(24, 2).End(xlDown)).Copy 'copy non-blank cells
'.AutoFilter should not cancel autofilter as it clears cutcopy mode
End With
Application.DisplayAlerts = False 'avoid from "save prompt window"
Workbooks.Add
ActiveSheet.Paste
'Saves to C drive as Book2.csv
ActiveSheet.SaveAs Filename:= _
"C:\Book2.csv" _
, FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close
wsh.Range("A2:X20000").AutoFilter 'clear the filter
Application.DisplayAlerts = True 'set to default
End Sub
关于excel - 使用VBA将Excel工作表(的一部分)导出到CSV的范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44396264/