たくさんのドキュメントのリンクを壊す(Microsoft Word)
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に適用されます。