絶対ハイパーリンクから相対ハイパーリンクへの変更(Microsoft Word)
Lindaには、インターネット上のリソースへの多数(1,800以上)のハイパーリンクを含むWord文書があります。彼女は、すべてのハイパーリンクを変換して、Web上のURLに絶対的ではなく、USBドライブ上の相対的な場所を指すようにする必要があります。 HTMLファイルの名前は、USBドライブでもWebと同じになります。変更されるのは、そのHTMLファイルの場所だけです。 Lindaは、変換を行うための最良の方法について疑問に思います。
最良の方法は、マクロを使用して変換を行うことです。ドキュメント内の各ハイパーリンクは、VBA経由で簡単にアクセスできるHyperlinksコレクションに保存されます。これにより、ハイパーリンクのコレクションをステップ実行し、それぞれのアドレスを調べてから、それらに変更を加えることができます。このようなマクロの例を次に示します。
Sub ConvertHyperlinks() Dim sNewBase As String Dim sFile As String Dim sNewFile As String Dim sChanged As String Dim sNotChanged As String Dim sTemp As String Dim J As Integer Dim h As Hyperlink sNewBase = "c:\myplace\" sChanged = "" sNotChanged = "" For Each h In ActiveDocument.Hyperlinks sTemp = h.Address If Left(sTemp, 5) = "https:" Then sFile = "" For J = Len(sTemp) To 2 Step -1 If Mid(sTemp, J, 1) = "/" Then sFile = Right(sTemp, Len(sTemp) - J) Exit For End If Next J If sFile > "" Then sNewFile = sNewBase & sFile h.Address = sNewFile sChanged = sChanged & sTemp & " (changed to " & _ sNewFile & ")" & vbCrLf Else sNotChanged = sNotChanged & sTemp & vbCrLf End If Else sNotChanged = sNotChanged & sTemp & vbCrLf End If Next h Documents.Add Selection.TypeText "The following hyperlinks were modified:" & vbCrLf Selection.TypeText sChanged & vbCrLf & vbCrLf Selection.TypeText "The following hyperlinks were not modified:" & vbCrLf Selection.TypeText sNotChanged & vbCrLf End Sub
マクロは、ハイパーリンクコレクションをステップスルーすることから始まります。各アドレスはsTemp変数に割り当てられ、「https:」で始まるかどうかがチェックされます。一部のハイパーリンク(たとえば、電子メールアドレスや既存のファイルへのハイパーリンク)は、これらの文字で始まりません。
一致するものが見つかった場合、コードはアドレスを逆方向にたどって、そのアドレスの最後のスラッシュを見つけます。見つかった場合、sFileは、最後のスラッシュの後のすべてに等しくなるように設定されます。つまり、HTMLファイルと等しくなります。
ここで興味深い注意点は、Word文書にハイパーリンクを作成すると、Wordは、入力した内容と実際にハイパーリンクに格納されている内容に対して少し処理を行うことです。たとえば、ドキュメントに次のように入力するとします。
www.Tips.net
WordはこれをWebサイトとして自動的に認識し、ハイパーリンクに変換します。 (もちろん、自動URL変換を行うようにWordが設定されていると仮定します。)作成されたハイパーリンクに実際に格納されているアドレスを見ると、次のことがわかります。
https://www.Tips.net/
このアドレスは「https:」で始まるため、マクロはそれを処理可能なものと見なします。ただし、最後のスラッシュ文字を探してアドレスを逆方向にステップするループは、最後にそれを見つけます。これは、次のコードのためにsFileが空になることを意味します:
sFile = Right(sTemp, Len(sTemp) - J)
sTempとJの長さは、文字列の最後の文字とまったく同じであるため、sFileには右端の0文字が含まれることになり、空になります。つまり、ファイル名は含まれないため、元のURLは別のURLに変換されません。
システムでマクロを正しく機能させるには、sNewBase文字列を変更して、処理されたアドレスの先頭に追加するものをすべて含める必要があります。記述されているように、ファイルの先頭に追加されるデフォルトの文字列は「c:\ myplace \」であることに注意してください。したがって、「 `link:/ privacy」は「c:\ myplace \ privacy」に変更されます。この変換されたアドレスは、厳密には相対ハイパーリンクではありません。相対ハイパーリンクの先頭にはc:\文字がないため、最終的には「\ myplace \ privacy」のようになります。繰り返しになりますが、sNewBaseの値を任意の値に変更して、変換されたハイパーリンクが希望どおりに表示されるようにすることができます。
マクロの実行にそれほど時間はかかりません。ドキュメント内のハイパーリンクの数に関係なく、非常に高速です。マクロが完了すると、変更されたハイパーリンクと変更されていないハイパーリンクを示す新しいドキュメントが作成されます。
注:
このページ(または_WordTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
https:-wordribbon.tips.net-WordTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます] `。
_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。
(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(12931)は、Microsoft Word 2007、2010、2013、2016、2019、およびOffice365のWordに適用されます。