テキストボックスの先頭にカーソルを置く(Word)
テキストボックスの先頭にカーソルを置く
これ、みなさんどうやって実現しているのでしょう?
テキストボックス内の文字列を取得する
テキストボックスはShape
オブジェクトの一種。
んで、その配下にTextFrame
オブジェクトがあり、そのTextRange
プロパティを参照すると、「指定されたレイアウト枠の中の文字列範囲を表す
」が取得できる、という次第。Range
オブジェクト
従って、テキストボックス内の文字列は、
[Shape].TextFrame.TextRange.Text
で取得可能。
たとえば、Document上に
このようなテキストボックスがあるとき、イミディエイト・ウインドウに
?ActiveDocument.Shapes(1).TextFrame.TextRange.Text
と入力して[Enter]を押すと、
こんなふうに、テキストボックス内の文字列を取得することができる。
[Shape].TextFrame.TextRangeを選択する
では、テキストボックス内の文字列を選択するにはどうすればよいか。
[Shape].TextFrame.TextRange
プロパティの返り値はRange
オブジェクトなので、[Range].Select
メソッドを使えばよい。
試みに、イミディエイト・ウインドウに
ActiveDocument.Shapes(1).TextFrame.TextRange.Select
と入力して[Enter]を押す。
カーソルを先頭に置く
では、カーソルを先頭に持って行くにはどうすればよいのだろうか。
すでに、文字列部分が選択されている以上、私にはSelection.Collapse
メソッドを用いる方法しか思い浮かばなかった。つまり、
Call Selction.Collapse(wdCollapseStart)
とするのである。
リスト1 標準モジュール
Private Sub test01() Call ActiveDocument.Shapes(1).TextFrame.TextRange.Select Call Selection.Collapse(wdCollapseStart) End Sub
ActiveDocument
にはテキストボックスを一つ置いているだけなので、ActiveDocument.Shapes(1)
とすれば、そのテキストボックスをShape
オブジェクトとして取得可能。
あとは、TextFrame.TextRange
プロパティを参照してRange
オブジェクトを取得し、そのSelect
メソッドを用いてテキスト範囲を選択。
しかる後にSelection.Collapse
メソッドの引数にwdCollapseStart
を渡して選択範囲を先頭方向に向かって潰す。
リスト1を実行すると、
無事に先頭にカーソルを置くことができた。
おわりに
無事に目的は果たせたわけだが、なんかスマートじゃない気がする。
エレガントな方法があったら教えろ教えてください。
なお、なんでテキストボックスの先頭にカーソルを置きたかったのか。
それは、テキストボックスの文字列を狙って検索したかったからです。