需要注意的一个陷阱是 Application.CheckSpelling 将为任何具有您进行拼写检查的语言代码页之外的字符的文本返回 True。
例如,检查英语中的nő返回 True。显然 Excel 还没有(截至 2010 版)完全进入 Unicode 世界。
如果这是您的应用程序中的问题,您要么必须事先筛选出带有代码页之外的字符的文本,要么您可以借用 Word 的拼写检查功能,它没有这个错误,例如像这样(改编自www.vb-tec .de ):
Public Function CheckSpellingWd( _
ByRef Text As String, _
Optional ByVal IgnoreUpperCase As Boolean = False, _
Optional ByVal ReUse As Boolean = True _
) As Boolean
'Reuse Word object on next call
Static wd As Word.Application
If Len(Text) > 0 Then
'create Word object on first call
If wd Is Nothing Then
Set wd = New Word.Application
wd.DisplayAlerts = wdAlertsNone
End If
'Do spellcheck
CheckSpellingWd = wd.CheckSpelling(Text, , IgnoreUpperCase)
Else
'Return True on empty string
CheckSpellingWd = True
End If
End Function
现在 Unicode 被检查得很好,理论上,你可以提供一个字典文件路径作为 CheckSpelling 函数的参数,以检查你有字典文件的任何语言:
Application.CheckSpelling(Word, CustomDictionary, IgnoreUppercase, MainDictionary, _
CustomDictionary2, CustomDictionary3, CustomDictionary4, CustomDictionary5, _
CustomDictionary6, CustomDictionary7, CustomDictionary8, CustomDictionary9, _
CustomDictionary10)
然而,实际上检查是使用默认语言的主词典(在文件/选项/语言中设置)完成的,而不管您指定的词典是什么(在 Word 2010 中检查,不确定以前的版本)。您只能手动更改该设置(并且必须重新启动 Word 才能使更改生效)。
默认语言设置由注册表项控制。在 Office 2010 中:
HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\LanguageResources\InstallLanguage
因此,理论上,您也可以使用 VBA 包装器对Windows Scripting、WMI或WinAPI更改注册表(然后重新启动 Word)来自动更改语言,但是在启用 UAC 的 Windows 7 上,我遇到了权限问题,这就是我放弃了实验。我只尝试了 WinAPI 路由。