如何从Word VBA输出中删除所有格式并使用" Normal" quickstyle?

时间:2015-04-27 19:07:11

标签: vba ms-word

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

<ItemsControl  ItemsSource="{Binding Names}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <CheckBox Content="{Binding}"
                        Margin="5,0,0,0" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

然而,它有不良后果。

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

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

  3. 如何删除所有格式并在&#34; Normal&#34;中插入页码?字样?

1 个答案:

答案 0 :(得分:0)

我怀疑 真实 的答案是使用a good e-book editor来跟踪这一点。

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

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使得一眼就能看出你正在操作的对象更加困难。