• 締切済み

VBAにてメッセージボックスを最前面に表示させる

エクセルVBAにて、指定時刻になったらメッセージボックスを、最前面に表示させるプログラムを作成中です。 時刻の指定は、ontimeメソッドの使用でできました。 しかし、最前面(他のアプリケーションを開いていても、メッセージボックスが手前に表示される)がどうしてもできません。。 VBだとAPI関数を使って、フォームを常に最前面表示はできました。 メッセージボックスで、このような表示方法は実現可能なのでしょうか? どなたか教えて下さい。よろしくお願いします。

みんなの回答

回答No.4

 こんにちは。  直接WIN32APIサイドのメッセージボックスを呼び出せば、最前面スタイルを指定出来ます。  http://wisdom.sakura.ne.jp/system/winapi/win32/win5.html  以下では駄目でしょうか? 'プロトタイプ 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 'OKボタンを保有するフラグ Public Const MB_OK = &H0 '最前面フラグ Public Const MB_TOPMOST = &H40000 '呼び出し Public Sub TestTopMostMsgBox() Dim lpText As String Dim lpCaption As String lpText = "テスト" lpCaption = "最前面メッセージボックス" MessageBox 0, lpText, lpCaption, MB_OK Or MB_TOPMOST End Sub

pinattu007
質問者

お礼

APIは調べましたが、まさかこんな方法があるとは。 ありがとうございます! 正に、理想通りの実行結果が得られました。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.3

>VBだとAPI関数を使って、フォームを常に最前面表示はできました。 VBAでもこの方法しかありません。 他のアプリが最前面ではVBAの関知する所ではないので、エクセル上に表示する事しか出来ません。

  • OKwebb
  • ベストアンサー率44% (92/208)
回答No.2

システムモーダルで。 rt = msgbox("メッセージ", vbOKOnly + vbSystemModal)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

経験ないですけど。 Excelをアクティブにしてから表示したら、最前面には来ないでしょうかね? ⇒他のアプリの後ろとは、そのアプリがアクティブな状態なわけですよね?

pinattu007
質問者

お礼

>n-junさん 今回は、エクセルをアクティブにしてない状態でも、メッセージボックスを最前面に表示させないといけないのです。。 エクセルをアクティブにしたら最前面には来ます。 そうです。

関連するQ&A

専門家に質問してみよう