Win32 API は Windows が提供する API のこと。
Win32 API を利用することで、VBA の機能だけでは実現できない、Windows の機能やリソースに直接アクセスするといった処理ができるようになる。
利用方法
VBA から Win32 API を利用するためには、モジュールの宣言セクションで API を宣言する。
API の宣言には Declare ステートメントを使う。
'値を返さない場合 Declare PtrSafe Sub 〈関数名〉 Lib "〈DLL名〉" ([引数リスト]) '値を返す場合 Declare PtrSafe Function 〈関数名〉 Lib "〈DLL名〉" ([引数リスト]) As 〈戻り値のデータ型〉
- DLL名: 関数が含まれている DLL の名前(拡張子は入力不要)
- 引数リスト: 関数に渡す引数を指定
たとえば User32.dll にある MessageBoxA 関数を宣言するときは次のようになる。
Declare PtrSafe Function MessageBoxA Lib "user32" ( _ ByVal hWnd As LongPtr, _ ByVal lpText As String, _ ByVal lpCaption As String, _ ByVal uType As Long _ ) As Long
関数を呼び出すときは、次のように書く。
MessageBoxA 0, "Hello, World!", "テスト", 0
異なる名前で呼び出せるようにするときは Alias を使って定義する。
Declare PtrSafe Sub 〈別名〉 Lib "〈DLL名〉" Alias "〈本来の関数名〉" ([引数リスト])
たとえば MessageBoxA 関数を MessageBox で呼び出せるようにするには、次のように宣言する。
Declare PtrSafe Function MessageBox Lib "user32" Alias "MessageBoxA" _ ( _ ByVal hWnd As LongPtr, _ ByVal lpText As String, _ ByVal lpCaption As String, _ ByVal uType As Long _ ) As Long
関数を呼び出すときは、次のように書く。
MessageBox 0, "Hello, World!", "テスト", 0
サンプルコード
次のコードは、VBA から Win32 API の MessageBoxA 関数を呼び出すプログラムの全文である。
標準モジュールを新しく作り、コードをそのまま貼り付ければ動かせる。
Option Explicit Private Declare PtrSafe Function MessageBoxA Lib "user32" ( _ ByVal hWnd As LongPtr, _ ByVal lpText As String, _ ByVal lpCaption As String, _ ByVal uType As Long _ ) As Long Sub Main() MessageBoxA 0, "Hello World!", "テスト", 0 End Sub
↓ 実行すると、メッセージボックスが表示される
