進捗状況プログレスバーのマクロを応用するには?

Question 49.10 Previous Next
詳細は こちら 500連発・第2弾マクロ番号 183と184の進捗表示について質問します。
... Application.FileSearch のような、検索時に表示させたいと思うのですが、 For...Next の間にネストしても巧く動きません。
どのように実際のマクロに応用するのでしょうか。Excel 2000を使用しています。
Answer   Copyright (C) 2001.11.13 永井善王
183番は「進捗状況をプログレスバ-で表示する(ラベル)」、
184番は「進捗状況をプログレスバ-で表示する(テキストボックス)」と題するマクロで、井領邦弘氏の作品ですが、500連発・第2弾の監修担当の私宛に質問されましたので、とりあえずお答えします。
より以上の回答が必要でしたら直接、
作者にご照会 願います。

ユーザーフォーム この 2つのマクロは、ユーザーフォームに進捗状況を表示するためのプログレスバーを作成するサンプルです。
主な相違は、183番はラベルコントロールを利用(右図)、184番はテキストボックスを利用していることで、これによりプログレスバーの外観が異なり、マクロコードも少し変ります。
逆に共通点としては、For...Next でループ処理を実行中、次の繰り返しに移るタイミングを捉えてバーを伸ばしていることです。
回答に入ります。2つともマクロの中に、次のようなコードがあります。
For i = 1 To cend
    (省略:バーを伸ばす処理)
     ----------------------------------------------------
      For j = 1 To 10000
        'デバッグ用タイミング(実際はここに実行マクロを入れる)
      Next
     '-----------------------------------------------------
     DoEvents
Next
あなたが希望される Application.FileSearch を入れるとすれば、上記ライン間の 3行を書き換えることになるでしょう。FileSearchプロパティ は指定されたフォルダー等から指定されたファイルを検索してくれますが、フォルダーの代わりにドライブを指定すると相当、時間がかかる場合があります。 そのため、進捗状況を表示することによってイライラ感を和らげたいと思われたのでしょうが、ちょっとした無理があるかも知れません。

その理由は作者もコメントしているとおり、これらのマクロが For...Next の変数 i の値で %を算出してバーを伸ばす手法を採用しているため、 1回の FileSearch に長時間かかったとしても、反復回数としてはあくまで 1回ですから、バーが伸びないことになります。 ただし、For...Next するたびに検索するフォルダー等を変えて FileSearch するならば、活用できるかも知れません。
後日情報
500連発第2弾は完売になりました。 が、その後に発売された下記の本にも、同様のマクロが掲載されています。
 ・ Excel VBA そのまま使える実用マクロ500連発 の343番
 ・
Excel VBA 実用マクロ 800連発 [中・上級編] の658番、659番、660番

 

Excel VBA Macro