2015-12-08 41 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 
相关问题