我知道导出到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/

10-14 12:24
查看更多