【问题标题】:How do I strip all formatting out of this Word VBA output and use the "Normal" quickstyle?如何从这个 Word VBA 输出中去除所有格式并使用“普通”快速样式?
【发布时间】:2015-04-28 07:42:22
【问题描述】:

我正在使用以下 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 时,它会创建一堆疯狂的跨度标签。我不希望这样,因为我要将 HTML 转换为 Kindle 的 .mobi 并且所有 span 标签都会在我的 .mobi 中造成混乱。

如何去除所有格式并以“普通”字样插入页码?

【问题讨论】:

  • 换句话说,我希望插入的文本继承它被插入的段落的样式。
  • 不要弄乱底层标记代码。

标签: vba ms-word


【解决方案1】:

我怀疑真正的答案是使用a good e-book editor,它会为你记录这一点。

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

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 块以使其更具可读性。嵌套的 Withs 使一目了然地判断您正在操作的对象变得更加困难。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-24
    • 2021-12-19
    • 1970-01-01
    • 2018-01-10
    • 2012-02-13
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多