Una trappola a cui fare attenzione è che Application.CheckSpelling tornerà True per qualsiasi testo che ha un carattere di fuori della tabella codici della lingua per la quale si fa il controllo ortografico.
Ad esempio, il controllo n. in inglese restituisce True. Apparentemente Excel non ha ancora (a partire dalla versione 2010) completamente arrivato nel mondo Unicode.
Se questo è un problema nell'applicazione, è necessario schermare il testo con caratteri al di fuori della tabella codici in anticipo, oppure è possibile prendere in prestito la funzione di controllo ortografico di Word, che non ha questo bug, ad esempio come questo (adattato da 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
Ora Unicode viene controllato bene, e in teoria, è possibile fornire un percorso di file dizionario come parametro alla funzione CheckSpelling per controllare in qualsiasi lingua si ha un file dizionario per:
Application.CheckSpelling(Word, CustomDictionary, IgnoreUppercase, MainDictionary, _
CustomDictionary2, CustomDictionary3, CustomDictionary4, CustomDictionary5, _
CustomDictionary6, CustomDictionary7, CustomDictionary8, CustomDictionary9, _
CustomDictionary10)
In realtà, tuttavia, il controllo viene eseguito utilizzando il dizionario principale della lingua predefinita (come impostato in File/Opzioni/Lingua) indipendentemente dal dizionario specificato (archiviato in Word 2010, non sono sicuro delle versioni precedenti). È possibile modificare tale impostazione solo manualmente (e riavviare Word per rendere effettiva la modifica).
L'impostazione della lingua predefinita è regolata da una chiave di registro. In Office 2010:
HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\LanguageResources\InstallLanguage
Quindi, in teoria, si potrebbe automatizzare il cambio di lingua e utilizzando wrapper VBA per Windows Scripting, WMI o WinAPI per modificare il Registro di sistema (e quindi riavviare Word), ma su Windows 7 con UAC abilitato Mi sono imbattuto in problemi di autorizzazione, ed è qui che ho rinunciato all'esperimento. Ho solo provato la rotta WinAPI però.
L'ho appena testato e funziona ... –
Puoi provare a creare una serie di righe e quindi chiamare la funzione dalla colonna adiacente? – WhiskerBiscuit
Sì, è un bug molto vecchio. Se lo usi come UDF, allora non funzionerà :) –