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

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

问题描述:

我想导出我的工作簿中大量的工作表通过一些像这样的代码为.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 Filename:=filePath, FileFormat:=xlCSV 

    Next 
End Sub 

的问题是这节省了我打开的当前.xlsm文件。

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

我认为SaveCopyAs会做的伎俩,但它只适用于workbook而不是worksheet

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

+0

我在准备这个相同的答案是最方便的,所以+ 1 – 2013-04-26 09:17:27

+0

太棒了。想好让它成为临时工作簿,而不是试图阻止'SaveAs'做它想做的事! – 2013-04-28 23:54:49

你也可以先保存工作簿,然后保存关闭工作表最后关闭工作簿,而不必(再次)保存:

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