Windows API を使う(Declare ステートメント)
Windows API を使う
VBA から Windows API(Application Programming Interface) の関数を呼び出して使用すると、Windows の機能を利用することができます。Windows API を使用するには、Declare ステートメントを使って宣言をします。
64Bit版の Microsoft Office を使用している場合、PtrSafe キーワードが必要になります。
Declare ステートメント
<Sub>
[ Public | Private ] Declare Sub name Lib “libname” [ Alias “aliasname” ] [( arglist )]
<Function>
[ Public | Private ] Declare Function name Lib “libname” [ Alias “aliasname” ] [( arglist )] [ As type ]
Declare ステートメント(64bit版 Microsoft Office を使用)
<Sub>
[ Public | Private ] Declare PtrSafe Sub name Lib “libname” [ Alias “aliasname” ] [( arglist )]
<Function>
[ Public | Private ] Declare PtrSafe Function name Lib “libname” [ Alias “aliasname” ] [( arglist )] [ As type ]
引数・戻り値
- PtrSafe ・・・ 64bit版の Excel を使用している場合は、必ず指定します。PtrSafe キーワードは、Declare ステートメントが 64bit版の Microsoft Office で安全に実行されることを主張します。
- name ・・・ プロシージャ名を指定します(省略不可)。
- libname ・・・ name で指定したプロシージャが含まれる DLL または、コードリソースの名前を指定します(省略不可)。
- aliasname ・・・ プロシージャ名とは異なる名前(別名)で、関数を使用したい場合にのみ使用します。
※ name に、別名を指定し、aliasname に、実際のプロシージャ名を指定します。 - arglist ・・・ プロシージャに渡す引数のリストを指定します(省略可)。
- type ・・・ プロシージャの戻り値の型を指定します(省略可)。
Windows API 使用例
サンプルVBAソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
'WindowsAPI の timeGetTime 関数(システム時刻をミリ秒単位で取得)を宣言 Declare Function timeGetTime Lib "winmm.dll" () As Long Sub Sample_WindowsAPI_timeGetTime() Dim TStart As Long Dim TEnd As Long Dim i As Long, j As Long, cnt As Long '処理開始時間の取得 TStart = timeGetTime For i = 1 To 30 For j = 1 To 15 cnt = cnt + 1 Cells(i, j) = cnt Next j Next i '処理開終了間の取得 TEnd = timeGetTime '処理経過時間を表示 MsgBox "処理時間:" & (TEnd - TStart) / 1000 & " 秒" End Sub |
実行結果
関連記事
-
Windows API:時間を計測(GetTickCount、timeGetTime)
ミリ秒単位の時間を計測 Windows API の GetTickCount や …