【Word VBA】カーソル位置を取得するWordマクロ

プログラムを書いていると、カーソルの位置を調べたり、または

特定の位置にカーソルを移動したいことがあります。
そのときに役立つの1行マクロです。

現在のカーソル位置を取得

文字列が選択されている場合に、選択範囲の開始位置と終了位置を取得するマクロです。

開始位置 Selection.Start
終了位置 Selection.End

勘がいい方なら、察しがつくとおり、文字列を選択していない場合、つまり、カーソルが置かれた状態 | を示している状態では、Selection.Start と Selection.End とは同じ値を示します。

使い方

これ、私は理解するのに時間がかかりましたが、プログラム特有の使い方ですね。

①値を取得する場合」と②値を代入する場合」とがあるんです。

①値を取得する場合

これは、現在置かれているカーソル(もしくは、現在選択されている文字列の範囲)から、開始位置と終了位置を取得する場合を意味します。

以下の1行マクロは、カーソルの開始位置をメッセージボックスで表示します。
(おまけの1行マクロ)

MsgBox Selection.Start

上のプログラムは、「Selection.Start で取得した値を表示しなさい」という意味です。

MsgBox を使うと、ワードと対話できるようになるので、プログラミングがいっそう楽しくなります。今回は、説明は省きます。

②値を代入する場合

今度は、逆に、値を入れてあげる方法です。

カーソルを目的の場所に移動させるときに使います。

Selection.Start = 100
Selection.End = 120

こうすると、100文字目から120文字目の文字が選択されます。

それぞれの「値を100や120にしなさい」という意味ですね。

Selection.Start = 100
Selection.End = 100

こうすると、100文字目のところにカーソルが | の状態で表示されます。

なお、文書の一番先頭が0文字目に数えられます。

適当な数値をいれて遊んでみてください。

コメント

  1. Lune Rouge より:

    Document先頭から選択範囲までの間にハイパーリンクなどがある場合、SelectionなどRangeオブジェクトのStart/Endプロハティ値と文字数は一致しません。Word VBAでRegExpオブジェクトを使用して正規表現検索をする際、文字位置が一致しません。Document自体がXMLアーカイブなためで、現在有効な方法を探索中です。

    • 新田順也 より:

      Lune Rouge さん、コメントをありがとうございます。本件の解決方法は私自身もよくわかっておりません。
      私も同じようなことに遭遇したことがありました。そのときには、フィールドでリンクを設定したのですが、このときもStart/Endプロパティを正確に取得できませんでした。このときはどうしようもなかったので、応急処置としてフィールドコードを表示して内部の文字列を検証して、、、、などと汎用性のない方法で乗り切りました。
      この他にも、コメントの挿入位置にもなにかタグを埋め込んでいるらしく、ワイルドカードで検索するときに誤判定になったりします。悩ましいですね。

トップへ戻る