VBA in Excel/ Rechtschreibprüfung


Die CheckSpelling-Methode

Bearbeiten

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

Bearbeiten
  • 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

Bearbeiten
  • 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

Bearbeiten

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

Bearbeiten
  • 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

Bearbeiten

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

Bearbeiten
  • 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

Bearbeiten
  • 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

Bearbeiten
    • 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

    Bearbeiten
    • 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

    Bearbeiten
    • 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

    Bearbeiten

    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:

    Bearbeiten
    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:

    Bearbeiten
    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