我正在尝试在 Microsoft Word 中使用 VBA 来自动化对大型文档的高度重复的操作。
情况是这样的:我有一个包含很多特殊字符的技术文本,例如❨ (U+2768) 和 ❩ (U+2769)。文字主要用 Cambria 排版,但有些特殊字符在这种字体中找不到。但是,我确实知道,文档中使用的所有字符都存在于 DejaVu Sans Mono 中。因此,我希望所有字符都在 Cambria 中,除了那些不能以这种字体显示的字符——我想在 DejaVu Sans Mono 中显示的那些字符。
在 Microsoft Word 2007 中,我可以通过 Ctrl+A 轻松实现这一点,将字体设置为 DejaVu Sans Mono,将字体设置为 Cambria。第二次改变字体只会改变那些可以在寒武纪中显示的字符的字体。
但是,在 Microsoft Word 2010 中,这显然不起作用。每个单个字符都使用 Cambria 字体,而不是显示在 Cambria 中找不到的字符,而是显示带框的问号符号。
为了克服这个问题,我转向了 VBA。更改给定字符的字体非常容易,例如
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Text = ChrW(10088)
Selection.Find.Replacement.Text = ChrW(10088)
Selection.Find.Replacement.Font.Name = "DejaVu Sans Mono"
Selection.Find.Execute Replace:=wdReplaceAll
但是,为 (C(DejaVu) ∖ C(Cambria)) ∩ C(Doc) where C(DejaVu), C(Cambria), and C(Doc) 中的每个字符编写上述代码并不是很有趣分别是 DejaVu Sans Mono、Cambria 和 my document 中所有字符的集合。
是否有任何(相当简单的)方法可以自动完成此操作? Microsoft Word 肯定知道在 Cambria 中找到哪些字符,哪些没有。我希望在 Cambria 中找不到的那些字符的所有实例都被赋予字体 DejaVu Sans Mono。
最佳答案
我认为这个答案将帮助您实现目标:Script for changing fonts in a Word document