下面的代码应该保存我的自动文件中的每个工作表。为什么它会一次又一次地保存整个文件(i)只是突出显示?
Sub Splitbook()
MyPath = ThisWorkbook.Path
For i = 1 To Worksheets.Count
Sheets(i).Activate
Sheets(i).SaveAs _
Filename:=MyPath & "\" & Sheets(i).Name & ".xlsx"
'ActiveWorkbook.Close savechanges:=False
Next i
End Sub
答案 0 :(得分:3)
正如@braX所说 - 每张工作表都会保存在新工作簿中 正如@TimWilliams所说 - 每张工作表都需要在保存之前复制到新工作簿。
ThisWorkbook
是包含VBA代码的文件
当工作表被复制到新文件时,新文件将成为活动工作簿,因此我们可以通过这种方式引用它(如果我们可以编写Set wrkBk = wrkSht.Copy
,那将会很棒,但VBA不喜欢这样)。
一旦我们引用了新文件,我们就可以使用工作表名称保存它 - 您可能希望添加代码以确保工作表名称是可行的文件名。
Public Sub SplitWorkbook()
Dim wrkSht As Worksheet
Dim wrkBk As Workbook
For Each wrkSht In ThisWorkbook.Worksheets
wrkSht.Copy
Set wrkBk = ActiveWorkbook
'Save the new file without closing.
'wrkBk.SaveAs ThisWorkbook.Path & "\" & wrkBk.Worksheets(1).Name
'Save the new file and close.
wrkBk.Close True, ThisWorkbook.Path & "\" & wrkBk.Worksheets(1).Name
Next wrkSht
End Sub