Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0205: Rechtschreibkontrolle mit Word

 von 

Beschreibung 

Da Word eine Rechtschreibkontrolle beinhaltet, kann dies natürlich auch von VB aus gut genutzt werden. Hier wird gezeigt, wie die Kontrolle über einen Text in einer TextBox läuft.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

keine

Download:

Download des Beispielprojektes [2,87 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Textfeld "Text1"

Option Explicit

Private Sub Form_Load()
  Text1.Text = "Die einfachste Möglichkeit, Informationen zwischen " _
             & "einzelnen Dokumenten auszutauschen, besteht in der " _
             & "Benutzung der Zwischenablage. Sie ist auf jedem PC " _
             & "mit Windows Betriebssystem vorhanden und bietet die" _
             & "Möglichkeit jeweils ein Objekt in ihr abzulegen bzw" _
             & ". zu speichern. Die Betonung liegt auf 'ein Objekt'" _
             & ". Versuchen Sie ein weiteres dort abzulegen, wird d" _
             & "as vorherige mit dem neuen überschrieben und ist da" _
             & "mit über die Ablage nicht mehr verfügbar." & vbCrLf

Text1.Text = Text1.Text & vbCrLf & "Ein Objekt kann alles mögliche " _
             & "sein; Texte, oder nur ein Wort bzw. Buchstabe, eine" _
             & "Grafik in einem beliebigen Format, eine oder mehrer" _
             & "e Dateien oder Ordner usw." & vbCrLf & vbCrLf

Text1.Text = Text1.Text & "Man kann sich diese Ablage wie eine klei" _
             & "nes Fach vorstellen in das z.B. ein Stück Papier od" _
             & "er ein Foto hineingelegt wird, um es dann bei Bedar" _
             & "f wieder hervorzuholen. Einziger Unterschied ist, d" _
             & "aß mit dem Ausschalten des Computers auch das Fach " _
             & "der Ablage geleert ist und somit der Inhalt nach er" _
             & "neutem Starten nicht mehr zur Verfügung steht."
End Sub

Private Sub Command1_Click()
    Dim Word As Object
    Dim Text As String
    
    On Error Resume Next
    Set Word = CreateObject("Word.Application")
    
    With Word
        .WordBasic.FileNew
        .WordBasic.Insert Text1.Text
        .WordBasic.ToolsSpelling
        .WordBasic.EditSelectAll
        .WordBasic.SetDocumentVar "MyVar", .WordBasic.Selection
        .Visible = False
        
        Text = .WordBasic.GetDocumentVar("MyVar")
        Text1.Text = InsertNewLineChars(Left(Text, Len(Text) - 1))
                         
        .Documents.Close (0)
        .Quit
    End With
    
    Set Word = Nothing
    Form1.SetFocus
End Sub


Private Function InsertNewLineChars(ByVal Text As String) As String
    Dim Pos As Long, L As Long, X As Long
    
    Pos = 1
    Do While Pos < Len(Text)
      X = InStr(Pos, Text, vbCr)
      If X = 0 Then Exit Do
      Text = Left$(Text, X - 1) & vbCrLf & Mid$(Text, X + 1)
      Pos = X + 2
    Loop
    
    InsertNewLineChars = Text
End Function
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 4 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Sabine Illes am 05.05.2004 um 09:49

Hallo,

Ich habe so wie unten angegeben die Sprache umgestellt und dann die Rechtschreibprüfung aufgerufen, diese Einstellung wird aber ignoriert. Hat jemand Erfahrung mit der Behebung dieses Problems?

lg,
Sabine

Kommentar von Jürgen Goris am 28.07.2003 um 11:04

Hallo,

der Tipp funktioniert soweit gut, allerdings bleiben 2 Probleme:

1. Prüft man einen RTF-Text, gehen sämtliche Formatierungen wie z.B. fett, kursiv etc. verloren. Hat jemand eine Idee ?

2. Wenn das Fenster zur Korrektur eines Wortes angezeigt wird und man mit der Maus neben dieses Fenster klickt, gibt's den "Wechseln zu..." Dialog von Windows. Man kann nur mit Alt + Tab zu dem Korrektur-Fenster wechseln. Gibt's auch hier eine Lösung ?

MfG: J. Goris

Kommentar von Werner Fink am 07.08.2002 um 10:50

Wenn man nicht die "alte" Weise über die .WordBasic Funktionen verwenden möchte und volle Unterstützung durch das Word-Objektmodell erreichen will (was zu empfehlen ist), kann man's auch so machen:
Sub CheckSpelling(txtField As TextBox, csLanguage As WdLanguageID)
Dim Word As Word.Application
Dim csText As String
' Word als Objekt öffnen
Set Word = CreateObject("Word.Application")
With Word
' Neues Dokument hinzufügen
.Documents.ADD
' Text übertragen
.Selection.TypeText (txtField.text)
' Alles markieren
.Selection.WholeStory
' Sprache einstellen
.Selection.LanguageID = csLanguage
' Cursor an den Anfang setzen, damit die Rechtschreibprüfung von vorne beginnt
.Selection.Start = 0
' Aktive Option der Rechtschreibkontrolle prüfen
If .Options.CheckGrammarWithSpelling Then
' Rechtschreibung und Gramatik prüfen
.ActiveDocument.CheckGrammar
Else
' Nur Rechtschreibung prüfen
.ActiveDocument.CheckSpelling
End If
' Den ganzen Text im Word Dokument markieren
.Selection.WholeStory
' Text in die Variable übernehmen
csText = .Selection.text
' Word wieder unsichtbar schalten
.Visible = False
' Zeilenumbrüche wieder richtigstellen
csText = InsertNewLineChars(Left$(csText, Len(csText) - 1))
' Text zurückgeben
txtField.text = csText
' Neu angelegtes Dokument ohne Speichern schließen
.Documents.Close (0)
' Word beenden
.Quit
End With
' Word wieder entalden
Set Word = Nothing
End Sub
PS: Die Fehlerbehandlung habe ich mir bei der Beschreibung hier gespart.
Viel Spaß
Werner Fink
dacore Datenbanksysteme AG
www.dacore-dbs.de

Kommentar von Gianni am 24.10.2001 um 14:57

Die Rechtschreibkontrolle funktioniert auch mehrsprachig, indem die Sprache des in Word eingefügten Textes umgestellt wird:
Word.Selection.LanguageID = wdEnglishUS
bzw. wdFrench, wdSpanish, wdItalian, wdBrazilianPortuguese oder wdGerman
Gruß
Gianni