Libの概要
外部ライブラリ参照 VBAの予約語 | ||
Lib 概要 Lib キーワードは、VBAで外部の動的リンクライブラリ(DLL)を使用するために、 わかりやすく説明 Lib は、VBAからWindowsの機能や外部のDLLを使うための橋渡し役です。例えば、システムの時間を取得するAPIをVBAから直接呼び出すことができます。 |
||
|
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がクラッシュするため、エラーハンドリングを適切に行う。