我正在尝试使用Microsoft Word中的VBA自动化大型文档上高度重复的操作。
情况是这样的:我有一个包含许多特殊字符(例如❨(U+2768)和❩(U+2769))的技术文本。该文本主要采用Cambria字体排版,但某些特殊字符在此字体中找不到。但是,我确实知道文档中使用的所有字符都存在于DejaVu Sans Mono中。因此,除了无法在此字体中显示的字符外,我希望所有字符都采用Cambria字体,而这些字符应该采用DejaVu Sans Mono字体显示。
在Microsoft Word 2007中,我可以轻松地通过Ctrl+A,将字体设置为DejaVu Sans Mono,再将字体设置为Cambria来实现这一点。第二次更改字体只会更改那些可以在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)中的每个字符编写上述代码并不是非常有趣。其中,C(DejaVu), C(Cambria)和C(Doc)分别是DejaVu Sans Mono、Cambria和我的文档中所有字符的集合。
是否有任何(相对简单)的方法可以自动完成这个过程?毕竟,Microsoft Word知道哪些字符在Cambria中找到,哪些没有。我希望所有那些在Cambria中找不到的字符都能使用DejaVu Sans Mono字体。