如何从此Word VBA输出中删除所有格式并使用"正常"快速样式?



我正在使用以下VBA宏在文档中的所有书签超链接之后添加页码:

Sub InsertPageRefs()
Application.ScreenUpdating = False
Dim hLnk As Hyperlink, Rng As Range
For Each hLnk In ActiveDocument.Hyperlinks
  With hLnk
    If InStr(.SubAddress, "_Toc") = 0 And .Address = "" Then
      Set Rng = .Range
      With Rng
        .Collapse Direction:=wdCollapseEnd
        .InsertAfter Text:=" (See page #)"
        .Font.Underline = wdUnderlineNone
      End With
      ActiveDocument.Fields.Add Range:=Rng.Characters(InStr(Rng, "#")), Text:="PAGEREF " & .SubAddress
    End If
  End With
Next
Set Rng = Nothing
Application.ScreenUpdating = True
Application.ScreenRefresh
MsgBox ActiveDocument.Hyperlinks.Count & " page numbers have been added.", vbOKOnly
End Sub

但是,它产生了不良结果。

  1. 超链接的蓝色部分溢出到添加的文本中。

  2. 当我将生成的文件保存到 HTML 时,它正在创建一堆疯狂的 span 标签。我不想要这个,因为我将 HTML 转换为 Kindle 的 .mobi,并且所有 span 标签都会在我的 .mobi 中造成混乱。

如何去除所有格式并以"正常"字样式插入页码?

我怀疑真正的答案是使用一个好的电子书编辑器来为你跟踪这一点。

也就是说,问题很可能是您正在处理超链接的范围,因此您所要做的就是复制它。 这允许范围的格式与附加到超链接的任何格式分开。使用超链接范围副本的另一个好处是,您可以直接对范围的文本进行操作,而不会破坏链接,这也是保留目标格式的简单方法:

Sub InsertPageRefs()
    Dim hLnk As Hyperlink
    Dim Rng As Range
    For Each hLnk In ActiveDocument.Hyperlinks
        If InStr(hLnk.SubAddress, "_Toc") = 0 And hLnk.Address = vbNullString Then
            Set Rng = hLnk.Range.Duplicate
            Rng.Start = Rng.End
            Rng.Text = " (See page #)"
            Rng.Font.Underline = wdUnderlineNone
            ActiveDocument.Fields.Add Range:=Rng.Characters(InStr(Rng, "#")), _
                                      Text:="PAGEREF " & hLnk.SubAddress
        End If
    Next
    MsgBox ActiveDocument.Hyperlinks.Count & " page numbers have been added.", vbOKOnly
End Sub

请注意,我拉出了 With 块以使其更具可读性。 嵌套使用使得一目了然地分辨出您正在操作的对象变得更加困难。

相关内容

最新更新