モジュールです。
Sub SP8501_GazouGet(strBookPATH As String, strOutPath As String)
'*************************************************************************************************
'@ エクセルブックから画像ファイルを取り出す
'* 注意事項;これはサンプルであり、様々な機能や例外処理等は省略しています
'* 実際にお使いになる場合は例外処理や各種機能の追加変更を行って下さい
'* [INPUT] strBookPATH AS STRING '==対象のブックのパス 例)D:\TET\AA.XLSX
'* strOutPath AS STRING '==このフォルダに画像ファイルを格納 フォルダが作られていないとエラーになります
'*************************************************************************************************
Dim strZipPath As String
Dim strKXL As String
Dim strAstar As String
Dim strTmpPATH As String
Dim intIdx As Integer
Dim strFname(1 To 512) As String
Dim intFsu As Integer
Dim strFnam As String
'
'***対象のブックを拡張子をZIPにして複写
strZipPath = Replace(strBookPATH, "xlsx", "zip", 1, -1)
strZipPath = Replace(strZipPath, "XLSX", "zip", 1, -1)
FileCopy strBookPATH, strZipPath
'
'***tempフォルダ準備
strTmpPATH = ThisWorkbook.path & "\temp"
On Error Resume Next
mkdir strTmpPATH
On Error GoTo 0
'
'***ZIP ファイルの解凍
Call SP_解凍(strZipPath, strTmpPATH) '==2300_ZIP操作.BAS
'
'***解凍したフォルダ下のXLのファイルを複写
strKXL = strTmpPATH & "\XL\media" '==解凍先したフォルダの中のXL下の画像フォルダ
strAstar = strKXL & "\*.*"
Call SP_FileNameGet(strAstar, strFname(), intFsu) '==与えられたフォルダ・拡張子のファイル名を得る
For intIdx = 1 To intFsu
FileCopy strKXL & "\" & strFname(intIdx), strOutPath & strFname(intIdx) '==strOutPathで指定するフォルダがないとエラーになります
Next
'
'***作成した ZIP ファイルを削除
KILL strZipPath
'
'***作成した tempフォルダ準備を削除
Dim FileObj As New FileSystemObject
Call FileObj.DeleteFolder(strTmpPATH, True) ' 指定したパスのフォルダを削除
Set FileObj = Nothing
'
'***EXIT
Exit Sub
End Sub
Sub SP_FileNameGet(strAstar As String, strFname() As String, intFsu As Integer)
'*************************************************************************************************
'@ 与えられたフォルダ・拡張子のファイル名を得る
'* [INPUT] strAstar As String '==条件 例) P:\DATA\*.ISC
'* [OUTPUT] strFname() As String '==条件に当てはまるファイル名(ファイル名にてSORT済み) フォルダ名は含まない
'* intFsu As Long '==条件に当てはまるファイル名の数(上記配列の有効数) 0ならファイルなし
'*************************************************************************************************
Dim strNowData As String
Dim intIdx As Long
'
'***初期化
intFsu = 0
'
'***ファイル名を得る
strNowData = Dir$(strAstar)
If Trim$(strNowData) <> "" Then
intFsu = 1
strFname(intFsu) = strNowData
For intIdx = 2 To UBound(strFname)
strNowData = Dir$
If Trim$(strNowData) = "" Then
Exit For
End If
intFsu = intFsu + 1
strFname(intFsu) = strNowData
Next
End If
'
'***EXIT
Exit Sub
End Sub
Sub SP_解凍(strZipPath As String, strOutPath As String)
'*****************************************************
'@ ZIP ファイルの解凍(win7 対応)
'* 参照設定で下記コントロールが必要
'* Microsoft Scripting Runtime
'* Microsoft Shell Controls And Automation
'* [INPUT] strZipPath As String '==解凍する書庫ファイル名 例) Y:\test.zip
'* strOutPath as string '==解凍先フォルダ
'*****************************************************
Dim objZIP As Shell32.Folder
Dim objZIPItem As Shell32.FolderItem
Dim objOut As Shell32.Folder
Dim objFso As Object
Dim objShell As Object
'
'***オブジェクト生成
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Shell.Application")
'***書庫オブジェクトを取得する
Set objZIP = objShell.Namespace(objFso.GetAbsolutePathName(strZipPath))
'***SP_解凍先を取得する
Set objOut = objShell.Namespace(objFso.GetAbsolutePathName(strOutPath))
'***SP_解凍していく
For Each objZIPItem In objZIP.Items
Call objOut.CopyHere(objZIPItem, 1044)
Next
'
'***後始末
Set objZIP = Nothing
Set objZIPItem = Nothing
Set objOut = Nothing
Set objFso = Nothing
Set objShell = Nothing
'
'***exit sub
Exit Sub
End Sub
テスト用メインです。
Sub TestMain()
'*****************************************************
'@ 8660_エクセルブックのシートをブックに分割のテスト用メイン
'*****************************************************
Dim strBookPATH As String '==対象のブックのパス 例)D:\TET\AA.XLSX
Dim strOutPath As String '==このフォルダに画像ファイルを格納
'
'***TEST用データブック
strBookPATH = ThisWorkbook.sheets(1).Range("DataPath")
If strBookPATH = "" Then
MSGBOX "画像を含むテスト用ブックのフルパスを設定して下さい"
Exit Sub
End If
'
'***TEST用出力フォルダ
strOutPath = ThisWorkbook.sheets(1).Range("DataPath2")
If strOutPath = "" Then
MSGBOX "テスト用に出力するフォルダを設定して下さい"
Exit Sub
End If
If Right$(strOutPath, 1) <> "\" Then strOutPath = strOutPath & "\"
'
'***CALL
Call SP8501_GazouGet(strBookPATH, strOutPath)
'
'***EXIT
MSGBOX "処理は終了しました"
Exit Sub
End Sub