プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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

ご不明な点・不具合等がございましたらお気軽にお知らせ下さい。
    • good
    • 0

#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%

コマンドボタンを押して動作させてみて下さい。
ユーザーフォームが貴方様の思い通りの動作をしていると思います。

ご不明な点・不具合等がございましたらご遠慮なくお知らせ下さい。
    • good
    • 0
この回答へのお礼

有難うございます。
これはプログレスバーを既存のものではなく自分で作っているわけですね?
やってみました。セルにランダムに色と番号をつけるマクロを実行中、プログレスバーが作動し、%まで表示されました。マクロが終了すれば消えました。

ただユーザーフォームのコマンドボタンでマクロが動きましたが、そうではなくて別のマクロを実行すると、このユーザーフォームがあらわれ、ユーザーフォームのコマンドボタンを押さなくとも作動するようにしたいのです。勝手を言いますがよろしくお願いします。

お礼日時:2002/11/16 16:49

#3のものです。

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

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

お礼日時:2002/11/16 15:58

#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/ユーザーフォームの実行ボタンをクリックするとマクロが走り、動作が確認できます。

ご不明な点・不具合等がありましたら、ご遠慮なくお知らせ下さい。
    • good
    • 0

初めまして。

サンプルマクロを組んでみました。参考にしてみて下さい。

ユーザーフォーム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

ご不明な点・不具合等がありましたら、ご遠慮なくお知らせ下さい。
    • good
    • 2
この回答へのお礼

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

お礼日時:2002/11/16 12:28

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

有難うございました。
「実行時エラー'424'
オブジェクトが必要です。」となってしまいます。

デバックすると
ProgressBar1.Min = 0
が黄色くなっていました。
どうすればいいのでしょうか?

お礼日時:2002/11/16 12:26

初めまして。

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

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

お礼日時:2002/11/16 12:31

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2002/11/16 12:30

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