web-dev-qa-db-ja.com

アプリケーションを一時停止せずにMsgBoxを使用する

ユーザーにメッセージを表示する必要があります。 MsgBoxを使用してこれを行うと、ユーザーがボックスをクリックするまでプログラムが停止します。プログラムを一時停止せずにMsgBoxを開く方法があるかどうか知りたいのですが。

14
Patrick Villela

MsgBoxからのユーザー入力を期待していないようです。この場合、アプリケーションによっては、StatusBarで十分な場合があります。

Excelではこれは簡単です。

Application.StatusBar = "Please be patient..."
Application.StatusBar = iDone & " of " & iTotal & " items done."

完了時にStatusBarをクリアするには:

Application.StatusBar = False

Accessでは、構文は少し複雑です。

Temp = SysCmd(acSysCmdSetStatus, "Hey, look at me!") ' Puts out your message
Temp = SysCmd(acSysCmdClearStatus) ' Clears StatusBar

私が発見したことがある限り、答えはあなたが見つけることができないということです。回避策は、ダイアログボックスとして機能するカスタムフォームです。

http://www.mvps.org/access/forms/frm0046.htm を参照してください(正確には質問ではありませんが、該当します)。

6
Smandoli

MsgBoxはモーダルです(ウィンドウが表示され、クリアされるまでコードの実行を停止します)。他のポスター/コメンターが述べたように-あなたの代わりはモーダルではないポップアップのあなた自身のバージョンを書くことです。あなたが本当にそれを必要としない限り、努力する価値はありません。

6
ktharsis

代わりにフォームを作成してください。 「Working、Please Wait」というテキストボックスのみを含む小さなフォームを作成しました。必要に応じて、フォームをポップアップ(docmd openform "フォーム名")として開きます。通常、完了するまでに時間がかかる操作を開始する直前です。作業が完了したら、フォームを閉じます(docmd close acform "form name")。これはプログラムを停止しませんが、ユーザーに「メッセージ」を提供します。

4
Sam

VBエディタで:[挿入]メニューの[ユーザーフォーム]を選択します。ツールボックスで[テキストボックス]を選択します:ユーザーフォームに四角形をドラッグしてテキストを入力します。ユーザーフォームを右クリックして[プロパティ]を選択します。ShowModalでプロパティ:Falseを選択します。VBAモジュールで、オンにする場所にUserForm1.Showを、オフにする場所にUserForm1.Hideを入力します。UserForm1は私のフォームです。もちろん、作成したフォームに適切な名前を使用します。

3
user4539187

私はまず、ポップアップを表示してコードを実行し続けるためにmsgboxが本当に必要かどうかを評価する必要があると思います。

Msgboxの機能(すでに説明したとおり)はモーダルであり、「バイパス」することはできません。ただし、(msgboxに似た)フォームを作成し、このフォームを「非モーダル」として設定し、このフォームを表示するコードを呼び出すことができます。コードのワークフローが続きます。テスト済みで、Excelで動作します。

更新:Accessで参照が失われました。今はテストできません。 Accessでも機能することを願っています。

RGDS

1
Tiago Cardoso

WScriptのPopupメソッドを使用できます。サンプルコードを含む完全な詳細は次のとおりです。 http://msdn.Microsoft.com/en-us/library/x83z1d9f%28v=vs.85%29.aspx

1
HK1