Documentの終端を取得する(Word)

Documentの終端を取得する(Word)

目次

こんなことができます

Wordドキュメントの終端のRangeオブジェクトを、簡単に取得することができる。

きっかけ

Wordドキュメントの末尾の部分のRangeオブジェクトを取得したいなあと思って、ちょろっとコードを書いてみたら、

Dim tgtDoc As Document
Set tgtDoc = ThisDocument
Dim tmpRange As Range
Set tmpRange = tgtDoc.Range(tgtDoc.Range.End - 1, tgtDoc.Range.End - 1)

という、ぶさいくにもほどがあるコードになってしまったので、

これは外出ししなくては!

となったのがきっかけ。

それ以上でもそれ以下でもない。

Function化

コードは次の通り。

リスト1 標準モジュール
Private Function getLastEdge( _
    Optional ByVal TgtDocument As Document) As Range
  If TgtDocument Is Nothing Then Set TgtDocument = ActiveDocument
  Dim ret As Range
  With TgtDocument
    Set ret = .Range(.Range.End - 1, .Range.End - 1)
  End With
  Set getLastEdge = ret
End Function

もはや説明は必要ないだろう。ド直球。

使ってみる

f:id:akashi_keirin:20210101193804j:plain

たとえば、このようなWordドキュメントがあるとする。

画像ではややわかりにくいかも知れないが、現在カーソルが「しかしながら」で始まる段落の先頭にある。

この状態で、次のコードを実行してみる。

スト2 標準モジュール
Private Sub test00()
  Dim tgtDoc As Document
  Set tgtDoc = ThisDocument
  Dim tmpRange As Range
  Set tmpRange = getLastEdge(tgtDoc)  '……(1)'
  Call tmpRange.Select  '……(2)'
End Sub

もはや言うまでもないことだが、(1)

Set tmpRange = getLastEdge(tgtDoc)

で、変数tmpRangeに文書末尾のRangeオブジェクトをぶち込み、(2)

Call tmpRange.Select

で、その部分をSelectしたわけである。

したがって、これまた非常に分かりづらい画像で恐縮至極だが、

f:id:akashi_keirin:20210101193807j:plain

このように、ちゃんと文書末尾にカーソルが移動している。

ばっちり。

おわりに

車輪の再発明」みたいなことになっていたら教えろ教えてください。