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)
-
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
Excel VBAで同じフォルダ内のファイルを開くには?
Excel(エクセル)
-
-
4
エクセルでエラーが出て困っています。
Excel(エクセル)
-
5
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
6
マクロ実行時、ユーザーフォームにラベルのテキストが表示されません。
Access(アクセス)
-
7
Excel VBA 自動的に閉じるMsgBox
Excel(エクセル)
-
8
フォントの大きさ
Visual Basic(VBA)
-
9
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
10
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
11
複数選択のListBoxでClickイベントが拾えません
Visual Basic(VBA)
-
12
エクセル VBA 「Sub Auto_Open()」 について
その他(Microsoft Office)
-
13
EXCEL2013 VBA ListBox 未選択
Excel(エクセル)
-
14
VBA メッセージボックスを自動で消したい
Visual Basic(VBA)
-
15
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
16
excelのInitializeイベントとActivateイベントについて
Excel(エクセル)
-
17
複数のシートの同じセルに入力するvbaを教えてください
Excel(エクセル)
-
18
ExcelVBAでPDFを閉じるソース
その他(Microsoft Office)
-
19
マクロを実行中に、msgbox を表示させたまま、ワークシートを上下左右に移動表示させたい。
Excel(エクセル)
-
20
Excel vbaで別ブックのコマンドボタンをクリック
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「最高気温が35度以上の日を猛...
-
AccessのDAO.ExecuteとDoCmd.Ru...
-
サーバーと実行端末が違う場合...
-
Excel-VBAの「しばらくお待ちく...
-
100万件レコードdelete
-
SQLサーバーのジョブでのexeフ...
-
ユーザー定義関数内でのsp_exec...
-
sqlcmdでクエリの実行結果をバ...
-
ORACLEでのexportのbatファイル...
-
バッチからメンテナンスプラン...
-
【Oracle】ADOでSELECT * FROM ...
-
再クエリとは
-
下記の問合せを行うクエリを、P...
-
IDENTITY列を持つテーブルへBCP...
-
Accessからストアドプロシジャ...
-
SQL-Loaderが動かないです。
-
MS Accessでクエリー実行時の確...
-
.SQLファイルをvbaで実行
-
ストアドプロシージャでcsvファ...
-
Access2010のマルチコアCPUへの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
AccessのDAO.ExecuteとDoCmd.Ru...
-
sqlcmdでクエリの実行結果をバ...
-
Excel-VBAの「しばらくお待ちく...
-
ストアドの速度がクエリの30...
-
ユーザー定義関数内でのsp_exec...
-
DTexec でSSISパッケージを実行...
-
【Oracle】ADOでSELECT * FROM ...
-
ストアドプロシージャでcsvファ...
-
サーバーと実行端末が違う場合...
-
SQLCMDにて教えていただきたい...
-
UPDATE時のSETの実行順について
-
Excelフィルタ抽出で「検索して...
-
xp_cmdshellについて
-
SQLServer2005のストプロでxp_c...
-
バッチからメンテナンスプラン...
-
SQLサーバーのジョブでのexeフ...
-
アクションクエリが実行できない
-
SQLServerのジョブからバッチを...
-
IDENTITY列を持つテーブルへBCP...
-
.SQLファイルをvbaで実行
おすすめ情報