モジュールです。
Sub Sp8660_BookSht(strBookPATH As String, strOutPath As String)
'****************************************************************
'@ エクセルのシートをブックに分割
'* [INPUT] strBookPATH AS STRING '==対象のブックのパス 例)D:\TET\AA.XLSX
'* strOutPath AS STRING '==保存パス この後にブック名シート名がつく 例) D:\TEST\ AA.XLS --> D:\TEST\AA_SNAM.XLS
'***************************************************************
Dim obj読込ブック As Object
Dim intShtLoop As Integer
Dim strTaiSht As String
Dim strRtcd As String
Dim intShtName_Su As Integer '==シート数
Dim strShtName(1 To 512) As String '==シート名
'
'***対象ブックOPEN
Set obj読込ブック = Workbooks.Open(FileName:=strBookPATH)
'***シート名の取得()
intShtName_Su = 0
For intShtLoop = 1 To obj読込ブック.Worksheets.Count
intShtName_Su = intShtName_Su + 1
strShtName(intShtName_Su) = obj読込ブック.Worksheets(intShtLoop).NAME
Next
'
'***シートでLOOP
For intShtLoop = 1 To intShtName_Su
strTaiSht = strShtName(intShtLoop)
Call Sp8660_BookSht_SHT(obj読込ブック, strTaiSht, strOutPath, strRtcd) '==エクセルのシートをブックに分割 (1シート毎)
If strRtcd <> "OK" Then
MSGBOX strRtcd
Exit For
End If
Next
Set obj読込ブック = Nothing
'
'***終了
Exit Sub
End Sub
Sub Sp8660_BookSht_SHT(obj読込ブック As Object, strTaiSht As String, strOutPath As String, strRtcd As String)
'****************************************************************
'@ エクセルのシートをブックに分割 (1シート毎)
'* [INPUT] obj読込ブック AS OBJECT '==対象のブック
'* strTaiSht AS STRING '==対象のブックの対象シート
'* strOutPath AS STRING '==保存パス この後にブック名シート名がつく 例) D:\TEST\ AA.XLS --> D:\TEST\AA_SNAM.XLS
'* [OUTPUT] strRtcd AS STRING '=="OK" 以外はエラー内容
'***************************************************************
Dim obj作成ブック As Object
Dim lngTmp As Long
Dim strSakuFullPath As String
'
'***新たなブックを作成
lngTmp = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1 '==新規ブック追加時のシート枚数を変更
Set obj作成ブック = Workbooks.Add
Application.SheetsInNewWorkbook = lngTmp '==設定を元に戻す
'
'***保存ファイル名を決定
strSakuFullPath = strOutPath '==D:\TEST\
strSakuFullPath = strSakuFullPath & obj読込ブック.NAME '==D:\TEST\ABC
strSakuFullPath = strSakuFullPath & "_" & strTaiSht '==D:\TEST\ABC_SHT
strSakuFullPath = strSakuFullPath & ".xlsx" '==D:\TEST\ABC_SHT.xlsx
'***シートを複写
On Error GoTo ERR1
obj読込ブック.Worksheets(strTaiSht).Copy after:=obj作成ブック.Worksheets(1)
On Error GoTo 0
'
'***不要なシートを削除
obj作成ブック.Worksheets(1).Delete
'
'***保存
obj作成ブック.SaveAs FileName:=strSakuFullPath
obj作成ブック.Close (False)
'
'***後始末
Set obj作成ブック = Nothing
'
'***終了
strRtcd = "OK"
Exit Sub
'===========================================================================
'= エラーハンドリング(03.製造工程スケジュール.xlsで発覚
'===========================================================================
ERR1:
strRtcd = "シート複写エラー " & strTaiSht
Exit Sub
End Sub
'
テスト用メインです
Sub TestMain()
'*****************************************************
'@ 8660_エクセルブックのシートをブックに分割のテスト用メイン
'*****************************************************
Dim strBookPATH As String '==対象のブックのパス 例)D:\TET\AA.XLSX
Dim strOutPath As String '==保存パス この後にブック名シート名がつく 例) D:\TEST\ AA.XLS --> D:\TEST\AA_SNAM.XLS
'
'***TEST用データブック
strBookPATH = ThisWorkbook.Sheets(1).Range("DataPath")
If strBookPATH = "" Then
MSGBOX "TEST用データブックを指定して下さい"
Exit Sub
End If
'
'***TEST用出力フォルダ
strOutPath = ThisWorkbook.Sheets(1).Range("DataPath2")
If strOutPath = "" Then
MSGBOX "TEST用に書き出すフォルダを指定して下さい"
Exit Sub
End If
If Right$(strOutPath, 1) <> "\" Then strOutPath = strOutPath & "\"
'
'***CALL
Call Sp8660_BookSht(strBookPATH, strOutPath)
'
'***EXIT
MSGBOX "分割しました"
Exit Sub
End Sub