テキストボックスの先頭にカーソルを置く(Word)

テキストボックス内の先頭にカーソルを置く

Documentオブジェクトの場合

Documentオブジェクトの先頭位置にカーソルを置くのは簡単。

Document.Range(0, 0).Select

とすれば、ドキュメントの先頭位置にカーソルを置くことができる。

テキストボックスの場合

ところが、テキストボックスの場合、Rangeメソッドを持つオブジェクトが見当たらない(ですよね?)ので、そもそも

Object.Range(0, 0)

で先頭位置のRangeオブジェクトを取得することができない。

テキストボックスはWord.Shapeオブジェクト。テキストボックスに書き込まれたテキストを取得するには、

Document.TextFrame.TextRange.Text

と、非常に多くの階層をたどる必要がある。

TextRange」というのがRangeオブジェクトを返しそうな名前のプロパティなので調べてみると、確かにRangeオブジェクトを返すらしい。

で、イミディエイト・ウインドウに、次のように打ち込んで[Enter]してみる。

ActiveDocument.TextFrame.TextRange.Select

f:id:akashi_keirin:20190101193113j:plain

このように、テキストボックス内のすべてのテキストが選択された。

これにCollapseメソッドを組み合わせたら、カーソルを先頭に置くことは可能だろう。

カーソルをテキストボックスの先頭に置くコード

リスト1 標準モジュール
Public Sub test()
  ActiveDocument.Shapes(1).TextFrame.TextRange.Select
  Call Selection.Collapse(Direction:=wdCollapseStart)
End Sub

選択範囲を、開始位置方向に向けて潰す、といったイメージのコード。

TextFrameオブジェクトの段階でRangeメソッド使わせてくれたらいいのに……。

こいつを実行すると、

f:id:akashi_keirin:20190101193123j:plain

わかりづらい画像ですまない。

カーソルが先頭に来ている。

これで、Findオブジェクトを使って検索することができる。