| 
    
     |  | ▼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の設定で表示/非表示にしては
 いかがでしょうか?
 
 |  |