VBA in Excel/ Rechtschreibprüfung
Die CheckSpelling-Methode
BearbeitenDie 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)
- CustomDictionary: Das Benutzer-Wörterbuch (optional)
- 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
BearbeitenBitte 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
BearbeitenBitte 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:
- 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:
- 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 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
BearbeitenPrivate 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
BearbeitenPrivate 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
BearbeitenDer 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:
BearbeitenDim 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:
BearbeitenPublic 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