Hello, Win32 API(VBA) World!
Posted on 4月 19th, 2012 by cx20
Win32 API(VBA)
Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
以下は VBA(Microsoft Visual Basic for Applications)からの呼出し例である。
ソースコード(Excel VBA / 32bit版)
Declare Function MessageBox Lib "User32.dll" Alias "MessageBoxA" ( _ ByVal hWnd As Long, _ ByVal lpText As String, _ ByVal lpCaption As String, _ ByVal uType As Long _ ) As Integer Sub Main() MessageBox 0, "Hello, Win32 API(VBA) World!", "Hello, World!", vbOKOnly End Sub |
64bit 版 VBA では Win32 API 使用時に PtrSafe を指定する必要がある。
ソースコード(Excel VBA / 64bit版)
Declare PtrSafe Function MessageBox Lib "User32.dll" Alias "MessageBoxA" ( _ ByVal hWnd As Long, _ ByVal lpText As String, _ ByVal lpCaption As String, _ ByVal uType As Long _ ) As Integer Sub Main() MessageBox 0, "Hello, Win32 API(VBA) World!", "Hello, World!", vbOKOnly End Sub |
なお、PtrSfae 属性は Office 2010 からの機能である為、下位互換の為に以下の条件付きコンパイル属性を指定することが推奨されている。
ソースコード(Excel VBA / 互換性を考慮した記述)
#If VBA7 And Win64 Then Declare PtrSafe Function MessageBox Lib "User32.dll" Alias "MessageBoxA" ( _ ByVal hWnd As Long, _ ByVal lpText As String, _ ByVal lpCaption As String, _ ByVal uType As Long _ ) As Integer #else Declare Function MessageBox Lib "User32.dll" Alias "MessageBoxA" ( _ ByVal hWnd As Long, _ ByVal lpText As String, _ ByVal lpCaption As String, _ ByVal uType As Long _ ) As Integer #end if Sub Main() MessageBox 0, "Hello, Win32 API(VBA) World!", "Hello, World!", vbOKOnly End Sub |
実行結果
--------------------------- Hello, World! --------------------------- Hello, Win32 API(VBA) World! --------------------------- OK --------------------------- |
Tags: Win32 API