VBAのLibで外部ライブラリを参照する方法をわかりやすく解説

スポンサーリンク
スポンサーリンク

Libの概要

外部ライブラリ参照 VBAの予約語

Lib

概要 Lib キーワードは、VBAで外部の動的リンクライブラリ(DLL)を使用するために、Declare ステートメントと共に使用されます。

わかりやすく説明 Lib は、VBAからWindowsの機能や外部のDLLを使うための橋渡し役です。例えば、システムの時間を取得するAPIをVBAから直接呼び出すことができます。

  • Windows APIや外部DLLの関数をVBAで利用する。
  • Declare ステートメントと組み合わせて使用する。
  • DLLのファイル名を指定し、関数を呼び出す。
  • システム関数(例:ファイル操作、メモリ管理、時間取得など)を直接利用できる。

Libの基本的な使い方

Windows APIの GetTickCount 関数(PCの起動後の経過時間をミリ秒単位で取得)をVBAから呼び出す例です。

Declare Function GetTickCount Lib "kernel32" () As Long

Sub ShowTickCount()
    MsgBox "PCの起動後の経過時間: " & GetTickCount & " ミリ秒"
End Sub

解説:

  • Declare Function でWindows APIの GetTickCount をVBAに定義。
  • Lib "kernel32"kernel32.dll 内の関数を使用。
  • この関数を実行すると、PCの起動後の経過時間がミリ秒単位で表示される。

引数付きのAPI関数を呼び出す

次の例は、Windowsの MessageBox API を使ってメッセージボックスを表示する方法です。

Declare PtrSafe Function MessageBoxA Lib "user32" (ByVal hWnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal uType As Long) As Long

Sub ShowMessageBox()
    MessageBoxA 0, "VBAからAPIを呼び出しました!", "APIテスト", 0
End Sub

解説:

  • Lib "user32" でWindowsの user32.dll 内の関数を利用。
  • MessageBoxA は標準のWindowsメッセージボックスを表示するAPI。
  • 第1引数の hWnd はウィンドウハンドル(VBAでは通常 0)。
  • 第2引数と第3引数でメッセージとタイトルを指定。
  • 第4引数の 0 は、標準的なOKボタンのみのメッセージボックス。

エラーを回避する方法

APIの呼び出しには注意が必要です。誤った使い方をすると、VBAがクラッシュする可能性があります。

Declare PtrSafe Function GetSystemDirectoryA Lib "kernel32" (ByVal lpBuffer As String, ByVal uSize As Long) As Long

Sub SafeAPIUsage()
    Dim buffer As String * 255
    Dim result As Long
    
    On Error Resume Next
    result = GetSystemDirectoryA(buffer, 255)
    
    If Err.Number <> 0 Then
        MsgBox "エラー発生: " & Err.Description, vbExclamation, "エラー"
        Err.Clear
    Else
        MsgBox "システムディレクトリ: " & Left(buffer, result)
    End If
End Sub

解説:

  • GetSystemDirectoryA API を呼び出して、Windowsのシステムディレクトリのパスを取得。
  • バッファサイズを固定し、メモリ破壊を防止。
  • On Error Resume Next でエラーを回避し、発生時にはエラーメッセージを表示。

Libの注意事項

  • 64ビット環境では PtrSafe を追加: 64ビットVBAでは Declare の前に PtrSafe を付ける必要がある。
  • APIの誤用はクラッシュの原因: 不適切なパラメータで呼び出すとVBAがクラッシュする可能性がある。
  • DLLファイルが存在しないとエラー: 指定したDLLがシステムにない場合、エラーが発生する。
  • 管理者権限が必要な場合がある: 一部のAPIは管理者権限がないと実行できない。

よくある質問

Q: Lib キーワードはどこで使われますか?
A: Declare ステートメントと組み合わせて、Windows APIや外部DLLの関数を呼び出すときに使用されます。
Q: 32ビットVBAと64ビットVBAの違いは?
A: 64ビットVBAでは PtrSafe を追加する必要があります。32ビットでは不要です。
Q: DLLがないとどうなりますか?
A: 指定したDLLがシステム上に存在しない場合、実行時エラーが発生します。
Q: APIを呼び出すとVBAがクラッシュしました。どうすればいいですか?
A: 不適切な引数を渡していないか確認してください。また、On Error Resume Next を使用してエラーハンドリングを行いましょう。

まとめ

  • Lib キーワードは外部のDLLを参照し、VBAから関数を呼び出すために使用する。
  • Windows APIを利用することで、VBAの機能を拡張できる。
  • 使用するDLLがシステム上に存在することを確認する必要がある。
  • 64ビット環境では PtrSafe を追加する必要がある。
  • 誤ったAPIの使い方をするとVBAがクラッシュするため、エラーハンドリングを適切に行う。