2013-04-26 83 views
5

我想導出我的工作簿中大量的工作表通過一些像這樣的代碼爲.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

回答

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文件而不詢問文件是否已存在。

+0

我在準備這個相同的答案是最方便的,所以+ 1 – 2013-04-26 09:17:27

+0

太棒了。想好讓它成爲臨時工作簿,而不是試圖阻止'SaveAs'做它想做的事! – 2013-04-28 23:54:49

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 
相關問題