注意すべき落とし穴の 1 つは、Application.CheckSpelling が、スペルチェックを行う言語のコードページ外の文字を含むテキストに対して True を返すことです。
たとえば、英語でnőをチェックすると、 True が返されます。どうやら Excel はまだ (バージョン 2010 の時点で) Unicode の世界に完全には到達していません。
それがアプリケーションの問題である場合は、コードページ外の文字を含むテキストを事前に除外するか、Word のスペルチェック機能を借りることができます。これには、このバグはありません。 .デ):
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
したがって、理論的には、 Windows Scripting、WMI、またはWinAPIのVBA ラッパーを使用してレジストリを変更する (そして Word を再起動する) ことで、言語の変更を自動化することもできますが、UAC が有効になっている Windows 7 では、アクセス許可の問題が発生しました。私は実験をあきらめた。ただし、WinAPIルートのみを試しました。