![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
いつもお世話になります。
ユーザーフォームの下にラベルを置いて、ステータスバー的に使っています。
ちょっと時間が掛かる処理があることが分かったので、その間は「処理中・・・」的なメッセージを出すことにしました。
現在は以下のようなプログラムにしています。
Option Explicit
Private Sub CommandButton1_Click()
setColor1'<==Break?
setcolor2
Dim i As Long
For i = 2 To 10000
Cells(i, 5).Value = "wanwan"
Next i
setcolor3
End Sub
Sub setColor1()
With UserForm1.Label1
.Caption = "you push the button..."
.ForeColor = RGB(0, 255, 0)
End With
End Sub
Sub setcolor2()
With UserForm1.Label1
.Caption = "wait for a while..."
.ForeColor = RGB(255, 0, 0)
End With
End Sub
Sub setcolor3()
With UserForm1.Label1
.Caption = "Finished"
.ForeColor = RGB(0, 0, 0)
End With
End Sub
これを実行しても、Forループの間はLabel1のCaptionはフォームデザイン時のデフォルト値Beforeになったままで、Forループが終わるとsetcolor3によってセットされるFinishedになります。
setcolor1、setcolor2が表示する途中経過は見えません。
しかし、上のリストの Break? と書いているところにブレークポイントを置いて、ブレークしたらF8を連打してsetcolor1、setcolor2を手動実行するとメッセージは狙い通りに変わります。
Forループの中でワークシートに何らかの操作を行っている場合にのみ起こる現象で、Forループの中でwait文を書いて10秒待つとかやると、メッセージは狙い通りに変わります。
ワークシートを処理しながら、メッセージを狙い通りに変える方法はあるでしょうか。
何かわかりましたらよろしくお願いします。
なお、ユーザーフォームの画像を添えます。
![「Q:Ecvel 2007 VBA: 長い」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/9/1223790_5497d7ba2dceb/M.jpg)
No.1ベストアンサー
- 回答日時:
Userformの再描画を強制的にさせないといけません。
で、プロシージャsetcolor2のEndSubの前に、DoEventsを入れてやる
'-----------------------------------
Sub setcolor2()
With UserForm1.Label1
.Caption = "wait for a while..."
.ForeColor = RGB(255, 0, 0)
End With
DoEvents '●これを挿入
End Sub
'---------------------------------------
それから、プロシージャのsetColor1はこのままでは意味がないと思いますが。。。
ありがとうございます!
上のサンプルコードも、その元になった長い業務用のコードも、DoEventsでバッチリでした。
>プロシージャのsetColor1はこのままでは意味がないと思いますが。。。
一瞬しか出ないから、という意味ですね。
そうなんです。
業務用のより長いコードを短くしてここに載せる過程で、メッセージが3回出ることが何か影響していたらと思って上のように書きました。
ありがとうございます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UWSCの終了の仕方
-
DoEventsが必要な理由について
-
For文を使った九九表の作成
-
ウィーンブリッジ発進回路
-
エクセルの当番表を作っていま...
-
一巡伝達関数と開ループ伝達関数
-
画面を強制的に再描画させる方法
-
繰り返し処理で50音順にする方法
-
範囲指定したセルを1つずつ飛...
-
DOSコマンドのループ内のTIMEコ...
-
乱数の桁数指定、または範囲指定。
-
VLC media Playerでのループ再生
-
なぜⅰなのか?
-
VBA for i=1 to lastrow
-
GIFアニメをループさせたくない
-
vbscriptでIE自動入力(途中で...
-
多重ループの抜けだし方
-
CreateJS(TweenJS)での連続した...
-
StatementとResultSetのclose()...
-
ループを回すという意味は何で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
VBAでの一時停止と再開の方法
-
UWSCの終了の仕方
-
DoEventsが必要な理由について
-
VBAで3秒だけ時間を止めたい
-
範囲指定したセルを1つずつ飛...
-
Escキーを押すと、中断する時と...
-
DOSコマンドのループ内のTIMEコ...
-
vbscriptでIE自動入力(途中で...
-
乱数の桁数指定、または範囲指定。
-
GIFアニメをループさせたくない
-
プログラミングについて。 1つ...
-
テキストボックスの名前に変数...
-
エクセルの当番表を作っていま...
-
vb.netからエクセル関数書き込み
-
ループフリー
-
CSVファイルの特定の行だけを読...
-
VBA for i=1 to lastrow
-
どなたかこのプログラミングを...
-
Do whileでExitせず、ループの...
おすすめ情報