- ベストアンサー
Word VBA。各マクロの間に待ち時間を指定するには?
初心者です。 記録したVBAをつなぎ合わせて、一連の処理を自動化したいのですが、時間のかかる処理に対して"処理待ち"、もしくは"指定時間待ち"のWaitを指定したいのですが、どういった記述をすればいいのでしょうか。 詳しい方お願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 >(1)文書の読み込み >(2)書式変更 >(3)文字の置換 >(4)文書の保存 これ自体に、Waiting は必要ないような気がしますね。なぜ必要なのか分りません。どこかに、バッファがあふれそうなんていうことがあるのでしょうか?単に、DoEventsでも入れておけばよいような気がしますし、記録マクロで、ループを使わないので、メモリを押し上げてしまっているのでしょうか? API関数で負担を軽くするには、こんな方法がありますね。 Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub WaitingTestMethod() Beep '実行 DoEvents Sleep 2000 Beep '実行 End Sub
その他の回答 (4)
- taocat
- ベストアンサー率61% (191/310)
再びこんにちは。ポカしました。(^^; Wordですね。 WordVBAには、waitメソッドはありませんので、回答したコードはそのままは使えません。 使う前にexcelのobject libraryへの参照設定が必要になり、かつコードも数ステップ増えます。 初心者ということですので面倒なことはパスするということでNO.3の回答はスルーしてください。 エスセルで似たようなことをしたい時はOKです。 以上です。
お礼
回答ありがとうございました。 まず、お礼が遅れたことを謝ります。 済みませんでした。 インターネットを使って調べる場合、エクセルだと割と探しやすいのですが、ワードだとなかなか難しいので、こちらでお聞きしました。 できれば、Word2003でExcelのobject libraryへの参照設定の方法を詳しく教えていただけないでしょうか。 実はよくわかっていません。 Microsoft Excel 11.0 Object Library と Microsoft Office 11.0 Object Libraryは既に参照設定しているのですが、Waitを実行すると"メソッドまたはデータメンバが見つかりません"とコンバイルエラーが出ます。 オブジェクトプラウザで検索すると、出てくるのはExcelとOfficeなので、その辺だとは思っているのですが、何を参照設定すればWaitメソッドが使用できるようになるのでしょうか。
- taocat
- ベストアンサー率61% (191/310)
こんにちは。 >"処理待ち"、もしくは"指定時間待ち"のWaitを指定したいのですが そうです。解決策のひとつは、そのWaitメソッドです。(^^; で、マクロを2秒間停止するには Application.Wait Now + TimeValue("00:00:02") としてもできますね。 詳しくは、Waitメソッドのヘルプをご覧あれ。 以上です。
- -yellowtail-
- ベストアンサー率65% (43/66)
こんにちは。 以下の方法はどうでしょうか? >”ここに2秒待ちを設定”←この部分はどうやって記述するのでしょうか。 Application.OnTime Now + TimeValue("00:00:2"), "書式変更" 2秒後に"書式変更"というマクロを実行します。 Callで呼び出す必要はないので1行で済みます。 試してみてください。
お礼
回答ありがとうございました。 まず、お礼が遅れたことを謝ります。 済みませんでした。 Application.OnTime Now + TimeValue("00:00:2"), "マクロ" の形を早速試してみたところ、無事動きました。 ただ、 Application.OnTime Now + TimeValue("00:00:2"), "マクロ(1)" Application.OnTime Now + TimeValue("00:00:2"), "マクロ(2)" の形では、反応してくれません。基準になる時間の問題かと思って時間の間隔をズラしてみたりしたのですが、どうもうまくいきません。 ただし、 Application.OnTime Now + TimeValue("00:00:2"), "マクロ" で記述した各マクロを、Call文で呼び出せば目的は達せられるのではないかと思います(未確認)ので、とりあえずは大丈夫かなと…。
- imogasi
- ベストアンサー率27% (4737/17069)
回答がつきませんね。WordVBAとうたって驚かせるせいもあろうが、非才の私には内容が理解できない。 Waitを入れるのは、マシンの処理が、人間の動作に比べ早すぎて、待ちを入れるケースを想像しますが、本件ではコンピュター処理に時間がかかるから人間が待つという逆のケースらしいが、ウエイトは遅れるコンピュターに待ちを入れてどうするのと思ったのですが、大いなる勘違いでしょうか??何分待ってくださいというメッセージを画面に出したいということですか。その時間の幅の算出はどうするのですか。そのことそのものが質問ですか。 時間がかかる処理は具体的に何ですか。普通は全レコード数がわかっている場合で、今何レコード目を処理しているかで、プログレスバーなど表示してますね。プログラムを実行する前に、そのプログラムの処理時間などわからないと思いますが。データ数にも関係しますから。
お礼
回答ありがとうございました。 でも、わかりにくい説明だったようで、申し訳ありません。 もう少しちゃんと説明すると、 (1)文書の読み込み (2)書式変更 (3)文字の置換 (4)文書の保存 という一連の流れがあって、それぞれを一括で処理するためのマクロをつくりたいのです。 ちなみに(1)~(4)の処理はVBA化しています。 あとはつなぎ合わせるだけなのですが、(1)~(4)の各マクロの間に、"2秒の待ち時間"を指定して、次の処理にうつるようにさせたいのです。 希望する形、 Sub 全体処理() 文書読み込みVBA 部分 ”ここに2秒待ちを設定”←この部分はどうやって記述するのでしょうか。 Call 書式変更 ”ここに2秒待ちを設定”← 〃 。 Call 文字の置換 ”ここに2秒待ちを設定”← 〃 。 Call 文書の保存
お礼
回答ありがとうございました。 まず、お礼が遅れたことを謝ります。 済みませんでした。 教えていただいたSleepを使った方法ですが、確認できました。 どうもありがとうございました。 使わせていただきます。