• ベストアンサー

マクロ実行時、ユーザーフォームにラベルのテキストが表示されません。

エクセル2003VBAで、マクロ実行時にユーザーフォームを モードレス表示して、そのユーザーフォームにラベル「マクロ実行中です・・・」を貼り付けています。 しかし、処理が追いついていないのか、そのラベルが表示されません。 ユーザーフォームにはコードを記述していません。コードは以下のみです。 UserForm1.Show vbModeless テキストをTrueにしてからマクロ処理のようなコードがあるのでしょうか? お手数をおかけしますが、解決方法をご存知の方よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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独特のようです。

ddtqp
質問者

お礼

マクロを高速処理させるため、エクセルを非表示にしています。 それで、ユーザーフォームを表示させて、 マクロを実行中なのか第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

その他の回答 (2)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

ここが、参考になりませんか

参考URL:
http://officetanaka.net/excel/vba/tips/tips23.htm
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

ラベルのプロパティで Visible がTrueになっているでしょうか。

ddtqp
質問者

お礼

はい、Trueになっています。

関連するQ&A