VBA in Excel/ Rechtschreibprüfung
Erscheinungsbild
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)
- 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
[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:
- 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
[Bearbeiten]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]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