
いつもお世話になります
プログラムの実行中に現在の処理状況をUserformで下記ように
Sleep関数を使ってUserに伝えていますが、時々メッセージを出したまま
止まってしまいます
原因が分からないので、もしご経験や問題点が有れば教えてください
また、他の良い方法をご教授頂ければ幸いです。
Private Sub UserForm_activate()
Dim i As Long
DoEvents
Me.Label1.Caption = Message1
Sleep MilliTimer
Unload Me
End Sub
変数MilliTimerは、As LongでPublicにて定義されています
また、Userformを呼び出す前にMilliTimer = 3000 と値をセットしています
以上、よろしくお願い申し上げます
No.1ベストアンサー
- 回答日時:
こんにちは
>時々メッセージを出したまま止まってしまいます
発生したりしなかったりということは、明確なコード上の問題ではなさそうですし、再現したときに調査しないと原因はわかりにくいだろうと思います。
一方で、Sleep関数ってWindowsAPIを利用しているってことですよね?
ご提示の使い方を見る限りでは、メッセージを読む時間だけ表示して消しているようなので、正確な時間計測は必要ないものと勝手に解釈しました。
もしそうであるなら、APIを介さずとも、Waitメソッドを利用してみてはいかがでしょうか?
https://learn.microsoft.com/ja-jp/office/vba/api …
指定方法が、「現在+待機時間」に変わりますけれど、WaitメソッドであればAPIのように他に制御を移すことをしないので(=VBAの範囲内で実行)、ご質問のようなことは起きにくいであろうと想像します。
(API利用でも、ご質問のような状況は見たことはありませんが・・)
以下は、ご質問には関係ありませんが・・
どのようなタイミングでご提示の処理が実行されるのか不明ですが、APIでもWaitでも、待機中はユーザーの操作を受け付けなかったと思います。
ユーザーが何らかの操作中に、いきなりメッセージを表示されて操作が中断してしまうのは、はた迷惑になりかねません。
もしも、操作を中断しないようにするのなら、フォームをモードレスにして、待機処理については自前で経過時間を待つループを記述することで可能になると思います。
早速ご回答に心から感謝します
複数のファイル処理から作表する場合
少しUserが待たされるので、処理状況を伝えるために
2,3秒出力させています
Userは実行中に操作することないですが、ご忠告と
ご提案、さっそくテストしてみます
本当にありがとうございました
これからもよろしくお願い申し上げます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) VBA シート上にドロップダウンリストを作り、予め指定値をセットしたいのですが 1 2023/03/25 15:15
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) VBA リボンののリカバリーでオーバーフローエラーになります 2 2023/07/04 19:07
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) ワークシート内を検索 1 2022/12/19 23:46
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Javaでのデバッグコード削除
-
tryの終了
-
JavaScriptからJAVAクラスを呼...
-
アコーディオンメニューをアン...
-
WPF C#でF10のイベント取得方法...
-
数値の定数を付ける時
-
Tomcat高負荷時の設定について
-
Javaプログラムからポップアッ...
-
ExcelVBA で文字列の特定の文字...
-
コンパイラとインタプリタとア...
-
[Java] while(true)の意味
-
java正規表現で複数行を取得し...
-
素数判定を再帰処理で
-
処理時間測定について質問があ...
-
wait()したスレッドが起こされ...
-
「UIスレッド」「マルチスレッ...
-
ラジオボタンの選択判定
-
データファイルの読み込みについて
-
JAVA ID重複処理
-
tomcat(struts)で起動時に処理...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
Tomcat高負荷時の設定について
-
Javaプログラムからポップアッ...
-
Javaでのデバッグコード削除
-
アコーディオンメニューをアン...
-
C#で別スレッドの終了を知りたい
-
onBlurとonFocusの処理順序につ...
-
Javaアプリケーション実行の返...
-
JavaScriptからJAVAクラスを呼...
-
表示待ち時間に「処理中...」の...
-
ExcelVBA で文字列の特定の文字...
-
C#の処理をリアルタイムに表示...
-
ラジオボタンの選択判定
-
Javaの再帰でメソッド呼び出す...
-
数値の定数を付ける時
-
[Java] while(true)の意味
-
Javaプログラムから外部コマン...
-
WaitForSingleObjectの復帰時間
-
Tomcatのスレッドを破棄する方法
-
重い処理中のアニメーションgif...
おすすめ情報