VBAはそれ単独でも非常に強力であり、さまざまな処理・動作が可能です。しかしながらファイル操作等でVBAの機能だけではできない処理があります。そんな時でもWindowsが提供する機能を実行できるwin APIを利用すれば、さらに強力な処理が可能となります。今回はVBAからwin APIを利用する方法を調べました。
Contents
win API
win APIとはソフトウェアがWindowsの機能を利用するためのインターフェースです。
win APIの宣言
win APIをVBAで使用するためには、Declareステートメントで使用するAPI関数の宣言を行う必要があります。
宣言はwin32 をコールするか、win64をコールするかで宣言が異なります。
win32での宣言
1 2 3 4 5 |
Declare Function function_name _ '関数名 Lib lib_name _ 'ライブラリ名 Alias alias_name _ '正式な関数名 (ByVal argument_name As argument_type, ... ) _ '引数指定 As return_type '返り値指定 |
- function_name : VBAで使用するうえでの関数名
- lib_name : WinAPIを提供するライブラリー名
- alias_name : ライブラリー内で定義されている正式な関数名
- argument_name : 関数の引数名
- argument_type : 関数の引数の型
- return_type : 返り値の型
win64での宣言
1 2 3 4 5 |
Declare PtrSafe Function function_name _ '64bit宣言と関数名 Lib lib_name _ 'ライブラリ名 Alias alias_name _ '正式な関数名 (ByVal argument_name As argument_type, ... ) _ '引数指定 As return_type '返り値指定 |
- PtrSafe : win64 の時宣言する必要がある
- function_name : VBAで使用するうえでの関数名
- lib_name : WinAPIを提供するライブラリー名
- alias_name : ライブラリー内で定義されている正式な関数名
- argument_name : 関数の引数名
- argument_type : 関数の引数の型
- return_type : 返り値の型
使用例
GetAsyncKeyState
1 2 3 |
short GetAsyncKeyState( int vKey /*仮想キーコード*/ ); |
- 関数実行時に指定したキーが押されているか調べる
- ライブラリー名 User32.dll
- 引数 : キーコード
- 戻り値の最上位ビットがonの時、実行時にキーが押されていた
1 2 3 4 5 |
Declare GetAsyncKeyState _ Lib "User32" _ Alias "GetAsyncKeyState" _ (ByVal vkey As long) _ As integer |
SetForegroundWindow
1 2 3 |
BOOL SetForegroundWindow( HWND hWnd /*ウィンドウのハンドル*/ ); |
- ウィンドウをアクティブにする
- ライブラリー名 User32
- 引数 : アクティブにしたウィンドウズの関数
1 2 3 4 5 |
Declare SetForegroundWindow _ Lib "User32" _ Alias "GetAsyncKeyState" _ (ByVal hWnd As long) _ As Long |
参考文献