2015-12-08 74 views
9

我明白有很多條目的像save individual excel sheets as csvExport each sheet to a separate csv file - 但我想保存一個工作表在工作簿中。VBA保存單張爲CSV(不是整個工作簿)

我的xlsm文件中的代碼有一個參數和數據表。我使用粘貼的值創建數據的工作表副本,然後將其保存爲csv。目前,我的整個工作簿更改名稱併成爲csv。

如何在Excel工作簿中「另存爲csv」單個工作表?

是否有Worksheet.SaveAs或是否必須將我的數據表移動到另一個工作簿並將其保存?

代碼示例

' [Sample so some DIMs and parameters passed in left out] 
Dim s1 as Worksheet 
Dim s2 as Worksheet 

Set s1 = ThisWorkbook.Sheets(strSourceSheet) 
' copy across 
s1.Range(s1.Cells(1, 1), s1.Cells(lastrow, lastcol)).Copy 

' Create new empty worksheet for holding values 
Set s2 = Worksheets.Add 

s2.Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats 

' save sheet 
s2.Activate 
strFullname = strPath & strFilename 


' >>> BIT THAT NEEDS FIXIN' 
s2.SaveAs Filename:=strFullname, _ 
    FileFormat:=xlCSV, CreateBackup:=True 

' Can I do Worksheets.SaveAs? 

使用Windows 10和Office 365

+0

如果使用Worksheet.Copy方法,沒有設置粘貼目標,Excel將打開它作爲一個新的工作簿,僅包含表。 Worksheet.Copy之後,您可以簡單地使用ActiveWorkbook,因爲複製的工作簿成爲活動工作簿,並從那裏保存爲新的CSV文件。 – Alex4336

+0

令人驚歎 - 2500次觀看並且沒有一次投票... – micstr

回答

9

此代碼適合我。

Sub test() 

Application.DisplayAlerts = False 

ThisWorkbook.Sheets(strSourceSheet).Copy 
ActiveWorkbook.SaveAs Filename:=strFullname, FileFormat:=xlCSV, CreateBackup:=True 
ActiveWorkbook.Close 

Application.DisplayAlerts = True 

End Sub 

它使得整個strSourceSheet片,這將打開一個新的工作簿,然後我們可以保存爲.csv文件的副本,然後將其關閉新保存的.csv文件,在不搞亂文件名您的原始文件。

+0

感謝@ Alex4336我加入到接近 'ActiveWorkbook.Close的SaveChanges:= FALSE' _#和刪除臨時表中xlsm_ 's2.Delete' – micstr

+0

這只是一個快速的草案,可以隨意使用它如何你喜歡:) 上面的代碼並不需要刪除S2,因爲它不會首先創建S2。 – Alex4336

+0

優秀的答案,亞歷克斯。它幫助了很多,我只是補充說複製命令會創建一個名爲「Book1.xlsx」的新工作簿,其中只有複製的工作表,該新工作簿將成爲ActiveWorkbook。關閉該工作簿後,ActiveWorkbook將再次成爲您的原始代碼運行工作簿,該工作簿仍處於打開狀態並保持不變。 –

1

您只需將工作簿保存爲CSV文件。 Excel將彈出您保存到一張紙上一個對話框,警告,但可以抑制警告與Application.DisplayAlerts = False.

不要忘了把它放回去真雖然。

+0

ActiveWorkbook.SaveAs ....例如。 – PaulG

+0

Thanks @PaulG。我習慣於在Excel中手動獲取該提示,但代碼重命名我的文件時沒有任何提示,這很奇怪 – micstr

+0

ActiveWorkbook.SaveAs ...正在保存工作表(提示文件將被覆蓋),但它也正在將我的xlsm母帶文件重命名爲根目錄中的csv文件名!所以我仍然堅持 – micstr

0

這是很普通的

Sub WriteCSVs() 

Dim mySheet As Worksheet 
Dim myPath As String 

'Application.DisplayAlerts = False 

For Each mySheet In ActiveWorkbook.Worksheets 

    myPath = "\\myserver\myfolder\" 

    ActiveWorkbook.Sheets(mySheet.Index).Copy 
    ActiveWorkbook.SaveAs Filename:=myPath & mySheet.Name, FileFormat:=xlCSV, CreateBackup:=True 
    ActiveWorkbook.Close 

Next mySheet 

'Application.DisplayAlerts = True 

End Sub 
相關問題