ActiveSheet.SaveAs仅保存第一个工作表 - 多次,但仅在某些计算机上保存

时间:2015-09-17 14:18:39

标签: vba excel-vba excel

以下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

2 个答案:

答案 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