【问题标题】:How to export multiple worksheets to CSV (without saving over the current worksheet)如何将多个工作表导出为 CSV(不保存当前工作表)
【发布时间】:2013-04-20 09:07:37
【问题描述】:

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

【问题讨论】:

    标签: excel vba csv


    【解决方案1】:

    这是我的想法,它可以帮助你...... 添加这部分代码而不是您当前的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 文件而不询问文件是否已存在。

    【讨论】:

    • 我正在准备与最方便的答案相同的答案,所以+1
    • 太棒了。给它一个临时工作簿而不是试图阻止 SaveAs 做它想做的事是个好主意!
    【解决方案2】:

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

    ' ... 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
    

    【讨论】:

      猜你喜欢
      • 2017-01-19
      • 2015-06-24
      • 1970-01-01
      • 2014-03-19
      • 2015-04-22
      • 1970-01-01
      • 2016-08-30
      • 2012-08-23
      相关资源
      最近更新 更多