Rangeオブジェクトの検索範囲指定
Rangeオブジェクトの検索範囲を指定するコードです。
●背景
検索をするときに最近多用するようになりましたが、馬鹿の一つ覚えみたいにずっとSelection.Rangeを使い続けました。
その中で、検索するときに、カーソルの位置は見えないけれど、検索を開始している位置があることに気づきました。
目に見えないだけにやっかいだと思い、今までは以下のコードを一行書いて、カーソル位置を文頭に移動しました。
Selection.HomeKey unit:=wdStory
結局、カーソルが見えないように処理していたのですが、このコードがあるためにカーソルを移動(画面を移動)する処理が入ることになりました。
別にスピード感として違いはわかりませんが、画面のちらつき(flickering)が増えてしまいます。参考記事はこちら。
カーソルの移動を、画面のちらつきなしにする方法が少しわかってきたので、分かる範囲で紹介いたします。
●カーソル移動方法
以下のコードでは、すべてrngをrangeオブジェクトとして定義してあります。
つまり、
Dim rng as Range
がプロシージャの先頭に書かれていると想定してください。
また、以下の例では、Selection.Rangeではなくて、ActiveDocument.Rangeとしてみました。
この違いはうまく説明できませんが、ActiveDocument.Rangeとすると対象とする検索範囲は文書全体になるような気がしています。
■方法1
Set rng = ActiveDocument.Range
rng.Collapse wdCollapseStart
この方法では、2行目で選択範囲を解除してカーソル位置を文頭に移動しています。
Selectionオブジェクトで用いるCollapseと同じ考え方です。
■方法2
Set rng = ActiveDocument.Range
rng.End = 0
これは、2行目で選択範囲の最終位置が先頭になるように指定します。
つまり、選択範囲の先頭も末尾も「0」文字目になる。つまりカーソルが先頭に位置されるわけです。
■方法3
Set rng = ActiveDocument.Range
rng.StartOf Unit:=wdStory, Extend:=wdMove
これは、選択された範囲の最初にカーソル位置を移動させるものです。
Unitで指定したものが「全体」となっているので、文書全体の先頭にカーソルが移動する仕組みです。
■方法4
Set rng = ActiveDocument.Range(Start:=0, End:=0)
これは、Rangeオブジェクトで特定の開始文字位置および終了文字位置を定義するときの記述方法です。
開始位置および終了位置が0文字目になるので、カーソルが先頭にくるわけです。
■方法5
Set rng = ActiveDocument.Range(0, 0)
方法4の簡略形です。
今まで気づきませんでしたが、「ワードで実践」ではこの書き方を多用していますね。
最近は書籍よりもニュースグループとヘルプを参考にしてプログラムを書き続けていましたが、久しぶりに書籍を読むと、今まで分からなかったことが読めるようになっているのでうれしいですね。
■方法6
Set rng = ActiveDocument.Range
rng.SetRange Start:=0, End:=0
方法4,5と同じような考え方ですが、SetRangeを用いて開始位置と終了位置を設定しています。
| 固定リンク
「マクロプログラム」カテゴリの記事
- Replace関数の例:右クリックでグーグルに活用してみた。(2009.10.31)
- ユーザーフォームのテキストボックス内で改行文字列を取り出す(その3)(2009.10.25)
- ワードの下付き文字の書式情報をテキスト情報に変換するマクロ(2009.10.11)
- ユーザーフォームのテキストボックス内で改行文字列を取り出す(その2)(2009.10.10)
- ユーザーフォームのテキストボックス内で改行文字列を取り出す(その1)(2009.09.27)

コメント