- ベストアンサー
マクロ実行時、ユーザーフォームにラベルのテキストが表示されません。
エクセル2003VBAで、マクロ実行時にユーザーフォームを モードレス表示して、そのユーザーフォームにラベル「マクロ実行中です・・・」を貼り付けています。 しかし、処理が追いついていないのか、そのラベルが表示されません。 ユーザーフォームにはコードを記述していません。コードは以下のみです。 UserForm1.Show vbModeless テキストをTrueにしてからマクロ処理のようなコードがあるのでしょうか? お手数をおかけしますが、解決方法をご存知の方よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >モードレス表示して、そのユーザーフォームにラベル「マクロ実行中です・・・」を貼り付けています。 ラベルをどう処理しているのか、まったく書いていないわけで、さっはり意味が分かりません。 UserForm が立ち上がっている状態では、「マクロ実行中」とは言えるかもしれませんが、表示する意味はないはずです。 Private Sub UserForm_Initialize() Label1.Caption = "マクロ実行中です....." End Sub 必要ないと思います。 たとえば、ループした場合は以下のようにします。 Private Sub CommandButton1_Click() Dim i As Long Label1.Caption = "マクロ実行中です....." DoEvents 'これを入れないと表示しない。 Do: i = i + 1: Loop Until i > 10 ^ 7 Label1.Caption = "終了" End Sub 3~4秒で終了するはずですが、一旦、何かVBAをあらかじめ動かして、オブジェクトが活性化しないと、それ以上に時間が掛かる可能性があります。 なお、この仕様は、Office VBA独特のようです。
お礼
マクロを高速処理させるため、エクセルを非表示にしています。 それで、ユーザーフォームを表示させて、 マクロを実行中なのか第3者が見てわかるようにしようとしていたので必要なのです。 以下のコードで出来ました。ありがとうございます。 やはりおっしゃるとおり、「DoEvents」を入れないと、 「マクロ実行中です.....」の表示がされませんでした。 ついでにユーザーフォームに、プログレスバーをつくりました。 以下のコードです。 ユーザーフォーム2に、フォーム1を貼り、その内側にラベル1を貼り青色表示させてます。 フォーム1とラベル1のプロパティcaptionは空にしています。 'プログレスバーの設定--------------------------- Dim BarWidth As Single UserForm2.Show vbModeless With UserForm2 .Caption = "処理状況" .Label1.Caption = "マクロ実行中です....." 'バー用ラベルの初期設定 With .Label2 .Top = 1 'フレームより1ピクセルずつ内側 .Left = 1 .Width = 0 .BackColor = &H800000 'バー色を青 End With BarWidth = .Frame1.Width - 6 End With For i = 1 To intTurn 'マクロ実行中の表示-------------------------------- DoEvents UserForm2.Label2.Width = BarWidth * i / intTurn //処理// Next i