(MS Word)删除字符样式IF文本应用了特定的段落样式

时间:2017-08-16 10:35:00

标签: vba replace ms-word

我今天的谷歌必须非常弱,因为有时这似乎是一个显而易见的事情,但我找不到任何人曾经在任何地方询问它的案例......

我有一份文件,我正准备在InDesign中进行适当的排版,其中包括除去段落和字符样式的本地覆盖。我做了一个find-and-replace来用一个名为 Italic 的字符样式替换所有斜体文本实例,但是愚蠢地忘了将它限制为应用了 Normal 样式的文本。

整个文档中散布着数百个标题,这些标题应该是斜体;这是他们段落样式定义的一部分。由于我忘了限制查找和替换, Italic 样式已应用于所有这些标题。令人讨厌的是,由于'italic'类似于Word中的布尔开关,这意味着所有这些标题现在都不是文档中的斜体。

我暂时没有注意到这一点,所以我现在不能简单地撤消它 - 自查找和替换以来文件已被保存并处理。作者(一个脾气暴躁,八十多岁的技术专家)也需要在文件设置之前再次查看该文件,因此最终无论Word文档中的字体是否为斜体都无关紧要,这对他来说很重要。

所以我非常想做的是搜索所有两者段落样式标题 字符样式的文字 Italic 已应用,并删除字符样式。

这在InDesign中是一项简单的任务,其中段落和字符样式是单独的实体,但不是在Word中,它们都集中在一个庞大,混乱的堆中。它似乎不能通过UI完成,所以我猜我将不得不求助于VBA宏......我完全无能为力。

有没有办法查找具有特定段落样式和特定字符样式的文本,然后从该文本中删除字符样式?

1 个答案:

答案 0 :(得分:0)

这里有一些代码可以帮助您入门

按F5运行代码,它将停止在停止命令

检查立即窗口以确定标题样式

每个段落都会被选中,以便您可以分辨出正在检查哪一个

然后,您可以使用if / then语句修改代码以使特定段落斜体

Sub aaaa()

    Dim ppp As Paragraph
    Dim ccc As Range

    For Each ppp In ActiveDocument.Content.Paragraphs

        ppp.Range.Select           ' visual aid only. not used by any other part of the program

        Debug.Print "style :", ppp.Style
        Debug.Print ppp.Style.Description

Stop

        For Each ccc In ppp.Range.Characters       ' you can probably comment out these 3 lines
            Debug.Print ccc.FormattedText.Italic   ' True prints as -1
        Next ccc

        Debug.Print "italic :", ppp.Range.Italic   ' prints -1 if all are italic. 9999999 if some. 0 if none
        ppp.Range.Italic = False                   ' this removes italic from whole paragraph

    Next ppp

End Sub