次の方法で共有


word vba  application.scrrenupdating=falseが有効にならない

質問

2018年5月28日月曜日 5:27

ワードのフォーラムで質問しておりましたが経験者が豊富なこちらのほうがいいだろうというアドバイスがありましたので,こちらでも投稿させていただきます。

W7;WORD2010です.

最初に文書が2つ(A, Bと呼ぶ)開いていて,Aの全内容をBにcopy,pseteしたあとにAを閉じてBの各段落ごとにある処理を行います.

実行速度を上げたくてAを閉じた後にdeventsを実行し,その後に

application.scrrenupdating=false

を実行しますが画面が更新されます.更新されないようにできないのでしょうか?

Aを閉じるのはウインドウが2つ以上開いているとapplication.scrrenupdating=falseが効かないという記事を見たことがあるからです.

deventsを実行しているのは,これでうまくいく場合があるとの記事をみたことがあるからです.

application.scrrenupdating=falseの後の処理では

select文,findメソッドなどは使っております.

activateは使っておりません.

applicatio.visible=trueは機能します.処理時間が半分になりました.

試しに一つだけ文書を開いている状態で下記のVBAコードを実行すると更新はとまります.

Sub testScreenUpdating()
    Dim i As Long
    
    Application.ScreenUpdating = False
    For i = 1 To 500
        selection.TypeText ("aaaaa")
        selection.TypeParagraph
        Sleep 3
    Next i
    Application.ScreenUpdating = True
End Sub

findメソッドは実行後にそこにカーソルが移動するので,これが原因でしょうか?

どなたか原因や対象方法をご存知の方がいればご教示ください.

すべての返信 (2)

2018年6月2日土曜日 16:18 | 1 票

質問文の誤字脱字が非常に多いので、まずは一字一句チェックして誤字脱字を修正してください。読みづらく誤りのある文章はどこの世界でも見向きされません。また、VBAの処理系自体はシンボルの大文字・小文字を区別しませんが、文書化する際は元の定義にのっとって区別するべきです。誤字脱字を防ぐためにも、シンボル名は手入力するのではなく、きちんとコードからコピー&ペーストすることを推奨します。

 

> ワードのフォーラム

具体的にどこのフォーラムのどのスレッドですか?

 

> ……という記事を見たことがある

> ……との記事をみたことがある

具体的にどのサイトで述べられていることなのかを示してください。

 

技術系メーリングリストで質問するときのパターン・ランゲージ

 

問題が発生しているという「ある処理」の具体的な内容(具体的なコード)が不明なのではっきりとは言えませんが、おそらくFindオブジェクトのExecuteメソッド自体は関係ないはずです。もし「ある処理」とやらでテキストの置換/装飾処理を実行しているのであれば、単純に検索だけを実行するコードに変更して試してみればはっきりするはずです。

まずはVBAデバッガーのウォッチ式やMsgBoxなどを活用して、Application.ScreenUpdatingプロパティが本当にFalseになっているか適宜確認してください。デバッグ作業で不具合の原因箇所を特定するときは二分探索で考えます。デバッグ技法に関して、詳しくは自分で調べて学習してください。ツールの使い方よりも論理的な物事の考え方のほうが重要です。


2018年6月3日日曜日 5:07

誤字脱字申し訳ありません。目の病気で細かい文字が識別しずらくて、テキストファイルで大きな文字で作成し間違いがないと思ってコピペしているのですが、誤字脱字を0にはできないいようです。目の負担が大きいので修正は申し訳ないですができません。原文のままでご回答いただける方で結構です。

watch式で確認しました。
Application.ScreenUpdatingの値が変化した時に中断すつ設定にしました。
Application.ScreenUpdating=falseの次行を実行する前で中断しました。
ステップ実行するとApplication.ScreenUpdating=falseの次行を実行すると値がtrueに変化しました。
この行の内容は
counter = counter ; 1
で特に変わった行ではありません。
試しにこの行をコメントアウトすると次の行で同じようにtrueに変化しました。
原因は不明です。

【追記】

海外でもEXELのVBA」で同じ障害が報告されています。原因は不明のようです。

word VBAの報告がないのは、word VBAで長時間のコートが少ないせいだと思います。

難題のようなので諦め、Application.Visible = Falseでしのぎます。

http://www.vbforums.com/showthread.php?460281-Application-ScreenUpdating-false-does-not-work