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:

Categories: library, VBA, Win32 API

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

WP-SpamFree by Pole Position Marketing