Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / Objekte / Office / Spelling

CheckSpelling - Rechtschreibprüfung leicht gemacht

Einleitung

Microsoft Word bietet eine integrierte Rechtschreibprüfung. Um nicht mit VB das Rad komplett neu zu erfinden (was hier bestimmt keine triviale Angelegenheit ist), empfiehlt sich die Nutzung von "OLE und ActiveX-Automation".

Die unten gezeigte CheckSpelling-Funktion macht genau dies. Aus Performance-Gründen wird ggf. das Word-Objekt in einer statischen Variablen zur Wiederverwendung abgelegt. Dadurch wird das Zeit-raubende Erzeugen eines neuen Word-Objekts eingespart, was z.B. auf meinem System (600Mhz) eine Beschleunigung um den Faktor 10 bringt.

Beispiele

'Prüfung auf Word/Rechtschreibprüfung:
If CheckSpelling("Hallo") Then
  MsgBox "Rechtschreibprüfung ist verfügbar"
Else
  MsgBox "Rechtschreibprüfung funktioniert nicht"
End If

'Rechtschreibprüfung aufrufen:
MsgBox CheckSpelling("Guten Tag") 'ergibt True
MsgBox CheckSpelling("Guten Tak") 'ergibt False

'Word-Objekt aus Cache entfernen:
CheckSpelling "", , False

Code / Quelltext

Der folgende Code ist eigentlich ziemlich gradlinig; nur das optionale Caching des Word-Objekts macht die Sache etwas länglich:

Zuerst wird geprüft, ob im Cache noch eine Word-Instanz liegt. Falls nicht, so wird eine neue geschaffen und einige Optimierungen vorgenommen (s.a. "VBA-Performance steigern"). Dann wird einfach die Rechtschreibprüfung von Word aufgerufen. Soll das Word-Objekt nicht wiederverwendet werden (ReUse = False), so wird Word beendet und die Objekt-Referenz freigegeben.

Public Function CheckSpelling( _
    ByRef Text As String, _
    Optional ByVal IgnoreUpperCase As Boolean = True, _
    Optional ByVal ReUse As Boolean = True _
  ) As Boolean
  
  'Word-Objekt ggf. wiederverwenden:
  Static wd As Word.Application
  On Error Resume Next

  If Len(Text) > 0 Then
    'Ggf. neues Word-Objekt anlegen:
    If wd Is Nothing Then
      Set wd = New Word.Application
      wd.DisplayAlerts = wdAlertsNone
      wd.ScreenUpdating = False
    End If
    
    'Rechtschreibprüfung aufrufen:
    CheckSpelling = wd.CheckSpelling(Text, , IgnoreUpperCase)
  Else
    'Leerstring ist immer OK:
    CheckSpelling = True
  End If
  
  'Ggf. Word-Instanz freigeben:
  If Not ReUse Then
    wd.Quit wdDoNotSaveChanges
    Set wd = Nothing
  End If

  On Error Goto 0
End Function

© Jost Schwider, 03.09.2001-03.09.2001 - http://vb-tec.de/spelling.htm