エクセルVBAにて、指定時刻になったらメッセージボックスを、最前面に表示させるプログラムを作成中です。
時刻の指定は、ontimeメソッドの使用でできました。

しかし、最前面(他のアプリケーションを開いていても、メッセージボックスが手前に表示される)がどうしてもできません。。

VBだとAPI関数を使って、フォームを常に最前面表示はできました。

メッセージボックスで、このような表示方法は実現可能なのでしょうか?
どなたか教えて下さい。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

経験ないですけど。



Excelをアクティブにしてから表示したら、最前面には来ないでしょうかね?
⇒他のアプリの後ろとは、そのアプリがアクティブな状態なわけですよね?
    • good
    • 0
この回答へのお礼

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

エクセルをアクティブにしたら最前面には来ます。
そうです。

お礼日時:2009/04/13 21:40

システムモーダルで。


rt = msgbox("メッセージ", vbOKOnly + vbSystemModal)
    • good
    • 3

>VBだとAPI関数を使って、フォームを常に最前面表示はできました。



VBAでもこの方法しかありません。
他のアプリが最前面ではVBAの関知する所ではないので、エクセル上に表示する事しか出来ません。
    • good
    • 0

 こんにちは。



 直接WIN32APIサイドのメッセージボックスを呼び出せば、最前面スタイルを指定出来ます。
 http://wisdom.sakura.ne.jp/system/winapi/win32/w …

 以下では駄目でしょうか?

'プロトタイプ
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
    • good
    • 3
この回答へのお礼

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

お礼日時:2009/04/14 22:11

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q添付した画像のようなウィンドウを常に最前面に表示させたいです。

添付した画像のようなウィンドウを常に最前面に表示させたいです。
左には説明動画、右にはボタンでウィンドウ操作(前面表示の切替え、終了など)が
できるものを作りたいです。

そこで質問です。
上に書いたようなことが実現できるプログラムを教えてください。

私は、プログラミングの知識・経験がほとんどはありません。
自分でもどのようなものがあるかは、調べたのですが、絞りきれず質問します。
よろしくお願いいたします。

Aベストアンサー

未経験者がこのサイトで一度質問するだけで
そのようなソフトウェアが作れるようになることはありえません。
もっと参考書や解説サイトに載っているようなもっと簡単な題材から
取り組み始める方がよほど近道です。

QVBSで指定した時刻にメッセージを出力したい。

タイトル通りの処理を行いたいのですが、訳あってタスクスケジューラと
フリーソフト等は使用したくないので、VBSでどうにかしたいと思っています。
ちなみにOSはWindows98なのでATコマンドは使えません。

Aベストアンサー

WSH VBScriptでしたら例えば下記のような感じでしょうか。おすすめはフリーソフトを使うことですけれども。
Windows XP SP2で確認しましたがWindows98でも動くと思います。
-----
Option Explicit
Dim WshShell, Alerm
Set WshShell = WScript.CreateObject("WScript.Shell")
Alerm = "5:00" '★ 時刻の指定
While CDate(Alerm)>Time
'WshShell.Popup "ただいま " & Time & " です。",3 '3秒表示
WScript.Sleep 10*1000 '10秒待つ
Wend
WshShell.Popup Alerm & " を過ぎました。",,"時間ですよ",48
-----

Qdelphi6でフォームを常に最前面にするには

delphi6を始めたばかりです
カレンダーを作りました。
そのフォームを、他のアプリケーションがアクティブな場合でも常に最前面にするにはどうすればいいでしょうか。
よろしくお願いします。

Aベストアンサー

Formのプロパティ「FormStyle」を「fsStayOnTop」にしてください。

Qメッセージボックスの表示

下記、T_商品マスタテーブルにID・商品名共にまったくの
新規(例)ID=6,商品名=自動車が追加された時に、
メッセージボックスで「新規商品が登録されました。」と表示し、
ID=1,商品名=TV(○×社製)が追加された時には、
「IDが重複しています。確認してください。」と表示させるには、
どうしたら良いですか?


T_商品マスタ
 ID 商品名
 1  TV
 2  ラジオ
 3  携帯電話
 4  洗濯機
 5  冷蔵庫

Aベストアンサー

書き方はプログラム言語によります。
フローチャートとしては以下になります。

1.新規追加IDと、既存のIDの全てを比較します。
2.重複したIDが無ければ、メッセージボックスで「新規商品が登録されました。」と表示します。
3.重複したIDがあれば「IDが重複しています。確認してください。」と表示します。

Qメッセージボックスの表示

エクセル2000のVBAでメッセージボックスを表示させたいのですが、OKボタンを押して閉じるのではなく、VBAの記述でメッセージをオープン、クローズがしたいのですが、方法がわかりません。

何がしたいかというと、
FOR~NEXTなどの処理で今何件処理しているかをリアルタイムで表示させたいのです。

どなたか知っている方がいれば教えてください。

Aベストアンサー

フォームを使えばいいのかな、と思います。
Visual Basic Editor のメニューから「挿入」→「ユーザーフォーム」でフォームを追加して、VBA の方は

Dim i As Integer

UserForm1.Show vbModeless

For i = 0 To 100
  UserForm1.ProgressBar1.Value = i
  UserForm1.Label1.Caption = i & "件処理しました。"
Next i

UserForm1.Hide

のような感じで。

私の PC では、コントロールツールボックスの「ツールの選択(かなづちのアイコン)」で「 Microsoft ProgressBar Control 」というのがあったので、これを使って書いてありますが、Office 2000 に入ってたのか Access 2000 に入っていたのか、あるいは他のものに入っていたのかよくわからないので、質問者さんの PC でも使えるかどうかはよくわかりません。

フォームを使えばいいのかな、と思います。
Visual Basic Editor のメニューから「挿入」→「ユーザーフォーム」でフォームを追加して、VBA の方は

Dim i As Integer

UserForm1.Show vbModeless

For i = 0 To 100
  UserForm1.ProgressBar1.Value = i
  UserForm1.Label1.Caption = i & "件処理しました。"
Next i

UserForm1.Hide

のような感じで。

私の PC では、コントロールツールボックスの「ツールの選択(かなづちのアイコン)」で「 Microsoft ProgressBar Control 」と...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報