VBAからLhaplusを使ってZIP圧縮を行う
HomeVBAExcel

VBAからLhaplusを使ってZIP圧縮を行う

VBAからLhaplusを起動してZIP圧縮をするプログラムを書きました。 オプションでパスワードを付けることもできます。 Lhaplus をインストールして、パスを通してから使ってください(環境変数)。 パスの通し方は別記事「 Lhaplusのインストールディ...

VBAからLhaplusを起動してZIP圧縮をするプログラムを書きました。 オプションでパスワードを付けることもできます。

Lhaplusをインストールして、パスを通してから使ってください(環境変数)。 パスの通し方は別記事「Lhaplusのインストールディレクトリにパスを通す(VBAからLhaplusを使う準備)」で解説しています。

このコードを書くにあたり、下記のサイトを参考にさせていただきました。

このコードは、Windows7/Excel2007/Lhaplus1.59で動作確認しました。その後、2018年にコードを修正した際は、Windows10/Exel2016/Lhaplus1.74で動作確認しました。

更新履歴
2011/12/21 コード修正しました。(パスにダブルクォーテーションを追加など)
2018/02/18 コードをGistに置きました。
2018/05/22 コード修正しました。(パスワード対応)


Option Explicit
Sub test()
'パスは適宜書き換えて使ってください
'パスワード「abcd」でフォルダをZIP圧縮する場合
Call zipByLhaplus("C:\Temp\テスト", "C:\Temp", "abcd")
'パスワードなしでフォルダをZIP圧縮する場合
Call zipByLhaplus("C:\Temp\テスト", "C:\Temp")
'パスワード「abcd」でファイルをZIP圧縮する場合
Call zipByLhaplus("C:\Temp\テスト.txt", "C:\Temp", "abcd")
'パスワードなしでファイルをZIP圧縮する場合
Call zipByLhaplus("C:\Temp\テスト.txt", "C:\Temp")
End Sub
'Lhaplusを使ってファイルを圧縮する
'Lhaplus.exeが入っているディレクトリにパスを通してから実行
'引数は、圧縮したいファイルORフォルダ、圧縮したZIPの置き場所、パスワード(オプション)です。
Private Sub zipByLhaplus(ByVal targetPath As String, _
ByVal destinationPath As String, Optional ByVal zipPassword As String = "")
'処理待ちを15秒までとする(適宜書き換え)
Const WAITING_LIMIT_MILLISEC As Double = (0.25 / (24 * 60))
Dim FSO As Object
Dim WSH As Object
Dim wExec As Object
Dim startTime As Date
Dim fileName As String
Dim tempString As String
Set FSO = CreateObject("Scripting.FileSystemObject")
'指定されたパスをチェックする
If Not (FSO.FileExists(targetPath) Or FSO.FolderExists(targetPath)) Then
MsgBox "ZIP圧縮対象のファイルまたはフォルダが存在しないため" _
& "処理を終了します。", vbCritical
GoTo FNC_End
End If
If Not (FSO.FolderExists(destinationPath)) Then
MsgBox "ZIP圧縮先のフォルダが存在しないため処理を終了します。"
GoTo FNC_End
End If
If FSO.GetFolder(destinationPath).Attributes <> 16 Then
MsgBox "ZIP圧縮先のフォルダが書き込み可能なフォルダではないため" _
& "処理を終了します。", vbCritical
GoTo FNC_End
End If
'ZIP圧縮した時のファイル名を作成する(ざっくり)
fileName = targetPath
fileName = Mid(fileName, InStrRev(fileName, "\") + 1)
If fileName Like "*.*" Then
fileName = Left(fileName, InStrRev(fileName, ".") - 1)
End If
fileName = fileName & ".zip"
'ZIP圧縮後のファイルが存在している場合終了
If FSO.FileExists(destinationPath & "\" & fileName) Then
MsgBox "ZIP圧縮先のフォルダに同名のZIPファイルが存在しているため" _
& "処理を終了します。", vbCritical
GoTo FNC_End
End If
'シェルオブジェクトを作成する
Set WSH = CreateObject("WScript.Shell")
'シェルオブジェクトに渡す文字列を作る
tempString = "Lhaplus.exe /c:zip /o:" & _
"""" & destinationPath & """"
'パスワードの指定があれば追加
If zipPassword <> "" Then
tempString = tempString & " /p:" & zipPassword
End If
tempString = tempString & " " & """" & targetPath & """"
'Lhaplusで圧縮を行う
On Error Resume Next
Set wExec = WSH.Exec(tempString)
If Err.Number <> 0 Then
On Error GoTo 0
MsgBox "Lhaplusの呼び出しに失敗しました。"
GoTo FNC_End
End If
On Error GoTo 0
startTime = Now
'処理が終了するまでWindowsに制御を戻す
Do While wExec.Status = 0
DoEvents
'処理が長かったら終了
If (Now - startTime) >= WAITING_LIMIT_MILLISEC Then
MsgBox "処理待ちが長くなったので" _
& "いったん中断します。", vbInformation
Exit Do
End If
Loop
MsgBox "圧縮処理が完了しました。"
FNC_End:
Set FSO = Nothing
Set wExec = Nothing
Set WSH = Nothing
End Sub
Designed by Sneeit.Com
名前

101mm,1,Acer Aspire one 752,4,Android,8,Arduino,2,BIOS,1,BOSE,1,Canon,3,DS,1,DVD,1,EF24-105 F4L IS USM,1,Eos 70d,4,EOS Kiss X7,4,Excel,4,GIMP,5,Git,3,Git Bash,3,HD60S,1,Inkscape,3,iPad,3,iPhone,3,Kindle,2,Lightroom,1,Office,2,PC,9,PDF,1,PHP,1,SONY,1,SSD,3,SSH,3,ThinkPad,17,ThinkPad R61e,2,ThinkPad X240,6,ThinkPad X260,10,TOEFL,1,TOEIC,5,VBA,6,VBScript,3,VMware player,1,WEB制作,4,Windows,7,Windows 10,6,Windows 11,1,オーディオ,2,カメラ,10,キャプチャ,1,パソコン周辺機器,2,パソコン部品,4,レビュー,1,レンズ,2,圧縮&解凍,3,英語,8,仮想環境,1,家庭学習,3,撮影機材,6,雑感,3,子育て,5,資格,14,情報処理技術者試験,5,中古,5,電子工作,2,電子書籍,2,動画,3,動画制作,4,変換,1,簿記,2,
ltr
item
勉強とガジェット: VBAからLhaplusを使ってZIP圧縮を行う
VBAからLhaplusを使ってZIP圧縮を行う
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTJrSJzHI0ZNhg7xD9cSE1iQ4Jm784l-pn5k3IR1kCLR-KabR1Zv32crbMdS-ejIHdGvkFGeMViqI1ELFJ0IOG_PfRd9hO1U6AcLfDqaI2nKz7BMPgHVnJD1gGiceHSx9x3fI6uIB_w5Z8/s400/workbook-1205068_1920.jpg
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTJrSJzHI0ZNhg7xD9cSE1iQ4Jm784l-pn5k3IR1kCLR-KabR1Zv32crbMdS-ejIHdGvkFGeMViqI1ELFJ0IOG_PfRd9hO1U6AcLfDqaI2nKz7BMPgHVnJD1gGiceHSx9x3fI6uIB_w5Z8/s72-c/workbook-1205068_1920.jpg
勉強とガジェット
http://tanaka-misaki.blogspot.com/2011/12/vbalhapluszip.html
http://tanaka-misaki.blogspot.com/
http://tanaka-misaki.blogspot.com/
http://tanaka-misaki.blogspot.com/2011/12/vbalhapluszip.html
true
8692194293250221214
UTF-8
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content