5

我正在尝试通过以下代码将我的工作簿中的许多工作表导出到 .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可以解决问题,但它仅适用于 aworkbook而不是 a worksheet

4

2 回答 2

8

这是我的想法,它可以帮助你......添加这部分代码而不是当前for...next部分:

'...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文件而不询问文件是否已经存在的说明。

于 2013-04-26T09:10:07.820 回答
0

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

' ... 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
于 2013-07-22T14:43:38.153 回答