吉岡 恒夫さんのZip32j.dllを使用します。
http://openlab.ring.gr.jp/tsuneo/zip32j/からどうぞ。
このdllをVBAから呼び出します。
1.ライブラリの関数zipを定義します。
下記の定義をDeclarations部分に記述してください。
Private Declare Function zip Lib "Zip32j.dll" Alias "Zip" ( _
ByVal lhWnd As Long, _
ByVal szCmdLine As String, _
ByVal szOutPut As String, _
ByVal wSize As Long _
) As Long
2.関数を実行するサンプルです。
xxxxxx.xxxというファイルをyyyyyy.zipとして圧縮します。
Sub Zipper()
Dim Filename As String
Dim ArchiveName As String
Dim Command As String
Dim RC As Long
Dim hWnd As Long
Dim OutPut As String * 512
Dim Size As Long
Filename = "c:¥xxxxxx.xxx"
ArchiveName = "c:¥yyyyyy.zip"
Command = ArchiveName & " " & Filename
Size = Len(OutPut)
RC = zip(hWnd, Command, OutPut, Size)
End Sub
hWndはAPIによくでてくるウィンドウのハンドルIDですが、ここでは省略しても、うまく動くようです。
OutPutの512バイトは適当です。こちらも0でも動くようです。
Commandにはオプションの指定もできます。APIを参考にしてみてください。
なお、zip32j.dllのほかにzip32.dllも必要です。(多分導入されていると思いますが。。。)