- ベストアンサー
ワードのVBAについての質問
VBA初心者です。コードが長いのでここに載せられないのですが、実行中の画面更新がうまくいきません。ScreenUpdatingを無効にしているわけではないのですが、なぜかstatusbarの呼び出しが無効になったりします。また、ユーザーフォームの書き換えも無視されます。停止命令を含まずに、動作に10秒以上かかるのですが、これぐらい長い命令だと、画面更新機能がうまく機能しなくなることがあるのでしょうか?ちなみに、フォームのほうは、ステップインでは更新されています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> これぐらい長い命令だと、画面更新機能がうまく機能しなく > なることがあるのでしょうか? あると思います。 強制的に画面更新をしたり、処理中断のためのキー入力を 受け付けやすくするためには、DoEvents関数を使用します。 (なお、「関数」ではありますが、通常は戻り値を使うことは ないと思います) 例えば、「Do Loop」の中に組み込むと、連続処理中の 画面更新の停滞を回避できます。 (なお、今回の例ぐらいでは大丈夫だと思いますが、元々の 処理があまりに重いところにDoEvents関数を追加すると スタックエラーが発生する場合があるのでご注意下さい) Do Until i <1000 DoEvents '(以下にループさせる処理を記述) '~~~ Loop DoEvents関数のヘルプ: http://office.microsoft.com/ja-jp/access/HA012288271041.aspx (適用対象が「Access」になっていますが、Wordにも対応 しているはず: Word VBAは使用したことがないので、動作確認用の サンプルは作っていませんが(汗)、WordのVBE画面で、 右クリックメニューから「オブジェクト ブラウザ」を開いて、 少なくとも導関数が組み込まれていることは確認) 機械翻訳版ですが、一応こちらも参考に: http://support.microsoft.com/kb/118468/ja
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 Word VBAは、常に、VBAでの変更も残していますから、Excel VBAとは違います。VBAのみの場合ならともかく、表面的に変化のあるものは、あまり上手くないような気がします。 >これぐらい長い命令だと、画面更新機能がうまく機能しなくなることがあるのでしょうか? 「これぐらい」という意味が良く分かりません。長いコードで不具合があります、と言われてもさっぱりです。一体、何をしているのか分からないので、おっしゃっていることが良く分からないです。質問の最低要件には満たしていないように思います。Versionも開示していないし、ご質問では、マクロ自体が完全な稼動しているかさえわかりません。 記録マクロ以外の長いコード(100行以上)を書けるVBAの技術があるなら、自力で解決するほうが早いと思います。技術があるなら、そうなる可能性がある部分ぐらいは分かりそうなはずです。WordのDocument 自体をいじるマクロは、ScreenUpdating = False にしないと、めまぐるしく画面が変化してしまいます。 一般論としては、ループの途中で、DoEvents を入れて、ScreenRefresh やRepaginate やでも入れて、画面を読み直したらどうかと思います。Repaginate は、全体の最後まで読み直しますから、かなり時間が掛かることがあります。 ただ一般的に、Word VBAで大きなコードは、全体(Application)を不安定にする可能性が強いと思います。
お礼
ご指摘の通り、質問文不明瞭でご迷惑をおかけしました。にも関わらず適切な解決策をありがとうございます。
お礼
質問内容が不明確でご迷惑をおかけしました。ご指摘の方法で、フォームの更新は表現できました。スタックエラーは気をつけます。どうもありがとうございました。