Microsoft Excel

Excel und VBA: Formeln, Programmierung, Lösungen

Inhalt dieser Seite

Die CheckSpelling-Methode

Die CheckSpelling-Methode kann aufgerufen werden mit:

  • Syntax1: Ausdruck.CheckSpelling([CustomDictionary], [IgnoreUppercase], [AllwaysSuggest], [SpellLanguage])

    • CustomDictionary: Das Benutzer-Wörterbuch (optional)

      Eingerichtet sind zwei (am Anfang leere) Wörterbücher:

      • BENUTZER.DIC für die deutsche Sprachversion
      • custom.dic für die englische Sprachversion

         Neue Wörterbücher können hinzugefügt werden.

    • IgnoreUppercase: Groß/Kleinschreibung ignorieren (optional)


    • AllwaysSuggest: Schreibweise vorschlagen (optional)


    • Sprache: Die zugrundzulegende Sprache

      Die möglichen Sprachversionen ergeben sich aus dem Rechtschreibungs-Dialog und sind in der Regel:
      • Deutsch (Deutschland)
      • Deutsch (Österreich)
      • Deutsch (Schweiz)
      • Englisch (Australien)
      • Englisch (Großbritannien)
      • Englisch (Kanada)
      • Englisch (USA)
      • Französisch (Frankreich)
      • Französisch (Kanada)
      • Italienisch (Italien)


  • Syntax2: Ausdruck.CheckSpelling(Word, [CustomDictionary], [IgnoreUppercase])

    Word: Der zu prüfende Begriff


Wird als Ausdruck Application vorgegeben, kommt Syntax 2 zur Anwendung.

  • Wort prüfen

    • Prozedur: CheckWord
    • Art: Sub
    • Modul: Standardmodul
    • Zweck: Einzelwort prüfen
    • Ablaufbeschreibung:
      • Variablendeklaration
      • Fehlerroutine initalisieren
      • Prüfbegriff festlegen
      • Wenn der Prüfbegriff nicht gefunden wurde...
      • Negativmeldung
      • Sonst...
      • Positivmeldung
      • Prozedur beenden
      • Start Fehlerroutine
      • Fehlermeldung
    • Code:
      Sub CheckWord()
         Dim sWorth As String
         On Error GoTo ERRORHANDLER
         sWorth = Range("A1").Value
         If Not Application.CheckSpelling( _
            word:=sWorth, _
            customdictionary:="BENUTZER.DIC", _
            ignoreuppercase:=False) Then
            MsgBox "Keine Entsprechung für das Wort " & sWorth & " gefunden!"
         Else
            MsgBox "Das Wort " & sWorth & " ist vorhanden!"
         End If
         Exit Sub
      ERRORHANDLER:
         Beep
         MsgBox _
            prompt:="Die Rechtschreibprüfung ist nicht installiert!"
      End Sub
      
      
  • Wort auf englisch prüfen

    • Prozedur: SpellLanguage
    • Art: Sub
    • Modul: Standardmodul
    • Zweck: Englisches Einzelwort prüfen
    • Ablaufbeschreibung:
      • Variablendeklaration
      • Aktuelle Spracheinstellung einlesen
      • Wenn es sich um die Excel-Version 7.0 handelt zum 1. Errorhandler springen
      • Initialisierung des 2. Errorhandlers
      • Prüfbegriff einlesen
      • Wenn der Prüfbegriff nicht im kanadisch-englischen Wörterbuch gefunden wurde...
      • Negativmeldung
      • Sonst...
      • Positivmeldung
      • Prüfsprache auf aktuelle Office-Spracheinstellung setzen
      • Prozedur beenden
      • Erster Errorhandler
      • Zweiter Errorhandler
    • Code:
      Sub SpellLanguage()
         Dim lLang As Long
         Dim sWorth As String
         Dim bln As Boolean
         lLang = Application.LanguageSettings.LanguageID(msoLanguageIDUI)
         If Left(Application.Version, 1) = "7" Then GoTo ERRORHANDLER1
         On Error GoTo ERRORHANDLER2
         sWorth = Range("A2").Value
         If Not Range("A2").CheckSpelling( _
            customdictionary:="BENUTZER.DIC", _
            ignoreuppercase:=False, _
            spelllang:=3081) Then
            MsgBox "Keine Entsprechung für das Wort " & sWorth & " gefunden!"
         Else
            MsgBox "Das Wort " & sWorth & " ist entweder vorhanden" & vbLf & _
               "oder es wurde keine Korrektur gewünscht!"
         End If
         bln = Range("A2").CheckSpelling("Test", spelllang:=lLang)
         Exit Sub
      ERRORHANDLER1:
         MsgBox "Die Sprachfestlegung ist erst ab XL9 möglich!"
         Exit Sub
      ERRORHANDLER2:
         Beep
         MsgBox _
            prompt:="Die Rechtschreibprüfung ist nicht installiert!"
      End Sub
      
      
  • Steuerelement-TextBox prüfen

    Bitte beachten: OLEObjekte lassen sich nicht über die CheckSpelling-Methode ansprechen, ihre Texte müssen ausgelesen werden.

    • Prozedur: CheckTxtBoxA
    • Art: Sub
    • Modul: Standardmodul
    • Zweck: Den Inhalt einer TextBox aus der Steuerelement-ToolBox prüfen
    • Ablaufbeschreibung:
      • Variablendeklaration
      • Eine Schleife über alle OLEObjekte des aktiven Blattes bilden
      • Wenn es sich um eine TextBox handelt...
      • TextBox-Inhalt in eine String-Variable einlesen
      • Funktion zum Aufsplitten des Textes in Einzelwörter aufrufen (bei Excel-Versionen ab XL2000 kann hier die VBA-Split-Funktion eingesetzt werden)
      • Eine Schleife über alle Einzelwörter bilden
      • Wenn das Wort nicht gefunden wurde...
      • Negativmeldung
    • Code:
      Sub CheckTxtBoxA()
         Dim oTxt As OLEObject
         Dim arrWrd() As String, sTxt As String
         Dim iCounter As Integer
         For Each oTxt In ActiveSheet.OLEObjects
            If TypeOf oTxt.Object Is MSForms.TextBox Then
               sTxt = oTxt.Object.Text
               arrWrd = MySplit(sTxt, " ")
               For iCounter = 1 To UBound(arrWrd)
                  If Not Application.CheckSpelling( _
                     word:=arrWrd(iCounter), _
                     customdictionary:="BENUTZER.DIC", _
                     ignoreuppercase:=False) Then
                     MsgBox arrWrd(iCounter) & " aus der TextBox " _
                        & oTxt.Name & " wurde nicht im Wörterbuch gefunden!"
                  End If
               Next iCounter
            End If
         Next oTxt
      End Sub
      
      
  • Zeichnen-TextBox global prüfen

    • Prozedur: CheckTxtBoxB
    • Art: Sub
    • Modul: Standardmodul
    • Zweck: Den Inhalt einer TextBox aus der Zeichnen-Symbolleiste global prüfen
    • Ablaufbeschreibung:
      • Variablendeklaration
      • Wenn alle Wörter des TextBox-Inhalts gefunden wurden...
      • Positivmeldung
      • Sonst...
      • Negativmeldung
    • Code:
      Sub CheckTxtBoxB()
         If Application.CheckSpelling( _
            word:=ActiveSheet.TextBoxes("txtSpelling").Text, _
            customdictionary:="BENUTZER.DIC", _
            ignoreuppercase:=False) Then
            MsgBox "Alle Wörter wurden gefunden!"
         Else
            MsgBox "Mindestens ein Wort wurde nicht gefunden!"
         End If
      End Sub
      
  • Zeichnen-TextBox einzeln prüfen

    Bitte beachten: OLEObjekte lassen sich nicht über die CheckSpelling-Methode ansprechen, ihre Texte müssen ausgelesen werden.

    • Prozedur: CheckTxtBoxC
    • Art: Sub
    • Modul: Standardmodul
    • Zweck: Alle Wörter aus einer TextBox aus der Zeichnen-Symbolleiste einzeln prüfen
    • Ablaufbeschreibung:
      • Variablendeklaration
      • TextBox-Inhalt in eine String-Variable einlesen
      • Funktion zum Aufsplitten des Textes in Einzelwörter aufrufen (bei Excel-Versionen ab XL2000 kann hier die VBA-Split-Funktion eingesetzt werden)
      • Eine Schleife über alle Einzelwörter bilden
      • Wenn das Wort nicht gefunden wurde...
      • Negativmeldung
    • Code:
      Sub CheckTxtBoxC()
         Dim arrWrd() As String, sTxt As String
         Dim iCounter As Integer
         sTxt = ActiveSheet.TextBoxes("txtSpelling").Text
         arrWrd = MySplit(sTxt, " ")
         For iCounter = 1 To UBound(arrWrd)
            If Not Application.CheckSpelling( _
               word:=arrWrd(iCounter), _
               customdictionary:="BENUTZER.DIC", _
               ignoreuppercase:=False) Then
               MsgBox arrWrd(iCounter) & " aus der TextBox " & _
                  "txtSpelling wurde nicht im Wörterbuch gefunden!"
            End If
         Next iCounter
      End Sub
      
  • Zellbereich prüfen

    • Prozedur: CheckRange
    • Art: Sub
    • Modul: Standardmodul
    • Zweck: Einen Zellbereich global prüfen
    • Ablaufbeschreibung:
      • Wenn alle Wörter eines Bereiches gefunden wurden...
      • Positivmeldung
      • Sonst...
      • Negativmeldung
    • Code:
      Sub CheckRange()
         If Range("A4:A8").CheckSpelling Then
            MsgBox "Entweder alle Wörter wurden gefunden" & vbLf & _
               "oder es wurde keine Korrektur gewünscht!"
         Else
            MsgBox "Es wurden nicht alle Wörter aus dem Bereich A4:A8 gefunden!"
         End If
      End Sub
      
      
  • Gültigkeitsfestlegungen prüfen

    • Prozedur: CheckValidation
    • Art: Sub
    • Modul: Standardmodul
    • Zweck: Eingabe- und Fehlermeldungstexte einer Gültigkeitsfestlegung prüfen
    • Ablaufbeschreibung:
      • Variablendeklaration
      • Zelle mit Gültigkeitsprüfung an eine Objektvariable übergeben
      • Wenn die Zelle eine Gültigkeitsprüfung enthält...
      • Fehlermeldungs-Text in Stringvariable einlesen
      • Wenn eine Fehlermeldung festgelegt wurde...
      • Funktion zum Aufsplitten des Textes in Einzelwörter aufrufen (bei Excel-Versionen ab XL2000 kann hier die VBA-Split-Funktion eingesetzt werden)
      • Eine Schleife über alle Wörter bilden
      • Wenn das jeweilige Wort nicht gefunden wurde...
      • Negativmeldung
      • Eingabe-Text in Stringvariable einlesen
      • Wenn ein Eingabetext festgelegt wurde...
      • Funktion zum Aufsplitten des Textes in Einzelwörter aufrufen (bei Excel-Versionen ab XL2000 kann hier die VBA-Split-Funktion eingesetzt werden)
      • Eine Schleife über alle Wörter bilden
      • Wenn das jeweilige Wort nicht gefunden wurde...
      • Negativmeldung
    • Code:
      Sub CheckValidation()
         Dim rng As Range
         Dim arrWrd() As String, sTxt As String
         Dim iCounter As Integer
         Set rng = Range("A10")
         If Abs(rng.Validation.Type) >= 0 Then
            sTxt = rng.Validation.ErrorMessage
            If sTxt <> vbNullString Then
               arrWrd = MySplit(sTxt, " ")
               For iCounter = 1 To UBound(arrWrd)
                  If Not Application.CheckSpelling( _
                     word:=arrWrd(iCounter), _
                     customdictionary:="BENUTZER.DIC", _
                     ignoreuppercase:=False) Then
                     MsgBox arrWrd(iCounter) & " aus der Fehlermeldung " & _
                        "wurde nicht im Wörterbuch gefunden!"
                  End If
               Next iCounter
            End If
            sTxt = rng.Validation.InputMessage
            Erase arrWrd
            If sTxt <> vbNullString Then
               arrWrd = MySplit(sTxt, " ")
               For iCounter = 1 To UBound(arrWrd)
                  If Not Application.CheckSpelling( _
                     word:=arrWrd(iCounter), _
                     customdictionary:="BENUTZER.DIC", _
                     ignoreuppercase:=False) Then
                     MsgBox arrWrd(iCounter) & " aus der Eingabemeldung " & _
                        "wurde nicht im Wörterbuch gefunden!"
                  End If
               Next iCounter
            End If
         End If
      End Sub
      
      
  • UserForm-TextBox prüfen

    • Prozedur: cmdSpelling_Click
    • Art: Sub
    • Modul: Klassenmodul der UserForm
    • Zweck: Inhalt einer UserForm-TextBox prüfen
    • Ablaufbeschreibung:
      • Variablendeklaration
      • TextBox-Text in eine String-Variable einlesen
      • Funktion zum Aufsplitten des Textes in Einzelwörter aufrufen (bei Excel-Versionen ab XL2000 kann hier die VBA-Split-Funktion eingesetzt werden)
      • Schleife über alle Wörter bilden
      • Wenn das jeweilige Wort nicht gefunden wurde...
      • Negativmeldung
      • Schleife verlassen
      • Wenn ein Wort nicht gefunden wurde...
      • Rahmen mit der TextBox bilden
      • Den Focus der TextBox zuordnen
      • Erstes Zeichen für die Textmarkierung festlegen
      • Länge der Textmarkierung festlegen
    • Code:
      Private Sub cmdSpelling_Click()
         Dim arrWrd() As String, sTxt As String, sWhole As String
         Dim lChar As Long
         Dim iCounter As Integer
         sTxt = txtSpelling.Text
         sWhole = sTxt
         arrWrd = MySplit(sTxt, " ")
         For iCounter = 1 To UBound(arrWrd)
            If Not Application.CheckSpelling( _
               word:=arrWrd(iCounter), _
               customdictionary:="BENUTZER.DIC", _
               ignoreuppercase:=False) Then
               MsgBox arrWrd(iCounter) & " aus der TextBox " & _
                  "txtSpelling wurde nicht im Wörterbuch gefunden!"
               lChar = InStr(sWhole, arrWrd(iCounter))
               Exit For
            End If
         Next iCounter
         If lChar > 0 Then
            With txtSpelling
               .SetFocus
               .SelStart = lChar - 1
               .SelLength = Len(arrWrd(iCounter))
            End With
         End If
      End Sub
      
      
  • UserForm-TextBox prüfen

    • Prozedur: cmdSpelling_Click
    • Art: Sub
    • Modul: Klassenmodul der UserForm
    • Zweck: Inhalt einer UserForm-TextBox prüfen
    • Ablaufbeschreibung:
      • Variablendeklaration
      • TextBox-Text in eine String-Variable einlesen
      • Funktion zum Aufsplitten des Textes in Einzelwörter aufrufen (bei Excel-Versionen ab XL2000 kann hier die VBA-Split-Funktion eingesetzt werden)
      • Schleife über alle Wörter bilden
      • Wenn das jeweilige Wort nicht gefunden wurde...
      • Negativmeldung
      • Schleife verlassen
      • Wenn ein Wort nicht gefunden wurde...
      • Rahmen mit der TextBox bilden
      • Den Focus der TextBox zuordnen
      • Erstes Zeichen für die Textmarkierung festlegen
      • Länge der Textmarkierung festlegen
    • Code:
      Private Sub cmdSpelling_Click()
         Dim arrWrd() As String, sTxt As String, sWhole As String
         Dim lChar As Long
         Dim iCounter As Integer
         sTxt = txtSpelling.Text
         sWhole = sTxt
         arrWrd = MySplit(sTxt, " ")
         For iCounter = 1 To UBound(arrWrd)
            If Not Application.CheckSpelling( _
               word:=arrWrd(iCounter), _
               customdictionary:="BENUTZER.DIC", _
               ignoreuppercase:=False) Then
               MsgBox arrWrd(iCounter) & " aus der TextBox " & _
                  "txtSpelling wurde nicht im Wörterbuch gefunden!"
               lChar = InStr(sWhole, arrWrd(iCounter))
               Exit For
            End If
         Next iCounter
         If lChar > 0 Then
            With txtSpelling
               .SetFocus
               .SelStart = lChar - 1
               .SelLength = Len(arrWrd(iCounter))
            End With
         End If
      End Sub
      
      
  • Bei Eingabe Rechtschreibprüfung aufrufen

    • Prozedur: Worksheet_Change
    • Art: Sub
    • Modul: Klassenmodul des Arbeitsblattes
    • Zweck: Bei Zelleingabe in Spalte A die Rechtschreibprüfung aufrufen
    • Ablaufbeschreibung:
      • Wenn die Eingabezelle in Spalte A liegt, dann...
      • Warnmeldungen ausschalten
      • Rechtschreibprüfung aufrufen
      • Wanrmeldungen einschalten
    • Code:
      Private Sub Worksheet_Change(ByVal Target As Range)
         If Target.Column = 1 Then
            Application.DisplayAlerts = False
            Target.CheckSpelling
            Application.DisplayAlerts = True
         End If
      End Sub
      
      
  • Bei Doppelklick Rechtschreibprüfung aufrufen

    • Prozedur: Worksheet_BeforeDoubleClick
    • Art: Sub
    • Modul: Klassenmodul des Arbeitsblattes
    • Zweck: Bei Doppelklick in Spalte B die Rechtschreibprüfung aufrufen
    • Ablaufbeschreibung:
      • Wenn die Eingabezelle in Spalte B liegt, dann...
      • Doppelklick-Voreinstellung ausschalten
      • Warnmeldungen ausschalten
      • Rechtschreibprüfung aufrufen
      • Wanrmeldungen einschalten
    • Code:
      Private Sub Worksheet_BeforeDoubleClick( _
         ByVal Target As Range, Cancel As Boolean)
         If Target.Column = 2 Then
            Cancel = True
            Application.DisplayAlerts = False
            Target.CheckSpelling
            Application.DisplayAlerts = True
         End If
      End Sub
      
  • Beim Schließen jeder Arbeitsmappe eine Rechtschreibprüfung durchführen

    Der nachfolgende Code muß in die Personl.xls eingegeben werden, damit er für alle nach Sitzungsstart zu öffnenden und zu schließenden Arbeitsmappen Gültigkeit hat.

    • Im Klassenmodul der Arbeitsmappe:

      Dim xlApplication As New clsApp
      
      Private Sub Workbook_BeforeClose(Cancel As Boolean)
         Set xlApplication.xlApp = Nothing
      End Sub
      
      Private Sub Workbook_Open()
         Set xlApplication.xlApp = Application
         Call CreateCmdBar
      End Sub
      
    • In einem Klassenmodul mit dem Namen clsApp:

      Public WithEvents xlApp As Excel.Application
      
      Private Sub xlApp_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, _
         Cancel As Boolean)
         Dim wks As Worksheet
         For Each wks In Wb.Worksheets
            wks.CheckSpelling
         Next
      End Sub