Option
Explicit
' 将Excel文件内的工作表在原目录内单独保存为新文件,选是加序号,选否无序号
Function SplitSheets(File, order)
Dim oXls, SheetsCount, OrderNumber, i
Set oXls = oExcel.Workbooks.Open(File)
SheetsCount = oXls.Sheets.Count - 1 ' 取工作表数量
OrderNumber =
""
' 定义前缀序号
Dim SheetArray()
ReDim SheetArray(SheetsCount) ' 定义数组
If
SheetsCount = 0 Then
SheetArray(0) =
"只有一个工作表不需要分割"
Else
For
i = 0 To SheetsCount
If
order Then OrderNumber = Right(
"0"
& i, 2) &
"."
SheetArray(i) = oXls.Path &
"\" & OrderNumber & oXls.Sheets(i + 1).Name & "
.xlsx"
oXls.Sheets(i + 1).Copy ' 复制工作表
oExcel.ActiveWorkbook.SaveAs(SheetArray(i)) ' 另存工作表为新文件
oExcel.ActiveWorkbook.Close
Next
End
If
oXls.Close
Set oXls =
Nothing
SplitSheets = Join(SheetArray, vbCrLf) ' 返回文件名
End
Function
Dim FileCount
FileCount = WScript.Arguments.Count
If
FileCount = 1 Then ' 拖拽文件
FileName = WScript.Arguments(0)
If
LCase(Right(FileName, 4)) <>
".xls"
And
LCase(Right(FileName, 5)) <>
".xlsx"
Then
MsgBox
"只能处理 Excel 格式的文件"
, vbCritical,
"错误"
WScript.Quit
End
If
End
If
If
FileCount < 2 Then
Dim oExcel, FileName
On
Error
Resume Next
Set oExcel = WScript.CreateObject(
"Excel.Application"
)
If
Err.Number <> 0 Then
MsgBox
"无法创建 Excel 组件,请安装 Office 后执行"
, vbCritical,
"错误"
WScript.Quit
End
If
If
FileCount = 0 Then ' 无拖拽文件打开文件选择框
Dim FileDialog
Set FileDialog = oExcel.FileDialog(3)
FileDialog.Filters.
Add
"Excel 文件"
,
"*.xls; *.xlsx"
FileDialog.AllowMultiSelect = False
'FileDialog.InitialFileName =
"默认路径"
FileDialog.show()
If
FileDialog.SelectedItems.Count = 1 Then
FileName = FileDialog.SelectedItems(1)
End
If
Set FileDialog =
Nothing
End
If
If
Not
IsEmpty(FileName) Then
Dim Response
Response = MsgBox(
"选择 是:分割工作表到新文件(带序号)"
& vbCrLf &
"选择 否:分割工作表到新文件(无序号)"
, vbQuestion + vbYesNoCancel,
"选择处理方式"
)
If
Response = vbYes Then
MsgBox SplitSheets(FileName, True), vbInformation,
"分割完成"
End
If
If
Response = vbNo Then
MsgBox SplitSheets(FileName, False), vbInformation,
"分割完成"
End
If
End
If
oExcel.Quit
Set oExcel =
Nothing
Else
MsgBox
"只能处理 1 个 Excel 文件"
, vbCritical,
"错误"
End
If