Word VBA批量修改文本格式:斜体转大写后设置字体颜色问题问询
我上一次密集编写Word VBA代码大概还是2008年左右,要么是现在的VBA改动很大,要么就是我记忆模糊了。我的工作是将客户的书籍从电子版转换为印刷版,需要确保所有斜体内容都能顺利迁移到印刷版中。我曾尝试用样式实现该需求,但不同体裁的书籍所用样式不同,会互相冲突,因此我编写了一个宏,将电子版书籍中所有斜体内容转换为全大写,方便后续印刷格式调整。
我将电子版中的斜体转为全大写后,再切换到印刷版样式模板、清除所有格式为基础文本时,大写格式会保留,若直接保留斜体格式,此步骤中斜体就会消失。之后我又编写了一个宏,查找所有全大写内容并标注wdpink高亮。我的第二个宏会清除高亮,将大写转为小写并设置为斜体,但我想在同一个宏中同时将这些文本的字体改为红色。如果我注释掉设置红色字体的代码,下方的宏可以正常运行,但之后我还要单独查找替换斜体为红色,我用红色标记句首需要大写或是专有名词的内容。现有流程可以正常运行,但一步完成效率更高。我试过用匹配2个及以上A-Z大写的通配符查找全大写内容后添加if/else语句跳过高亮步骤,也试过ActiveDocument相关代码,但始终无法将文本改为红色或其他任意颜色。如果能解决颜色代码的问题我会非常开心,提前感谢!Monica
Selection.Find.ClearFormatting Selection.Find.Highlight = True With Selection.Find .Text = "" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With While Selection.Find.Found Selection.Find.Execute Options.DefaultHighlightColorIndex = wdNoHighlight Selection.Range.HighlightColorIndex = wdNoHighlight Selection.Font.Italic = wdToggle Selection.Range.Case = wdLowerCase ' Selection.Font.ColorIndex = wdClassicRed Selection.MoveRight Unit:=wdCharacter, Count:=2 Wend End Subd
编辑补充:我找到一个临时解决方案。暂时无法在同一个宏中完成所有所需修改,因此我只能拆成3个宏分别对应3项规则运行,我还没来得及研究怎么通过调用宏的方式将它们整合到一起。不过我已经非常开心和放松了,不用再和十多个互不兼容的样式表较劲,毕竟作者发来的文档都是用自己的样式表排版的,他们也不愿意修改自己的样式表。
Sub Ca1S_R1() Dim objRange As Range With Selection .HomeKey Unit:=wdStory With Selection.Find .ClearFormatting .Text = "[A-Z]{2,}" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchWildcards = True .Execute End With Do While .Find.Found Set objRange = Selection.Range objRange.Font.ColorIndex = wdRed Selection.MoveRight Unit:=wdCharacter, Count:=2 .Collapse wdCollapseEnd .Find.Execute Loop End With End Sub
内容的提问来源于stack exchange,提问作者Maroli Designs

