HERBERS Excel-Forum - VBA-Basics

Thema: Rechtschreibprüfung

Inhaltsverzeichnis
  • 1 Die CheckSpelling-Methode
  • 2 Wort prüfen
  • 3 Wort auf englisch prüfen
  • 4 Steuerelement-TextBox prüfen
  • 5 Zeichnen-TextBox global prüfen
  • 6 Zeichnen-TextBox einzeln prüfen
  • 7 Zellbereich prüfen
  • 8 Gültigkeitsfestlegungen prüfen
  • 9 UserForm-TextBox prüfen
  • 10 UserForm-TextBox prüfen
  • 11 Bei Eingabe Rechtschreibprüfung aufrufen
  • 12 Bei Doppelklick Rechtschreibprüfung aufrufen
  • 13 Beim Schließen jeder Arbeitsmappe eine Rechtschreibprüfung durchführen
  • 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