1

Visual Basic を使用して、Word 文書内のすべてのハイパーリンクをマクロで更新しようとしています。私のコードは、テキスト ボックスの内側にないハイパーリンクのみを更新し、内側のハイパーリンクは変更されません。テキスト ボックス内のハイパーリンクも含めて、すべてのハイパーリンクを変更するにはどうすればよいですか? このコードを使用してハイパーリンクを取得します。

 Sub UpdateLinks()
  Dim oLink As Hyperlink
  links = 0
  For Each oLink In ActiveDocument.Hyperlinks
    oLink.Range.Bold = 0
    oLink.Range.Italic = 0
    oLink.Range.Underline = wdUnderlineNone
    oLink.Range.Font.Color = wdColorWhite
    oLink.Range.Shading.BackgroundPatternColor = wdColorGray375
    links = links + 1
  Next oLink
 End Sub
4

1 に答える 1

6

これはあなたのために働くはずです:

Dim links As Integer
Sub UpdateLinks()
    links = 0
    UpdateDocLinks
    UpdateTextBoxLinks
End Sub
Sub UpdateDocLinks() 
    Dim oLink As Hyperlink
    For Each oLink In ActiveDocument.Hyperlinks
      links = links + FormatLink(oLink)
    Next oLink
End Sub
Sub UpdateTextBoxLinks()
    Dim i As Integer
    Dim oLink As Hyperlink
    For i = 1 To ActiveDocument.Shapes.Count
        ActiveDocument.Shapes(i).Select
        For Each oLink In Selection.Hyperlinks
            links = links + FormatLink(oLink)
        Next oLink
    Next i
End Sub

Function FormatLink(link As Hyperlink) As Integer
     With link.Range
         .Bold = 0
         .Italic = 0
         .Underline = wdUnderlineNone
         .Font.Color = wdColorWhite
         .Shading.BackgroundPatternColor = wdColorGray375
      End With
      FormatLink = 1
End Function

DRYバージョン

Dim links As Integer
Sub UpdateLinks()
    links = 0
    UpdateDocLinks
    UpdateTextBoxLinks
End Sub
Sub UpdateDocLinks()
    UpdateLinkSet ActiveDocument.Hyperlinks
End Sub
Sub UpdateTextBoxLinks()
    Dim i As Integer
    For i = 1 To ActiveDocument.Shapes.Count
        ActiveDocument.Shapes(i).Select
        UpdateLinkSet Selection.Hyperlinks
    Next i
End Sub
Sub UpdateLinkSet(link_set As Variant)
    Dim oLink As Hyperlink
    For Each oLink In link_set
        FormatLink oLink
    Next oLink
End Sub
Sub FormatLink(link As Hyperlink)
    With link.Range
       .Bold = 0
       .Italic = 0
       .Underline = wdUnderlineNone
       .Font.Color = wdColorWhite
       .Shading.BackgroundPatternColor = wdColorGray375
    End With
    links = links + 1
End Sub
于 2013-09-26T19:07:17.550 に答える