Jedna pułapka zwrócić uwagę jest to, że Application.CheckSpelling zwróci true dla dowolnego tekstu, który ma charakter poza kodowej języka, dla którego załatwić pisowni.
Na przykład sprawdzenie nő w języku angielskim zwróci wartość True. Wygląda na to, że Excel jeszcze nie (od wersji 2010) w pełni dotarł do świata Unicode.
Jeśli to jest problem w aplikacji, trzeba albo do odfiltrowania tekst ze znaków spoza kodowej wcześniej, można też pożyczyć funkcję sprawdzania pisowni wyrazu, który nie ma tego błędu, na przykład tak (dostosowanym z 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
teraz Unicode sprawdzana jest w porządku, i teoretycznie można zapewnić słownika ścieżkę pliku jako parametr do funkcji CheckSpelling do sprawdzenia w dowolnym języku masz plik słownika dla:
Application.CheckSpelling(Word, CustomDictionary, IgnoreUppercase, MainDictionary, _
CustomDictionary2, CustomDictionary3, CustomDictionary4, CustomDictionary5, _
CustomDictionary6, CustomDictionary7, CustomDictionary8, CustomDictionary9, _
CustomDictionary10)
W rzeczywistości jednak sprawdzenie odbywa się za pomocą głównego słownika domyślnego języka (zgodnie z ustawieniem w Plik/Opcje/Język), niezależnie od wybranego słownika (zaznaczone w Word 2010, nie wiesz o poprzednich wersjach). Możesz zmienić to ustawienie ręcznie (i musisz ponownie uruchomić program Word, aby zmiana weszła w życie).
Domyślnym językiem jest klucz rejestru. W pakiecie Office 2010:
HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\LanguageResources\InstallLanguage
Więc teoretycznie można zautomatyzować zmianę języka, jak również przy użyciu obwolut VBA do Windows Scripting, WMI lub WinAPI zmienić rejestr (a następnie uruchom ponownie program Word), ale na Windows 7 z UAC włączony Wystąpiły problemy z pozwoleniem i właśnie w tym momencie zrezygnowałem z eksperymentu. Próbowałem tylko trasy WinAPI.
Właśnie przetestowałem i działa ... –
Czy możesz spróbować zrobić zestaw wierszy, a następnie wywołać funkcję z sąsiedniej kolumny? – WhiskerBiscuit
Tak, to jest bardzo stary błąd. Jeśli użyjesz go jako UDF, to nie zadziała :) –