有时候我们拿到一个excel工作簿,希望将其中所有工作表独立另存为一个个独立的excel工作簿。
如果用手工操作,可以用鼠标右键单击工作表名称标签,在弹出的快捷菜单中选择“移动或者复制”命令,在弹出的“移动或者复制工作表”对话框中可以选择将工作表移动到当前工作簿中的任意一个工作表的位置之前或之后,也可以将工作表移动到一个新的空白工作簿。
在vba中,Worksheet对象的Copy方法可以实现以上的功能。
它的语法如下:
expression . Copy( Before , After )
其中 Before 和After参数表示要插在哪个工作表之前或者之后,如果都不提供的话,则表示移动到一个空白的新的工作簿。
基于上述的知识,可以应用下面的vba代码批量将所有excel工作簿中的所有工作表批量另存为独立的excel工作簿:
Sub 工作表批量另存为独立的工作簿()
'QQ:1722187970,微信:xycgenius,公众号:水星excel
Dim oWK As Worksheet
Dim oWB As Workbook
Dim sPath As String
Dim sName As String
If MsgBox("现在开始将把各工作表独立另存为工作簿文件,请再次检查格式数据是否正确?", vbYesNo, "重要提示") = vbYes Then
'要保存的路径
sPath = Excel.ThisWorkbook.Path
'避免保存过程中弹出对话框干扰、公式计算干扰等
Excel.Application.ScreenUpdating = False
Excel.Application.Calculation = xlCalculationManual
Excel.Application.DisplayAlerts = False
For Each oWK In Excel.ThisWorkbook.Worksheets
With oWK
'将工作表名称作为工作簿的名称保存
sName = .Name
.Copy
Set oWB = Excel.Application.ActiveWorkbook
oWB.SaveAs sPath & "\" & .Name, xlOpenXMLWorkbook
oWB.Close
End With
Next
Excel.Application.ScreenUpdating = True
Excel.Application.Calculation = xlCalculationAutomatic
Excel.Application.DisplayAlerts = True
MsgBox "操作结束"
End If
End Sub


发表评论