VBA Word Selection.TypeText更改字体?

时间:2015-07-22 08:42:16

标签: vba word-vba

我有一个字体,里面有很多特殊的unicode字符,我想用宏输入一个word文档。

非常简化的版本如下所示:

Sub Macro2()
    Selection.TypeText (ChrW(58081))
End Sub

我可以看到使用BabelMap(字体查看器),十进制58081处的字符是我要输入的字符。

问题

当我运行此宏时,字体会从具有特殊字符的字体更改为" Calibri"这是默认值。这会使角色显示为类似于

的方框

如果我然后手动突出显示方框并将其更改为我想要的字体,它会自行更正并显示。

我尝试了什么

我在输入文字之前尝试过再次设置字体,但它并没有什么区别:

With Selection
        .font.Name = "MyFont"
End With
Selection.TypeText (ChrW(58081))

我还尝试添加宏以返回并在插入后更改字体。这也没有什么区别,我使用的代码是:

With Selection
        .font.Name = "MyFont"
End With

Selection.TypeText (ChrW(58081))

Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.font.Name = "MyFont"
Selection.MoveRight Unit:=wdCharacter, Count:=1

有用的观察

当我在正常集合中输入一个字符时,例如:

Selection.TypeText (ChrW(97))

这可以在不改变字体的情况下工作 - 当我输入58081时为什么字体会改变?

3 个答案:

答案 0 :(得分:1)

这只是一个想法:具有字体的段落和具有字体的[序列]字母[s]之间存在差异。如果段落中包含myFont字体,则插入的文本应为您的字体;否则它可能会恢复为段落的字体(除非设置为不同的字体,否则默认为段落的所有文本)。

如果选择为空,即您正在引用插入点,并设置了字体,则设置下一个字符的字体。但是,TypeText方法会在插入点之前插入,因此您的设置字体无效。

至于你的最后一次尝试,选择插入的字符并设置其字体,我不知道为什么它不应该工作。尝试下面设置字体以打印选择的大小和字体名称(选择现在应该是1个字符)。

您也可以尝试使用InsertAfter对象的InsertBeforeSelection方法。

答案 1 :(得分:1)

如果你想使用Selection,这对我来说很合适:

With Selection
    .Font.Name = "Arial Unicode MS"
    .Text = "Umlaut test ä ö ü ß"
End With

答案 2 :(得分:0)

非常感谢这些想法,他们给了我另一件事要看。最后,我发现即使我将一个角色从另一个位置复制/粘贴到文档中,它正在更改为Calibri的字体。在创建一个没有其他内容的全新文档并在我的问题中运行宏时,我遇到了同样的问题。但是,我有一个旧文档是在2003年左右创建的,我发现即使在相同版本的办公室上运行(2013年我也在),宏工作。我认为在创建word文档时可能会发生一些事情,可能是某些默认设置或者某些内部格式差异,因为我的上述宏在旧文档上工作正常但在我创建的任何新文档上都没有。

我的最终解决方案是使用旧文档,将所有宏复制到其中,它工作正常,甚至保存为dotm文件,并在使用我的2013版办公室保存时。我仍然完全不知道为什么会这样。我仍然可以创建我的宏不起作用的新文档。这两个文件都是.dotm,唯一的区别是它们最初是在办公室版本上创建的。

我希望这可以帮助其他人解决同样的问题,这让我花了一天时间把头发拉出来。