関数・メソッド

メッセージボックスを最前面に表示させる【WinAPI】【ExcelVBA】

メッセージボックスを最前面に表示させたい

Excel VBAマクロでメッセージボックスを最前面に表示させたいケースがあります。

■最前面に表示させたいケース
Excel以外のプログラムをVBAが立ち上げるが、MsgBoxを最前面に表示させたい。
※通常のMsgBoxはExcelのプログラム内の最前面に表示する為、
他のプログラムが前面にあると表示が出来ません。

メッセージボックスを最前面に表示する方法

WindowsのAPIを使用する事でメッセージボックスを最前面に表示させます。

Public 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 Long
Public Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)

'■メッセージボックスを最前面に表示させる
Public Sub sample()
    Const MB_OK As Long = &H0
    Const MB_TOP As Long = &H40000
    
    Dim lpText As String: lpText = "本文:最前面テスト"
    Dim lpCaption As String: lpCaption = "メッセージボックスキャプション"

    '■5秒タイマー(この間に別プログラムを立ち上げてください)
    Sleep 5000
    '■WindowsAPIでメッセージボックスを最前面に表示
    MessageBox 0, lpText, lpCaption, MB_OK Or MB_TOP

    '■5秒タイマー(この間に別プログラムを立ち上げてください)
    Sleep 5000
    MsgBox "VBAのMsgBoxではExcel上は最前面だが、別プログラムの前面には来れない"
End Sub

注意点

  • 上記は32ビット版のExcelで動作をします。
  • 64ビット版の場合は以下で宣言をして下さい。
    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

関連記事

コメント