MSWord 如何 unlink/break 首先 link 到 excel 文档,而不破坏剩余的 hyperlinks

MSWord how to unlink/break first link to excel document, without breaking remaining set of hyperlinks

我想设置一个 word 模板,它有一个 linked excel table 通过以下代码的字段:

{LINK Excel.SheetMacroEnabled.12 D:\calendar.xlsm calendar!namedR \f 4 \h \* MERGEFORMAT}

table 位于 excel 并且每天更新。 excel 有几列,其中一列有一组 hyperlink 到各个网站的行。当我尝试将 link 拆分为 table 时,为了创建文档的其余部分并通过以下代码将其存档,我总是得到所有 link(包括 hyper links 到网站)在 linked table 损坏。 有趣的是,当我手动执行它并且 select Word 中的 table 它只将 link 分解为 excel table,留下 hyperlinks 在 table 列中完好无损。这是期望的程序化结果。我尝试了 2 个以下宏,其中 none 有效。有没有办法通过 VBA 实现它而不破坏 linked table 中的所有 link?

Sub ConvertTableLink()

    Dim myField As Field

   For Each myField In ActiveDocument.Fields
      If myField.Type = wdFieldLink Then
         myField.Unlink
      End If
   Next

End Sub

Sub ConvertTableLinkTake2()

   ActiveDocument.Fields(1).Update
   ActiveDocument.Fields(1).Unlink

End Sub

例如,假设链接对象是文档中的第一个字段:

Sub Demo()
Dim Rng As Range, Hlnk As Hyperlink, i As Long
Dim StrDisp As String, StrLink As String, StrFont As String, StrSize As String
With ActiveDocument.Fields(1)
  Set Rng = .Result
  With Rng
    For Each Hlnk In .Hyperlinks
      StrDisp = StrDisp & "|" & Hlnk.TextToDisplay
      StrLink = StrLink & "|" & Hlnk.Address
      StrFont = StrFont & "|" & Hlnk.Range.Font.Name
      StrSize = StrSize & "|" & Hlnk.Range.Font.Size
    Next
  End With
  .Unlink
  With Rng
    For i = 1 To UBound(Split(StrDisp, "|"))
      With .Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Forward = True
        .Format = False
        .Text = Split(StrDisp, "|")(i)
        .Replacement.Text = ""
        .Wrap = wdFindStop
        .Execute
      End With
      Set Hlnk = .Hyperlinks.Add(Anchor:=.Duplicate, Address:=Split(StrLink, "|")(i), TextToDisplay:=Split(StrDisp, "|")(i))
      Hlnk.Range.Font.Name = Split(StrFont, "|")(i)
      Hlnk.Range.Font.Size = Split(StrSize, "|")(i)
    Next
  End With
End With
End Sub

当您手动取消链接 LINK 字段而不是 VBA 时,为什么您的链接仍然存在的原因并不明显。一般来说,无论我在这里使用哪种方式,我都会看到相同的行为 - 链接保持蓝色,因此它们看起来仍然像链接,但它们不是。

你可以自己做 "unlink" 来保留超链接,假设 LINK 是文档中的第一个 LINK 字段:

Sub replaceLinkByResult1()
Dim fld As Word.Field
Dim rng As Word.Range
For Each fld In ActiveDocument.Fields
  If fld.Type = wdFieldLink Then
    Set rng = fld.Result.Tables(1).Range
    rng.Copy
    fld.Delete
    rng.Paste
    Exit For
  End If
Next
End Sub

如果 Copy/Paste 不起作用或者您希望避免它,以下方法也应该有效:

Sub replaceLinkByResult2()
Dim fld As Word.Field
Dim rng1 As Word.Range
Dim rng2 As Word.Range
For Each fld In ActiveDocument.Fields
  If fld.Type = wdFieldLink Then
    Set rng1 = fld.Result.Tables(1).Range
    Set rng2 = rng1.Duplicate
    rng2.Collapse wdCollapseEnd
    rng2.Start = rng2.Start + 1
    rng2.InsertParagraph
    rng2.Start = rng2.Start + 1
    rng2.FormattedText = rng1.FormattedText
    fld.Delete
    Set rng2 = Nothing
    Set rng1 = Nothing
    Exit For
  End If
Next
End Sub