VBA in Excel/ Rechtschreibprüfung

Aus Wikibooks


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