|
▼sa さん、IROCさん
こんばんは。
>こんにちは。
>今、エクセル上で複数のファイルの内容を集計する
>マクロを作っているのですが、
>処理を実行する際に、プログレスバーを使用して
>処理状況を表示させたいと考えています。
>
>いろいろ調べたのですが、
>ユーザーフォームを使用するのではなく、
>シート状に直接プログレスバーを埋め込む(?)処理を
>行う方法がわからず困っています。
シートに動的にプログレスバーを配置すると言う事ですか?
配置する事は、「コントロールツールボックス」の「コントロールの選択」という
アイコンをクリックし、その中から「Microsoft ProgressBar Control・・」を
選択して、シートに配置する操作をマクロの記録を行えば、コードは生成されます。
マクロの記録を使えば(加工はしましたが)、
'==================================================
Sub add_progressbar()
Dim rng As Range
Dim prog As OLEObject
Set rng = ActiveCell
With ActiveSheet
Set prog = .OLEObjects.Add(ClassType:="MSComctlLib.ProgCtrl.2", _
Left:=rng.Left, Top:=rng.Top, _
Width:=rng.Width, Height:=rng.Height)
prog.Object.Value = 50
End With
End Sub
なんていうコードで配置する事が出来ます(例は、アクティブセルに合わせて
プログレスバーを配置しました)。
が・・・・、
私も以前、ここで勉強させてもらったのですが、「コントロールツールボックス」の
オブジェクトを動的に配置するのは、いくつかの問題があるようです。
(モジュールレベルの変数が初期化されてしまう)
確認はしていませんが、他にもあるかもしれません。
よって、VBAによる動的な配置は避けた方がよいかもしれませんよ。
予め上記の方法でプログレスバーをシートに配置しておいて、
必要に応じて、
VisibleプロパティのTrue/Falseの設定で表示/非表示にしては
いかがでしょうか?
|
|