• 締切済み

エクセルのVBAでマクロ実行中メッセージを表示させたいのです

たとえばファイルを保存させている間、または、ちょっと時間がかかる(十秒程度ですが)作業を自動実行させている間、「少々お待ちください」のようなメッセージを表示し、終了すれば自動的にメッセージも終了するような表示方法はありますでしょうか?マクロの作業の進み具合(割合など)が表示されるともっといいのですが。 よろしくお願いします。 使用しているエクセルは97、OSはWindows95です。

みんなの回答

回答No.8

こんばんわ。別のマクロを考えて見ました。次のように操作してみて下さい。 ユーザーフォームを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 ご不明な点・不具合等がございましたらお気軽にお知らせ下さい。

回答No.7

#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% コマンドボタンを押して動作させてみて下さい。 ユーザーフォームが貴方様の思い通りの動作をしていると思います。 ご不明な点・不具合等がございましたらご遠慮なくお知らせ下さい。

shishishishi
質問者

お礼

有難うございます。 これはプログレスバーを既存のものではなく自分で作っているわけですね? やってみました。セルにランダムに色と番号をつけるマクロを実行中、プログレスバーが作動し、%まで表示されました。マクロが終了すれば消えました。 ただユーザーフォームのコマンドボタンでマクロが動きましたが、そうではなくて別のマクロを実行すると、このユーザーフォームがあらわれ、ユーザーフォームのコマンドボタンを押さなくとも作動するようにしたいのです。勝手を言いますがよろしくお願いします。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

#3のものです。ProgressBar1が認識されていないと言う事でしょうね。シート上のForm上にプログレスバーが貼りついているでしょうか。 (1)ツール-マクロ-VB (2)VBE画面で    挿入-ユーザーフォームでUserForm1が    出る。    ツールボクッスが同時に出たなら、プログレスバー   があるか、確認し、あればフォーム上に貼り付け    る。    フォーム上でダブルクリックし    Private Sub UserForm_Click()を出し、End Sub    の間に#3のコードの中身を貼り付ける。     後は実行。 何度もエクセル2000では、やって出来ましたが。 プログレスバーは基本的なコントロールで、97でも同じく使えると思ったのですが。(エクセル5.0-->97は変更点が多いようですが。)

shishishishi
質問者

お礼

有難うございました。今度はうまく行きました。 これでユーザーフォームをクリックするとプログレスバーが働くことはわかりましたが、他のマクロを実行させると、このユーザーフォームが出てきてフォームをクリックしなくともプログレスバーが機能するようにするのはどこにどう記述すればいいのでしょうか?

回答No.5

#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/ユーザーフォームの実行ボタンをクリックするとマクロが走り、動作が確認できます。 ご不明な点・不具合等がありましたら、ご遠慮なくお知らせ下さい。

回答No.4

初めまして。サンプルマクロを組んでみました。参考にしてみて下さい。 ユーザーフォーム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 ご不明な点・不具合等がありましたら、ご遠慮なくお知らせ下さい。

shishishishi
質問者

お礼

有難うございます。 ただ、これではマクロ実行中の表示ではなく、指定した秒数の間だけの表示ではないでしょうか? 違ったらすみません。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

エクセル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より引用) フォームをクリックするとバーが動く。時間を適当に設定 し、次の処理に引き継ぐ。 上例はフォームのイベントにしましたが、テストをやってもらうためで、保存のコードの下に挟むことになるでしょう。

shishishishi
質問者

お礼

有難うございました。 「実行時エラー'424' オブジェクトが必要です。」となってしまいます。 デバックすると ProgressBar1.Min = 0 が黄色くなっていました。 どうすればいいのでしょうか?

回答No.2

初めまして。ユーザーフォーム上にラベルを挿入して、作業処理進行状況とパーセントをフォーム上に表示させるという方法ではいかがでしょうか。 ご希望でしたら、サンプルマクロを作ってみたいと思いますのでお知らせ下さい。

shishishishi
質問者

お礼

有難うございます。よろしくお願いします。

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

ユーザFormを作成して、それを表示させ終わったら、閉じるでは どうでしょうか?

shishishishi
質問者

お礼

ユーザFormでもいいのですが、マクロ実行中のみ表示させるやり方がわからないのです。

関連するQ&A

  • エクセルのVBAマクロでのメッセージ表示

    エクセルのVBAマクロでのメッセージ表示 エクセルでマクロを作り動かしているのですが、動作時間が長く(約90秒)その間、砂時計のままです。そこで動作中に”只今処理中”のような内容のメッセージを表示させる方法を教えて下さい。できればマクロの中に記述する方法があればベストですが。 動作環境は、WINDOWS XP、EXECL2002です。

  • エクセル2007で、「マクロ」形式保存かつ「暗号化」状態で、マクロが実行できない

    エクセル2007を最近導入しました エクセル2003で作成したファイルを、2007形式に順次変換して、保存・使用しています そんなファイルの中に、「読み取りパスワード」をかけていて、 かつ、簡単なマクロ(自動記録機能を元に作成)を含むファイルがあります マクロの保存先は「作業中のブック」です このような種類のファイル(パスワード保護+マクロ実行)を2007に変換・保存しようとすると 「マクロ有効ブック形式」(*.xlsm)で保存するようにメッセージが出ます メッセージにしたがい、保存・終了し、改めて開こうとすると 「マクロを実行するためには…暗号化を解除する」ようにメッセージが表示されます (なお、ファイルにアクセス制限は設定していません) つまり、2007では、「パスワード保護+マクロ実行」というのは、混在できないようなのです 私の操作方法の誤りでしょうか? それとも、このような仕様になっていて、何か、回避する方法があるのでしょうか? 教えてください。お願いします。

  • EXCEL VBAマクロの実行優先度を下げたい

    いつもお世話になっております。 EXCEL VBAであるマクロを実行させています。 このマクロは終了するのに丸1日以上掛かるもので、それを実行している間、EXCEL.EXEのCPU使用率が100%になってしまいます。 私の所有するPCパワーが乏しい&所有PCが1台だけのため、このマクロを実行している間、EXCEL以外の他の作業の動作がとても遅くて困っています。 例えば、テキストエディタで文字を打って変換するのに数秒かかったりします。 タスクマネージャでEXCEL.EXEのプロセス優先度を下げることができるのは知っていますが、以前別のマクロでそれを実行して他の作業をやっていた時にEXCELが強制終了された経験があり、私のPCではタスクマネージャによるプロセス優先度の変更はシステムが不安定になることに繋がるようです。 ですので、できることなら、実行中のVBAマクロのみ優先度を下げたいんですが、そのようなことは可能なのでしょうか。 よろしくお願いいたします。

  • マクロ実行中のメッセージ表示

    お世話になります。 Excel2000マクロ実行中に、「処理中です」等のメッセージを表示したいのです。メッセージのUserFormを作成しましたが、マクロ実行中は、Caption(Formのタイトル部分)以外は、Formが白く表示されるだけです。ステップインで確認する時は正常に表示されます。 コードは、標準モジュールに UserForm1.Show (0) としました。 よろしくお願いいたします。 ※UserFormを使用する以外にも、メッセージを表示する方法があれば、それでも結構です。

  • エクセル マクロで自動実行と終了について

    エクセルで作ったマクロを自動実行・自動保存・自動終了したいので、下記のような 記述のマクロをつくり、Windowsのタスク処理で1回/日実行させようとしています。 ----<ここから>------------------------------------ Sub Auto_Open()    :   :   Workbooks("ekuseru.xls").Close SaveChanges:=True End Sub ----<ここまで>------------------------------------ 質問その1  マクロを編集したい場合はどうすればいいのでしょう?  そのBookを開くとマクロが動き出し、保存した上で終了してしまいます。  マクロ無効でBookを開くと「ツール」⇒「マクロ」⇒「マクロ」で「編集」はクリッ  クできないようになってます。 質問その2  マクロが終了するとき、Bookは閉じますがエクセル自体は閉じません。  (意味通じますか?)  エクセル自体を閉じるにはマクロの記述はどうすればいいのでしょう? 以上、よろしくお願いします。

  • Excelのマクロについて

    Excelのマクロについて excel2003で,マクロの自動記録を勉強中です。 [ツール]-[マクロ]-[新しいマクロの記録]でマクロ名を入力し,(マクロの保存先を「作業中のブック」として,)[OK]をクリックすると マクロの記録が始まります。 マクロの記録終了後, [ツール]-[マクロ]-[マクロ]で「マクロ」ダイアログボックスを見ると,マクロ名が表示されます。 この場合は実行も正常にできます。 しかし, ブックを一旦保存した後,開いて,マクロを実行しようと, [ツール]-[マクロ]-[マクロ]で「マクロ」ダイアログボックスを見ると,マクロ名が(マクロ名単独ではなく)ブック名とともに表示されます。 実行するとエラーになります。 何が悪いのか分かりません。なにか基本的なミスがあるのかも知れないと考えました。 原因(ミス)に心当たりのあるかた,是非教えてください。

  • マクロ実行後エクセルを閉じたい

    2つの別々のファイルを開いて片方からもう片方にコピーして 保存して終了する。(両方とも閉じる) というマクロを作ったのですが コピー終了後に実行したマクロ付きのエクセルも閉じてデスクトップ上には何も開いていない状態にしたいのですがworkbookのところに 下記の命令を記述してもうまくいきません。 Application.Run "XXXXXX" ThisWorkbook.Save ThisWorkbook.Saved = True If Workbooks.Count <= 1 Then Application.Quit ThisWorkbook.Close False マクロ付きのエクセルも一旦は閉じるのですがその後に 別の白紙のブックが開いてしまうのです。 続けて他のマクロをスケジュールで実行したいのですが実行時に 「既にエクセルが開いています」みたいな警告が表示され 実行できません。 エクセルを完全に閉じるようにするにはどうしたらいいのでしょうか?

  • EXCELマクロ実行中に

    EXCELのマクロを実行中にのみ「処理中…」などの表示を出させ、処理終了後に表示を消すということは可能でしょうか? ちなみにEXCELは2000です。

  • エクセル2000でのマクロ実行後の『再計算』の表示が出てしまう

    Win95+エクセル2000です。 表題の通り エクセル2000でのマクロ実行後ステータスバーに 『コマンド   再計算』の表示が出てします。 Ctlr+Alt+F9で再計算を実行させると 『再計算 28%』と一瞬出て終わります。 マクロが完了していないのかと思うのですが どこで不具合が起きているのか、 どこが原因で再計算の表示が出るのか 簡単に調べる方法はないのでしょうか? 何かご存知の方アドバイスお願いします。

  • エクセルのマクロからアクセスのマクロ実行命令を出せますか?

    教えてください。 一連の作業をアクセスのマクロとエクセルのマクロを使って作業を完成させました。 まず最初にエクセルのブックを起動し、マクロを実行し作業をさせ、その後にアクセスを起動させ、マクロを実行し、作業ファイルをエキスポートさせ、またエクセルに戻り、エクセルマクロを実行させて作業を関せさせたいと思います。 そこで、エクセルのマクロでアクセスを起動させ、アクセスのマクロを実行させるようなことはできるのでしょうか? よろしくお願いします。

専門家に質問してみよう