INDEX
Declareの概要
外部のWindows API関数を呼び出す VBAの予約語 | ||
Declare 概要 Declare ステートメントは、VBAでWindows APIなどの外部ライブラリ関数を使用するために宣言するためのキーワードです。これを使うことで、VBAからOSの機能を直接利用することができます。 わかりやすく説明 VBAからWindowsの機能を使うために、外部関数を宣言する命令。 |
||
|
Declareの基本的な使い方
以下の例では、Windows APIの GetTickCount
関数をVBAから呼び出します。
Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
Sub ShowTickCount()
MsgBox "システム起動からのミリ秒: " & GetTickCount()
End Sub
解説:
Declare PtrSafe Function
: 64ビット環境に対応した外部関数の宣言。Lib "kernel32"
: Windowsのkernel32.dll
内の関数を使用。GetTickCount
: システムが起動してからのミリ秒を取得。
64ビット環境対応のDeclare
VBAでWindows APIを使う場合、32ビット版と64ビット版の違いに対応するために PtrSafe
を追加する必要があります。
#If VBA7 Then
Declare PtrSafe Function GetTickCount Lib "kernel32" () As Long
#Else
Declare Function GetTickCount Lib "kernel32" () As Long
#End If
解説:
#If VBA7 Then
: VBA7(Office 2010以降)ならPtrSafeを使う。#Else
: VBA6(古い環境)では通常のDeclareを使う。
Windows APIを使ったメッセージボックスのカスタマイズ
Windows APIの MessageBox
関数を使って、カスタマイズされたメッセージボックスを表示できます。
Declare PtrSafe Function MessageBox Lib "user32" Alias "MessageBoxA" ( _
ByVal hWnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal uType As Long) As Long
Sub CustomMessageBox()
Dim result As Long
result = MessageBox(0, "カスタムメッセージボックス", "タイトル", 1)
If result = 1 Then
MsgBox "OK が押されました"
End If
End Sub
解説:
MessageBox
: Windows標準のメッセージボックスを表示。Alias "MessageBoxA"
: ANSI版のAPI関数を指定。uType = 1
: OKボタンとキャンセルボタンを表示。
Excel VBAでのDeclareの活用
Excelのウィンドウを最前面にするWindows APIの利用例です。
Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Sub BringExcelToFront()
Dim hWnd As Long
hWnd = FindWindow("XLMAIN", Application.Caption)
If hWnd <> 0 Then
SetForegroundWindow hWnd
End If
End Sub
解説:
FindWindow
: Excelウィンドウのハンドルを取得。SetForegroundWindow
: Excelを最前面に表示。
Declareの制限と注意点
- 64ビット環境ではPtrSafeが必須: 32ビット環境のVBAと互換性を持たせるために対応が必要。
- 間違ったAPIの呼び出しはクラッシュの原因: APIを誤って使用するとVBAが強制終了することがある。
- Windows APIの仕様変更に注意: OSのバージョンによっては使用できないAPIがある。
よくある質問
- Q: Declare でエラーが出るのはなぜですか?
- A: 64ビット環境では
PtrSafe
を追加する必要があります。 - Q: Declare で呼び出す関数の一覧はどこで確認できますか?
- A: Microsoftの公式ドキュメントや
win32api.txt
などのリファレンスを参照してください。 - Q: Declare は何のために使うのですか?
- A: VBA単体ではできない高度な機能(ウィンドウ操作・ファイル管理など)を実行するために使います。
まとめ
- Declare ステートメントは、VBAから外部のWindows APIを利用するために使う。
- PtrSafe を付けることで、64ビット環境でも動作するようになる。
- Windows APIを活用すると、VBAでは実現できない機能を実装可能。
- 誤ったAPIの使い方をするとVBAがクラッシュする可能性があるため注意が必要。