【初月無料キャンペーン中】gooドクター

エクセル2003VBAで、マクロ実行時にユーザーフォームを
モードレス表示して、そのユーザーフォームにラベル「マクロ実行中です・・・」を貼り付けています。
しかし、処理が追いついていないのか、そのラベルが表示されません。
ユーザーフォームにはコードを記述していません。コードは以下のみです。
UserForm1.Show vbModeless

テキストをTrueにしてからマクロ処理のようなコードがあるのでしょうか?
お手数をおかけしますが、解決方法をご存知の方よろしくお願いいたします。

gooドクター

A 回答 (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独特のようです。
    • good
    • 1
この回答へのお礼

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

お礼日時:2009/10/14 09:40

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



参考URL:http://officetanaka.net/excel/vba/tips/tips23.htm
    • good
    • 0

ラベルのプロパティで


Visible
がTrueになっているでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/09/29 09:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング