
Excel-VBAで、指定秒数待つと自動的に閉じるダイアログを作成しています。普段は一定時間経つとちゃんと閉じるのですが、何度か実行していると、たまにいくら時間が経っても閉じない状態になってしまします。何が悪いのでしょうか。以下ソースです。何か手掛かりになることわかりましたらお教えください。よろしくお願い申し上げます。
----------
Sub test()
msgBox2("しばらくお待ちください", 5)
End Sub
Sub msgBox2(msg As String, sec As Long)
Dim WSH As Object
Set WSH = CreateObject("WScript.Shell")
WSH.Popup msg, sec, , vbInformation
Set WSH = Nothing
End Sub
No.2ベストアンサー
- 回答日時:
残念ながら、以下のURLでも説明されているとおり、WSHのPOPUPメソッドは不安定だというのが結論のようです。
↓https://hirachin.com/post-7426/・・・①
https://atsumitm.iobb.net/its/its-022.php・・・②
https://takeichi.work/messeagebox-autoclose-time …・・・③
つまり、解決策は「WSHのPOPUPメソッドを使わない」ということになります。
No.1さんの回答にあるユーザーフォームを使うのも一つの方法だと思います。
上記②のURLに複数の対応方法が照会されていますので、参考にしてください。
ただ、「MsgboxやWSH.Popupと似たデザインで」にこだわるなら、③で紹介されているWindows APIのMessageBoxTimeoutA関数を使うしかないと思います。
No.1
- 回答日時:
こんばんは
すみませんが、直接の回答ではありません。
ご提示のコードだとスクリプト(WSH)に処理を渡しているので、その後はVBAからは感知できません。
また、ご質問文からは再現性のない事象のように見受けられますので、究明へのヒントが無い状態と言えます。
原因を特定するにしても、相当に面倒であろうと想像されます。
(特定できるのかも、現状ではわかりませんが・・)
処理の全体像が不明ですが、「ダイアログを一定時間後に閉じる」ことが実現できれば良いのであれば、ユーザーフォームで同じようなものを作成しておいて、VBAの制御範囲内で表示/消去を行う方法に変えることで、仮に似た様な事象が発生したとしても(多分発生しないと思いますが)対処がしやすくなるのではと思います。
具体的には、フォームをモードレスで表示しておいて 、OnTimeメソッドで指定時間後に消す(=UnLoad)という方法です。
既定のボタンやアイコンが用意されてはいませんので、自分でフォームとレイアウトを事前に用意しておく必要がありますけれど・・・
(フォームの方が、自由にレイアウトが可能という利点はあります)
もしも、5秒後というのが概ねの時間で、何らかの準備処理等が終わるまでの時間を想定しているのであるのなら、上記の方法であれば、処理終了時にダイアログ(=フォーム)を消すことも可能になります。
ユーザが「×」ボタンで早く消すことは可能ですが、その点に関しては、ご提示の方法でも同様と思いますので。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) 数式が消える 1 2023/03/19 16:55
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
このQ&Aを見た人はこんなQ&Aも見ています
-
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
Excel VBA 自動的に閉じるMsgBox
Excel(エクセル)
-
6
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
7
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
8
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
9
マクロを実行中に、msgbox を表示させたまま、ワークシートを上下左右に移動表示させたい。
Excel(エクセル)
-
10
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
11
VBA メッセージボックスを自動で消したい
Visual Basic(VBA)
-
12
VBAにて別ワークブック上の実行したマクロのメッセージボックスを操作
Visual Basic(VBA)
-
13
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
14
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
15
マクロ実行時、ユーザーフォームにラベルのテキストが表示されません。
Access(アクセス)
-
16
エクセルのVBAでユーザーフォームを4秒ぐらいで閉じるようにするには
Access(アクセス)
-
17
ExcelVBAで今開いているユーザ情報を取得できますか?
Visual Basic(VBA)
-
18
vba クリップボードクリアについて教えてください
その他(プログラミング・Web制作)
-
19
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
20
VBAにてメッセージボックスを最前面に表示させる
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel-VBAの「しばらくお待ちく...
-
AccessのDAO.ExecuteとDoCmd.Ru...
-
SQLServer(MSDE) JOBの状態取得...
-
ユーザー定義関数内でのsp_exec...
-
XPにPostgreSQLをイ...
-
OracleのPL/SQLの操作方法
-
サーバーと実行端末が違う場合...
-
SQLサーバーのジョブでのexeフ...
-
データベース SQL のセッショ...
-
バッチからメンテナンスプラン...
-
JDBCのエラー
-
SQLの実行時間を測定するには?
-
sqlcmdでクエリの実行結果をバ...
-
SQL SERVER2005の不具合情報
-
バッチでのSQL実行結果の分岐処...
-
ストアドの速度がクエリの30...
-
DTexec でSSISパッケージを実行...
-
create temporary tableについて
-
SQLのエラー(~付近に不適切な...
-
Access2010 accdbのエラー「ODB...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel-VBAの「しばらくお待ちく...
-
ユーザー定義関数内でのsp_exec...
-
AccessのDAO.ExecuteとDoCmd.Ru...
-
SQLサーバーのジョブでのexeフ...
-
ストアドの速度がクエリの30...
-
SQLCMDにて教えていただきたい...
-
SQLServer2005のストプロでxp_c...
-
SQL-Loaderが動かないです。
-
Excelフィルタ抽出で「検索して...
-
【Oracle】ADOでSELECT * FROM ...
-
sqlcmdでクエリの実行結果をバ...
-
バッチからSQLCMDを実行する方法
-
SQLServerのジョブからバッチを...
-
サーバーと実行端末が違う場合...
-
Accessからストアドプロシジャ...
-
オラクルインストールユーザ以...
-
バッチでのSQL実行結果の分岐処...
-
IDENTITY列を持つテーブルへBCP...
-
100万件レコードdelete
-
同じSQL文で速度がだいぶ違う
おすすめ情報