Wordを使用すると、ドキュメント内で外部ドキュメントまたは現在のドキュメント内の他の場所へのリンクを確立できます。 Peterは、ドキュメント内の内部リンクのみをカウントする方法を探しており、これを行う方法があるかどうか疑問に思っています。

これを行う唯一の方法は、マクロを使用してドキュメント内の各ハイパーリンクをステップスルーすることです。幸い、これはHyperlinksコレクションの要素を調べることで簡単に実行できます。各ハイパーリンクオブジェクトには、リンクの特性に応じて設定できるさまざまなプロパティがあります。特に重要なのは、AddressプロパティとSubAddressプロパティです。

Addressプロパティ(その名前が示すように)は、リンクのターゲットアドレスです。通常、これはURL(/のように)のようなものですが、システムからアクセス可能なドライブ上のファイルの名前または電子メールアドレス(mailto:[email protected]のように)の場合もあります。 Addressプロパティには複数の目的があるため、「http」プレフィックスなどの指示文字の存在を具体的に確認することはできません。プレフィックスが欠落している場合でも、システム上の別のファイルを参照している可能性があるため、リンクは現在のドキュメントの外部にある可能性があります。

ただし、現在のドキュメント内のブックマークへのリンクの場合、[アドレス]フィールドが空白になる場合が1つあります。空白の場合、SubAddressプロパティは、リンクで参照されているブックマークの名前に設定されます。もちろん、リンクが別のドキュメントの特定のブックマークへのリンクである場合は、AddressプロパティとSubAddressプロパティの両方が設定されます。

各ハイパーリンクオブジェクトに保存されている情報を理解するには、次の短いマクロを見てください。各リンクをステップスルーし、それぞれに関する情報を表示します。

Sub LinkInfo()

Dim h As Hyperlink     Dim sTemp As String

For Each h In ActiveDocument.Hyperlinks         sTemp = h.TextToDisplay & vbCrLf         sTemp = sTemp & h.Address & vbCrLf         sTemp = sTemp & h.SubAddress         MsgBox sTemp     Next h End Sub

したがって、ドキュメント内の内部リンク(つまり、現在のドキュメント内のブックマークへのリンク)の数を決定する最も簡単な方法は、各ハイパーリンクオブジェクトのAddressプロパティを調べることです。

プロパティが空の場合、リンクは内部であると安全に想定できます。

Sub InternalLinks1()

Dim h As Hyperlink     Dim lInternal As Long

lInternal = 0     If ActiveDocument.Hyperlinks.Count > 0 Then         For Each h In ActiveDocument.Hyperlinks             If h.Address = "" Then lInternal = lInternal + 1         Next hp     End If     MsgBox lInternal & " hyperlinks are internal" _       & " out of a total of " & ActiveDocument.Hyperlinks.Count End Sub

内部リンクの実際のターゲットのリストをまとめたい場合は、マクロに簡単に追加して、For Eachループ内で、各SubAddressプロパティを調べ、最後に表示したものに追加できます。マクロ。

もちろん、ハイパーリンクはドキュメントの本文内にのみ表示されることに限定されません。ヘッダー、フッター、文末脚注、テキストボックスなど、他のドキュメント要素にハイパーリンクを含めることもできます。次のマクロのバリエーションは、ドキュメント内のこれらの領域(StoryRanges)のいずれかで見つかったすべてのリンクをカウントします。

Sub InternalLinks2()

Dim h As Hyperlink     Dim lInternal As Long     Dim lTotal As Long     Dim aStory As Range

lTotal = 0     lInternal = 0     For Each aStory In ActiveDocument.StoryRanges         lTotal = lTotal + aStory.Hyperlinks.Count         If aStory.Hyperlinks.Count > 0 Then             For Each h In aStory.Hyperlinks                 If h.Address = "" Then lInternal = lInternal + 1             Next h         End If     Next aStory     MsgBox lInternal & " hyperlinks are internal" _       & " out of a total of " & lTotal End Sub

注:

このページ(または_WordTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。

(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(12814)は、Microsoft Word 2007、2010、および2013に適用されます。