#367 UNLHA32.DLLを利用してファイルを圧縮する方法 VBA、API

UNLHA32.DLLをVBAから呼び出して、ファイルをLZH形式に圧縮する方法です。

まず、標準モジュール等に以下のコードを記述します。ここには、UNLHA32.DLLをVBAから利用するための宣言と、汎用的に呼び出して使うためのプロシージャが書かれています。

Private Declare Function UNLHA Lib "UNLHA32.DLL" Alias "Unlha" _
              (ByVal hwnd As Long, ByVal szCmdLine As String, _
               ByVal Lpstr As String, ByVal wsize As Long) As Long

Public Function CompressFile(strDataFile As String, strLZHFile As String) As Boolean
'概要 指定ファイルをLZH形式に圧縮する
'引数 strDataFile : 圧縮元のファイルパス
'     strLZHFile  : 圧縮先のLZHファイルのパス
'返値 成功時 True、失敗時 False

  Dim strCmdLine As String
  Dim strBuff As String * 5000
  Dim lngRet As Long
  
  'UNLHAに渡すコマンドラインを組み立て
  strCmdLine = "a " & strLZHFile & " " & strDataFile
  
  'UNLHAにコマンドを発行
  lngRet = UNLHA(0, strCmdLine, strBuff, 5000)
  
  '返り値の設定
  If lngRet = 0 Then
    CompressFile = True
  Else
    CompressFile = False
  End If

End Function



CompressFileプロシージャは、次のようにして実行することができます。この例では、「c:\db1.mdb」ファイルを「c:\BackUp.lzh」に圧縮しています。

  CompressFile "c:\db1.mdb", "c:\BackUp.lzh"



■コマンドラインのスイッチに関する補足
UNLHA32.DLLにはさまざまなコマンドラインのスイッチが用意されています。
  • 上記サンプルで使っている"a"は圧縮する命令です。解凍命令も用意されています。
  • "-n"を指定すると、処理中の展開状況ダイアログの表示を抑止することができます。
        strCmdLine = "a -n " & strLZHFile & " " & strDataFile
  • "-d1"を指定することで、サブフォルダを再帰的に検索して圧縮、つまりサブフォルダ下のファイルもまとめて圧縮することができます。たとえばC:\tmp\の下にあるすべてのMDBファイルをBackUp.lzhに圧縮したい場合は、次のように指定します。
        strCmdLine = "a -d1 BackUp.lzh C:\tmp\ *.mdb"
  • その他スイッチの詳細はUNLHA32.DLLのアーカイブに同梱されている「COMMAND.TXT」を参考にすることができます。

■UNLHA32.DLLについての補足
上記のサンプルコードを実行するには、当然のことながらUNLHA32.DLLが必要となります。これはAccessに付属のものではありませんので、別途インターネット等よりダウンロードして入手し、さらにセットアップしておくことが前提となります。
UNLHA32.DLLはMicco氏によるフリーウェアで、以下のサイトなどから入手することができます。
    http://www2.nsknet.or.jp/~micco/micindex.html
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved