以下VBA代码段在具有Excel版本的一台计算机上正常运行 " Microsoft(R)Office Excel(R)2007(12.0.6727.5000)SP3 MSO(12.0.6728.5000)" 但不是一个人 " Microsoft(R)Office Excel(R)2007(12.0.6729.5000)SP3 MSO(12.0.6728.5000)"
断开和单步表示wSheet正在迭代已知的工作表,但导出的文件只包含第一个工作表的内容 - 即sheet1.csv,sheet2.csv,sheet3.csv全部保存,但每个一个包含工作簿中sheet1的内容。
单独的"宏"只保存活动工作表的行为相同 - 无论哪个工作表在"宏"调用时,只保存第一个工作表中的数据,但保存到名为活动工作表的文件中。 DBPrint语句还显示wSheet正在迭代工作表。 (DBPrint只是一个带有开/关开关的Debug.Print。)
For Each wSheet In ActiveWorkbook.Worksheets
wSheet.Activate
wSheetName = wSheet.Name
SaveAsName = wBookName & "." & wSheetName & ".csv"
DBPrint "saving as " & SaveAsName
On Error Resume Next
wSheet.SaveAs filename:=SaveAsName, FileFormat:=xlCSV
' ... error handling code (no errors reported, though)
On Error GoTo 0
Next wSheet
答案 0 :(得分:2)
我的解决方法:
Dim Workbook1 As Workbook
Set Workbook1 = ActiveWorkbook
For Each wSheet In Workbook1.Sheets
SaveAsName = wBookName & "." & wSheet.Name & ".csv"
DBPrint "saving as " & SaveAsName
wSheet.Copy After:=Workbook1.Sheets(Workbook1.Sheets.Count)
Workbook1.Sheets(Workbook1.Sheets.Count).Move
ActiveWorkbook.SaveAs filename:=SaveAsName, FileFormat:=xlCSV
ActiveWorkbook.Close False
Next wSheet
尝试一下,让我知道它是否有效。
答案 1 :(得分:0)
我遇到了同样的问题,并且暂时使用了@ puzzlepiece的解决方法。它工作得很好,但随着我必须使用的数据集变大,它变得有点慢。
幸运的是,我找到了一个不需要复制和移动的修复程序:https://www.extendoffice.com/documents/excel/628-excel-split-workbook.html
Sub Splitbook()
'Updateby20140612
Dim xPath As String
xPath = Application.ActiveWorkbook.Path
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each xWs In ThisWorkbook.Sheets
xWs.Copy
Application.ActiveWorkbook.SaveAs Filename:=xPath & "\" & xWs.Name & ".xlsx"
Application.ActiveWorkbook.Close False
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub