挿入ポイントがブックマーク内にあるかどうかの検出(Microsoft Word)
デニスはマクロを開発しており、挿入ポイントがブックマーク内にあるかどうかをテストする必要があります。挿入ポイントがブックマーク内にある場合は、コードでブックマークを変更する必要があるため、彼女はこれを知る必要があります。ブックマークにない場合は、彼女のコードでブックマークを作成する必要があります。
理論的には、プロセスは非常に簡単です。この方法で、選択範囲にブックマークがいくつあるかを確認するだけです。
If Selection.Bookmarks.Count > 0 Then ' Inside a bookmark End If
これは、選択範囲がテキストの範囲であるか、選択範囲が挿入ポイントだけに折りたたまれているかに関係なく機能します。ただし、注意すべき潜在的な「落とし穴」がいくつかあります。 1つ目は、挿入ポイントがブックマークのすぐ左にある場合(ブックマークの先頭に触れるだけ)、Countプロパティは0より大きいままです。これは、折りたたまれた挿入ポイントによって定義される選択が挿入ポイントのすぐ右側に文字が含まれていると見なされます。
2つ目の注意点は、選択範囲が折りたたまれている場合、Countプロパティが0または1であることに依存できないことです。実際、ブックマークが「オーバーラップ」する可能性があるため、1より大きくなる可能性があります
したがって、挿入ポイントが同時に複数のブックマーク内にあるようにします。したがって、挿入ポイントがどのブックマーク内にあるかをテストするためのコードが必要になる場合があります。これを行う最も簡単な方法は、次の方法でブックマークのNameプロパティを調べることです。
Dim bFoundIt As Boolean Dim J As Integer bFoundIt = False Selection.Collapse If Selection.Bookmarks.Count > 0 Then ' Inside a bookmark For J = 1 To Selection.Bookmarks.Count If Selection.Bookmarks(J).Name = "DesiredName" Then bFoundIt = True End If Next J End If
このコードが実行されると、bFoundItは、挿入ポイントが目的のブックマーク内にある場合にのみTrueになります。また、選択範囲を折りたたんで、選択したテキストの範囲ではなく挿入ポイントに確実に配置するコマンドが含まれていることにも注意してください。
3番目の潜在的な「落とし穴」は、Wordが実際に多くの目的で内部的にブックマークを使用することです。たとえば、それらを使用して印刷範囲を定義しますが、それだけではありません。ただし、システム定義のブックマークは常にアンダースコアで始まるため、検出できます。これは前述のコードでは問題になりませんが(特定の名前のブックマークを探しているため)、コードがブックマークを探している場合は潜在的な問題になります。呼び出し可能な関数として記述された次のコードは、このような状況で役立つ場合があります。
Function InBookmark() As Boolean ' Returns True if the insertion point is inside ' any non-system bookmark. Also collapses the ' selection to an insertion point Dim bFoundIt As Boolean Dim J As Integer bFoundIt = False Selection.Collapse For J = 1 To Selection.Bookmarks.Count If Left(Selection.Bookmarks(J).Name) <> "_" Then bFoundIt = True End If Next J InBookmark = bFoundIt End Function
マクロ内からこの関数を使用するには、次のような単純なものを使用できます。
If Not InBookmark Then ' create new bookmark End If
注:
このページ(または_WordTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。
(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(6905)は、Microsoft Word 2007、2010、2013、および2016に適用されます。