Ianには、他のドキュメントへのリンクを含む多くのドキュメントがあります。

(これらはハイパーリンクではありません。Wordの実際のドキュメントリンクです。)彼はそれらのリンクを解除する必要があり、ドキュメントを読み込んでリンクを1つずつ解除できることを知っています。しかし、彼は、フォルダー内のすべてのドキュメントを調べて、それらのドキュメント内のすべてのリンクを自動的に切断できるマクロが利用できるかどうか疑問に思います。

手動で、次の手順に従ってリンクを解除できます。

。リボンの[ファイル]タブをクリックします。

。画面の左側で[情報]が選択されていることを確認します。

。画面の右下の[関連ドキュメント]カテゴリで、[ファイルへのリンクの編集]をクリックします。 (このオプションが使用できない場合は、Wordが現在のドキュメントにリンクがないと見なしていることを意味します。)Wordは[リンク]ダイアログボックスを表示します。 (図1を参照)

。解除するリンクを選択します。

。 [リンクを解除]をクリックします。アクションを確認するように求められます。

。 [OK]をクリックします。

Word 2007を使用している場合、手順は少し異なります。

。 [オフィス]ボタンをクリックしてから、[準備]をクリックします。

。 [ファイルへのリンクの編集]をクリックします。 (このオプションが使用できない場合は、Wordが現在のドキュメントにリンクがないと見なしていることを意味します。)

Wordは[リンク]ダイアログボックスを表示します。

。解除するリンクを選択します。

。 [リンクを解除]をクリックします。アクションを確認するように求められます。

。 [OK]をクリックします。

お分かりのように、特にドキュメントがたくさんあり、各ドキュメントに複数のリンクがある場合、このプロセスはかなり労働集約的です。プロセスの労働集約的な性質は、イアンがマクロの制御下でリンクを切断する方法を探していた理由です。

マクロでこれを行うには、マクロはフォルダー内の各ドキュメントを開き、見つかったリンクをすべて解除してから、ドキュメントを保存する必要があります。

フォルダ内のドキュメントの数を把握し、それらを開いて閉じるのはかなり簡単です。リンクを解除する場合、マクロはドキュメント内の各フィールドを調べて、LINKフィールドを使用するフィールドのみを解除する必要があります。次のマクロは、これがどのように行われるかを示しています。

Sub RemoveLinks()

Dim fleArray() As String     Dim flCount As Long     Dim k As Long     Dim fle As String     Dim fld As Field     Dim currentFileName As String     Dim docPath As String     Dim bDirty As Boolean

docPath = ActiveDocument.Path & "\"

currentFileName = ActiveDocument.Name

fle = Dir(docPath & "doc")

flCount = -1     ReDim fleArray(0)

Do While fle <> ""

flCount = flCount + 1         ReDim Preserve fleArray(flCount)

fleArray(flCount) = fle         fle = Dir()

Loop

If MsgBox("There are " & flCount + 1 & " files to be processed." _       & vbCrLf & "Do you want to continue?", vbYesNo, "Break links") _       = vbNo Then Exit Sub

For k = 0 To UBound(fleArray)

fle = fleArray(k)

Options.UpdateLinksAtOpen = False         Documents.Open FileName:=docPath & fle         Options.UpdateLinksAtOpen = True         bDirty = False         For Each fld In ActiveDocument.Fields             If fld.Type = wdFieldLink Then                 ' Uncomment the following if link needs to be updated                 ' before the link is broken                 ' fld.LinkFormat.Update                 fld.LinkFormat.BreakLink                 bDirty = True             End If         Next fld         If bDirty Then ActiveDocument.Save    ' Only save if links broken         If ActiveDocument.Name <> currentFileName Then ActiveDocument.Close     Next k End Sub

Fieldsコレクションの各フィールド(fld)を調べるForEachループに注目してください。フィールドのTypeプロパティがwdFieldLinkと等しいことを確認します。これは、フィールドがLINKフィールドであることを意味します。その場合、コードはフィールドのLinkFormatプロパティを指定したBreakLinkメソッドを使用して、リンクを効果的に削除します。

注:

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

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

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