Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何将多个工作表导出为CSV(不在当前工作表上保存)_Excel_Vba_Csv - Fatal编程技术网

Excel 如何将多个工作表导出为CSV(不在当前工作表上保存)

Excel 如何将多个工作表导出为CSV(不在当前工作表上保存),excel,vba,csv,Excel,Vba,Csv,我正在尝试通过以下代码将工作簿中的许多工作表导出到.csv: Sub Export_To_CSV(exportPath As String) Dim filePath As String For Each WS In ThisWorkbook.Worksheets filePath = exportPath & "(" & WS.Name & ").dat" WS.SaveAs Filenam

我正在尝试通过以下代码将工作簿中的许多工作表导出到.csv:

Sub Export_To_CSV(exportPath As String)    

    Dim filePath As String 

    For Each WS In ThisWorkbook.Worksheets

            filePath = exportPath & "(" & WS.Name & ").dat"
            WS.SaveAs Filename:=filePath, FileFormat:=xlCSV

    Next 
End Sub
问题是,这会保存我打开的当前.xlsm文件

如何让它在不更改当前文件名的情况下导出.csv


我原以为
SaveCopyAs
会奏效,但它只适用于
工作簿
而不适用于
工作表。。。
添加这部分代码,而不是当前的
下一节:

'...your code here
Dim tmpWS As Worksheet
Application.DisplayAlerts = False
For Each WS In ThisWorkbook.Worksheets

        filePath = exportPath & "(" & WS.Name & ").dat"

        WS.Copy
        Set tmpWS = ActiveSheet
        tmpWS.SaveAs Filename:=filePath, FileFormat:=xlCSV
        tmpWS.Parent.Close False
Next
Application.DisplayAlerts = True
'...your code here

代码的逻辑?首先,它将工作表复制到临时工作簿中,然后将新工作表另存为CSV文件,最后关闭临时工作簿。此外,我还添加了
Application.DisplayAlerts
说明,您的代码会覆盖
.csv
文件,而不询问文件是否已存在。

您还可以先保存工作簿,然后保存工作表,最后关闭工作簿,而无需保存(再次):


我准备了与最方便的答案相同的答案,所以+1这太棒了。给它一个临时工作簿,而不是试图阻止它做它想做的事情,这是个好主意!
' ... your code here
    ActiveWorkbook.Save
    Application.DisplayAlerts = False

Dim WS As Worksheet

For Each WS In Worksheets
        Filepath = "c:\temp\" & WS.Name & ".dat"
        WS.SaveAs Filename:=Filepath, FileFormat:=xlCSV, _
        CreateBackup:=False
Next
    ActiveWorkbook.Close
' ... your code here