- 締切済み
エクセルのVBAでマクロ実行中メッセージを表示させたいのです
たとえばファイルを保存させている間、または、ちょっと時間がかかる(十秒程度ですが)作業を自動実行させている間、「少々お待ちください」のようなメッセージを表示し、終了すれば自動的にメッセージも終了するような表示方法はありますでしょうか?マクロの作業の進み具合(割合など)が表示されるともっといいのですが。 よろしくお願いします。 使用しているエクセルは97、OSはWindows95です。
- みんなの回答 (8)
- 専門家の回答
みんなの回答
- kazuhiko5681
- ベストアンサー率49% (79/159)
こんばんわ。別のマクロを考えて見ました。次のように操作してみて下さい。 ユーザーフォームを1個挿入しフォーム上にラベルを4個・コマンドボタンを1個配置する。 ラベル1(作業状態を表示するラベル。) オブジェクト名:Label1 Caption:ボタンを押して処理を開始して下さい。 ラベル2(プログレスバーの枠の部分となるラベル) オブジェクト名:Label2 Caption:空白 SpecialEffect:2 ラベル3(プログレスバーのバーの部分となるラベル) オブジェクト名:Label3 Caption:空白 Label2よりも少し小さめにつくり、Label2の上に重ねる。 ラベル4(進行状況を%で表示させるラベル) オブジェクト名:Label4 Caption:0% 標準モジュールを挿入し、下記のコードを記述する。 Sub Macro1 Userform.Show End Sub ユーザーフォム1のモジュールシートに下記のコードを記述する。 Private Sub CommandButton1_Click()またはPrivate Sub UserForm_Activate() Dim myStep As Single Dim i As Long, j As Long フォームを表示中に実行したいマクロを記述 With Me.Label3 myStep = .Width / 100 .Width = 0 .BackColor = &HFF0000 Me.Label1.Caption = "実行中です・・・" For i = 1 To 100 .Width = .Width + myStep Me.Label4.Caption = i & "%" DoEvents Next i Me.Label1.Caption = "処理が終了しました。" End With Unload Userform1 End Sub ご不明な点・不具合等がございましたらお気軽にお知らせ下さい。
- kazuhiko5681
- ベストアンサー率49% (79/159)
#4です。他のサンプルマクロを組んでみました。お試しになってみて下さい。 Private Sub CommandButton1_Click() Dim myStep As Single Dim i As Long, j As Long With Me.Label3 myStep = .Width / 100 .Width = 0 .BackColor = &HFF0000 Me.Label1.Caption = "実行中です・・・" Randomize For i = 1 To 100 For j = 1 To 10 With ActiveSheet.Cells(i, j) .Interior.ColorIndex = Int(56 * Rnd + 1) .Value = .Interior.ColorIndex End With Next j .Width = .Width + myStep Me.Label4.Caption = i & "%" DoEvents Next i Me.Label1.Caption = "処理が終了しました。" End With Unload Userform1 End Sub ユーザーフォームを1個挿入しフォーム上にラベルを4個・コマンドボタンを1個配置する。 ラベル1(作業状態を表示するラベル。) オブジェクト名:Label1 Caption:ボタンを押して処理を開始して下さい。 ラベル2(プログレスバーの枠の部分となるラベル) オブジェクト名:Label2 Caption:空白 SpecialEffect:2 ラベル3(プログレスバーのバーの部分となるラベル) オブジェクト名:Label3 Caption:空白 Label2よりも少し小さめにつくり、Label2の上に重ねる。 ラベル4(進行状況を%で表示させるラベル) オブジェクト名:Label4 Caption:0% コマンドボタンを押して動作させてみて下さい。 ユーザーフォームが貴方様の思い通りの動作をしていると思います。 ご不明な点・不具合等がございましたらご遠慮なくお知らせ下さい。
- imogasi
- ベストアンサー率27% (4737/17069)
#3のものです。ProgressBar1が認識されていないと言う事でしょうね。シート上のForm上にプログレスバーが貼りついているでしょうか。 (1)ツール-マクロ-VB (2)VBE画面で 挿入-ユーザーフォームでUserForm1が 出る。 ツールボクッスが同時に出たなら、プログレスバー があるか、確認し、あればフォーム上に貼り付け る。 フォーム上でダブルクリックし Private Sub UserForm_Click()を出し、End Sub の間に#3のコードの中身を貼り付ける。 後は実行。 何度もエクセル2000では、やって出来ましたが。 プログレスバーは基本的なコントロールで、97でも同じく使えると思ったのですが。(エクセル5.0-->97は変更点が多いようですが。)
お礼
有難うございました。今度はうまく行きました。 これでユーザーフォームをクリックするとプログレスバーが働くことはわかりましたが、他のマクロを実行させると、このユーザーフォームが出てきてフォームをクリックしなくともプログレスバーが機能するようにするのはどこにどう記述すればいいのでしょうか?
- kazuhiko5681
- ベストアンサー率49% (79/159)
#4です。マクロの記述ミスがありましたので、下記のマクロを参考にしてみて下さい。 ユーザーフォーム1のモジュールシートに Private Sub UserForm_Activate() Dim Tmr as Variant tmr = Timer Do While Timer < tmr + 1 'Tmr+1の1は秒数です。10にすれば10秒です。 DoEvents Loop Unload Me End Sub Sub/ユーザーフォームの実行ボタンをクリックするとマクロが走り、動作が確認できます。 ご不明な点・不具合等がありましたら、ご遠慮なくお知らせ下さい。
- kazuhiko5681
- ベストアンサー率49% (79/159)
初めまして。サンプルマクロを組んでみました。参考にしてみて下さい。 ユーザーフォーム1のモジュールシートに Private Sub UserForm_Activate() Dim Tmr as Variant Do While Timer < tmr + 1 '1は秒数です。10にすれば10秒です。 DoEvents Loop Unload Me End Sub ThisWorkbookのコードエディターに Sub Macro1() UserForm1.Show End Sub ご不明な点・不具合等がありましたら、ご遠慮なくお知らせ下さい。
お礼
有難うございます。 ただ、これではマクロ実行中の表示ではなく、指定した秒数の間だけの表示ではないでしょうか? 違ったらすみません。
- imogasi
- ベストアンサー率27% (4737/17069)
エクセル2000です。下記も出来ます。 VBAで、ユーザーフォームを貼り付け、 (1)ツールボックスの余白を右クリックし (2)「その他のコントロール」をクリック (3)MicrosoftProgressBarControl6.0(sp4)をクリック (4)OKをクリック (5)フォームのイベントプロシージュアのコードを Private Sub UserForm_Click() Dim i As Long Dim tmsv As Double ProgressBar1.Min = 0 ProgressBar1.Max = 100 For i = ProgressBar1.Min To ProgressBar1.Max ProgressBar1.Value = i Do Until Timer > tmsv DoEvents Loop tmsv = Timer Next End Sub(一部WEBより引用) フォームをクリックするとバーが動く。時間を適当に設定 し、次の処理に引き継ぐ。 上例はフォームのイベントにしましたが、テストをやってもらうためで、保存のコードの下に挟むことになるでしょう。
お礼
有難うございました。 「実行時エラー'424' オブジェクトが必要です。」となってしまいます。 デバックすると ProgressBar1.Min = 0 が黄色くなっていました。 どうすればいいのでしょうか?
- kazuhiko5681
- ベストアンサー率49% (79/159)
初めまして。ユーザーフォーム上にラベルを挿入して、作業処理進行状況とパーセントをフォーム上に表示させるという方法ではいかがでしょうか。 ご希望でしたら、サンプルマクロを作ってみたいと思いますのでお知らせ下さい。
お礼
有難うございます。よろしくお願いします。
- taknt
- ベストアンサー率19% (1556/7783)
ユーザFormを作成して、それを表示させ終わったら、閉じるでは どうでしょうか?
お礼
ユーザFormでもいいのですが、マクロ実行中のみ表示させるやり方がわからないのです。
お礼
有難うございます。 これはプログレスバーを既存のものではなく自分で作っているわけですね? やってみました。セルにランダムに色と番号をつけるマクロを実行中、プログレスバーが作動し、%まで表示されました。マクロが終了すれば消えました。 ただユーザーフォームのコマンドボタンでマクロが動きましたが、そうではなくて別のマクロを実行すると、このユーザーフォームがあらわれ、ユーザーフォームのコマンドボタンを押さなくとも作動するようにしたいのです。勝手を言いますがよろしくお願いします。