VBAとWindowsの標準機能でZIPを解凍する関数を作ってみた

2011年11月11日金曜日

tips vba

t f B! P L
サーバーにZIPのライブラリをインストールできなかったので、VBAでZIPを解凍することになった。


Private Declare Sub Sleep Lib "kernel32" _
  (ByVal dwMilliseconds As Long)

Sub unZip(ByVal sZipFile As String, ByVal sDir As String, Optional ByVal bFlgDel As Boolean = False)
Dim objFileSys As Object
Dim objShell As Object
Dim objFile As Object
Dim objDestination As Object

Set objFileSys = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Shell.Application")

If isFileExist(sZipFile) = False Then Exit Sub

Set objFile = objShell.Namespace(sZipFile)
Set objDestination = objShell.Namespace(sDir)
objDestination.CopyHere objFile.Items
If bFlgDel Then Kill sZipFile

End Sub

vZipFile:解凍したいZipファイルのフルパス。
vDestination:解凍先のディレクトリ。
bFlgDel:解凍後、Zipファイルを残すか。デフォルトflase(残す)。

めも
展開先にすでにファイルがある場合は、上書き確認のウインドウが表示されてしまい、自動化できない。
その場合、既存のファイルをリネームするなり、削除するなりする処理を行ったうえで、解凍すればよい。
たぶん、もっとエレガントな回避方法があると思うけど、取り急ぎ無理だったので上記対応。

QooQ