Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Excel VBA - Word Dokument durchsuchen und auswerte

Excel VBA - Word Dokument durchsuchen und auswerte
02.04.2015 14:22:46
Benjamin
Hallo zusammen!
Ich versuche gerade mittels VBA ca. 150 Umfragen, die mit Word 2003 erstellt wurden, in Excel auszuwerten. Die Umfragen sind so aufgebaut, dass sie aus mehreren Tabellen bestehen. Jede Tabelle hat in der obersten Zeile eine Überschrift / Kategorie. In der Tabelle sind dann unterschiedlich viele Fragen, von denen ich mich aber pro Kategorie bzw. Tabelle aber nur für eine Frage interessiere. Genau diese soll dann ausgewertet werden.
Das Problem ist allerdings, dass die Kontrollkästchen, mit denen die Frage mit Ja oder Nein beantwortet wurde, in der ganzen Umfrage die identische Textmarke haben. Das Steuerelement für "Ja" heißt Kontrollkästchen6 und das Steuerelement für "Nein" heißt Kontrollkästchen.
Mit meinem aktuellen Code kann ich auf ein Word Dokument zugreifen. Ich gebe dabei den Tabellen-Index und die Zeile an, in der die Frage steht, die für meine Auswertung relevant ist (z.B. Tabelle 1, Zeile 2). Leider ist auch die Formatierung der 150 Umfragen nicht immer identisch - es kann also sein, dass in einer anderen Umfrage in Tabelle 1 erst in Zeile 3 die für die Auswertung relevante Frage steht. Deswegen müsste mein Code angepasst werden, dass Suchbegriffe genutzt werden die sich auf die relevante Frage beziehen. Hier erstmal mein aktueller Code:
Private wdAnw As Object
Private wdDok As Object
Sub Stats()
'Pfad der zu bearbeitenden Datei angeben
'Anpassung des Dateipfaded ggf. anpassen!
Pfad = "C:\Test.doc"
'Versuchen eine Verbindung zu Word herzustellen
On Error Resume Next
Set wdAnw = GetObject(, "Word.Application") 'Bestehende Word-Instanz suchen
Select Case Err.Number
Case 0 'Word-Instanz gefunden
Case 429 'Word-Instanz nicht auffindbar
Err.Clear
Set wdAnw = CreateObject("Word.Application") 'Word-Instanz erzeugen
If Err.Number > 0 Then
BadOrHappyEnd Err.Number, Err.Description
Exit Sub
End If
Case Else 'Unerwarteter Fehler
BadOrHappyEnd Err.Number, Err.Description
Exit Sub
End Select
On Error GoTo 0
wdAnw.Visible = True 'Word-Instanz sichtbar machen (Dokument wird geöffnet) -> nicht  _
unbedingt nötig
wdAnw.WindowState = 0
'Es wird überprüft ob das Dokument bereits geöffnet ist oder nicht.
'Anschließend wird die Verbindung zwischen Word und Excel erstellt
On Error Resume Next
Set wdDok = wdAnw.Documents.Open(Filename:=Pfad)
If Err.Number > 0 Then 'Falls Dokument nicht existiert oder unerwarteter Fehler
BadOrHappyEnd Err.Number, Err.Description
Exit Sub
End If
On Error GoTo 0
'Im Folgenden werden die Daten an Excel übergeben
'Zugriff auf Tabelle 1 Zeile 3 - Kontrollkästchen 6 und Kontrollkästchen 7
Cells(100, 2) = wdAnw.ActiveDocument.Tables(1).Rows(3).Range.FormFields.Item("Kontrollkä _
stchen6").Result
Cells(100, 3) = wdAnw.ActiveDocument.Tables(1).Rows(3).Range.FormFields.Item("Kontrollkä _
stchen7").Result
'Zugriff auf Tabelle 2 Zeile 2 - Kontrollkästchen 6 und Kontrollkästchen 7
Cells(101, 2) = wdAnw.ActiveDocument.Tables(2).Rows(2).Range.FormFields.Item("Kontrollkä _
stchen6").Result
Cells(101, 3) = wdAnw.ActiveDocument.Tables(2).Rows(2).Range.FormFields.Item("Kontrollkä _
stchen7").Result
'Mögliche Fehlermeldung
BadOrHappyEnd Err.Number, Err.Description
'Interpretation der Ergebnisse
Range("B2").FormulaLocal = "=WENN(UND(B100=1;C100=0);""Ja"";WENN(UND(B100=0;C100=1);""Nein"";"" _
nicht auswertbar""))"
Range("B3").FormulaLocal = "=WENN(UND(B101=1;C101=0);""Ja"";WENN(UND(B101=0;C101=1);""Nein"";"" _
nicht auswertbar""))"
End Sub
Private Sub BadOrHappyEnd(rc As Long, fehler As String)
If rc > 0 Then
MsgBox fehler, vbExclamation
End If
Set wdDok = Nothing 'Aufräumen
Set wdAnw = Nothing
End Sub

Ich stelle mir den Ablauf der Programmierung so vor, dass ich wie gehabt mit meinem Excel Sheet auf das Word Dokument zugreife. Diesen Teil des VBA Codes habe ich ja bereits und er funktioniert auch problemlos. Sobald eine Verbindung zwischen dem Excel Sheet und dem Word Dokument entstanden ist soll folgendes passieren:
1. Suche Tabelle mit passender Kategorie (jede Tabelle hat in der ersten Zeile eine Überschrift, allerdings will ich nicht jede Tabelle auswerten, sondern nur bestimmte Kategorien, die alle verschieden heißen) und weise einer Variablen den Tabellen-Index zu.
-> Beispiel: Suche nach Tabelle mit der Überschrift "Hausarbeit"
2. Innerhalb der Tabelle mit der Überschrift "Freizeit", suche die Zeile der Tabelle, die die für die Auswertung relevante Frage enthält. Weise einer zweiten Variablen den Zeilen-Index zu.
-> Beispiel: Suche die Zeile mit der Frage "Wird im Haushalt Abfall getrennt?" (Suchwort: "Abfall").
3. Die beiden ausgelesenen Variablen sollen dann übergeben werden, die beiden Kontrollkästchen ausgelesen werden und schließlich an Excel übergeben werden. Das soll dann mit folgendem Code geschehen:

Cells(100, 2) = wdAnw.ActiveDocument.Tables(VariableA).Rows(VariableB).Range.FormFields.Item(" _
Kontrollkästchen6").Result
Cells(100, 3) = wdAnw.ActiveDocument.Tables(VariableA).Rows(VariableB).Range.FormFields.Item(" _
Kontrollkästchen7").Result
Ich bin wirklich ratlos wie ich in meinen Code die Suche nach der passenden Tabelle und anschließend Zeile realisieren kann.
Danke schonmal und beste Grüße

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel VBA - Word Dokument durchsuchen und auswerte
02.04.2015 17:44:05
Frank
Hallo Benjamin,
in ähnlichen Fällen (WRD-Dateien zur Auswertung) habe ich einen anderen Lösungsansatz: WRD öffnen, alles kopieren, in neue (temporäre) XL einfügen. Hier kann ich dann löschen, was nicht gebraucht wird (Überschriften, Header, erklärende Texte etc) oder eben auch gezielt suchen - was in WRD nicht ohne weiteres möglich ist. So zum Beispiel nach Überschriften, unter denen dann das von mir Gesuchte zu finden ist. z.B. Dein 1.: Überschrift heisst, dass das gesuchte Wort "Hausarbeit" wahrscheinlich allein in einer Zelle der Spalte A steht (es sei denn, es werden Abschnittsnummerierungen verwendet - was aber auch beim Einfügen in XL zu sich wiederholenden Strukturen führt, die man für die Suche nutzen kann).
Ausgehend von den Fundstellen suche ich dann nach meinem nächsten Kriterium ("Freizeit"), bevor mein nächstes übergeordnetes Kriterium eintritt (nächste Tabellenüberschrift).
So kannst Du Dich tiefer in Deine Kriterien wühlen und Fundstellen gleich in die Auswertetabelle kopieren (mit der Lauf-/Schleifenvariablen als Zeile). Die Kontrollkästchen werden auch auf eine bestimmte Art ins XL kopiert, die Du abprüfen kannst.
Grüsse,
Frank
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Excel VBA: Word Dokument durchsuchen und auswerten


Schritt-für-Schritt-Anleitung

  1. Öffne Word und Excel: Stelle sicher, dass du eine Word-Instanz geöffnet hast, bevor du dein Excel-Makro ausführst. Die Verbindung zwischen Excel und Word wird im Code hergestellt.

  2. VBA-Code anpassen: Verwende den folgenden angepassten VBA-Code, um ein Word-Dokument zu durchsuchen und relevante Fragen auszuwerten:

    Private wdAnw As Object
    Private wdDok As Object
    
    Sub Stats()
       Dim Pfad As String
       Pfad = "C:\Test.doc"
    
       On Error Resume Next
       Set wdAnw = GetObject(, "Word.Application")
       If Err.Number = 429 Then
           Set wdAnw = CreateObject("Word.Application")
       End If
       On Error GoTo 0
    
       wdAnw.Visible = True
       Set wdDok = wdAnw.Documents.Open(Filename:=Pfad)
    
       ' Tabelle suchen
       Dim tableIndex As Integer
       Dim rowIndex As Integer
       tableIndex = SucheTabelle("Hausarbeit")
       rowIndex = SucheZeile("Wird im Haushalt Abfall getrennt?", tableIndex)
    
       ' Ergebnisse in Excel übertragen
       Cells(100, 2) = wdAnw.ActiveDocument.Tables(tableIndex).Rows(rowIndex).Range.FormFields.Item("Kontrollkästchen6").Result
       Cells(100, 3) = wdAnw.ActiveDocument.Tables(tableIndex).Rows(rowIndex).Range.FormFields.Item("Kontrollkästchen7").Result
    End Sub
    
    Function SucheTabelle(titel As String) As Integer
       Dim t As Integer
       For t = 1 To wdAnw.ActiveDocument.Tables.Count
           If wdAnw.ActiveDocument.Tables(t).Cell(1, 1).Range.Text Like "*" & titel & "*" Then
               SucheTabelle = t
               Exit Function
           End If
       Next t
       SucheTabelle = -1 ' Tabelle nicht gefunden
    End Function
    
    Function SucheZeile(frage As String, tableIndex As Integer) As Integer
       Dim r As Integer
       For r = 1 To wdAnw.ActiveDocument.Tables(tableIndex).Rows.Count
           If wdAnw.ActiveDocument.Tables(tableIndex).Rows(r).Range.Text Like "*" & frage & "*" Then
               SucheZeile = r
               Exit Function
           End If
       Next r
       SucheZeile = -1 ' Zeile nicht gefunden
    End Function
  3. Ergebnisse in Excel auswerten: Du kannst Formeln in Excel verwenden, um die Ergebnisse weiter zu analysieren, z.B. mit WENN-Funktionen.


Häufige Fehler und Lösungen

  • Fehler: Word-Dokument nicht gefunden: Stelle sicher, dass der Pfad zum Dokument korrekt ist. Überprüfe den Dateinamen und die Endung.

  • Fehler: Kontrollkästchen nicht gefunden: Vergewissere dich, dass die Kontrollkästchen im Word-Dokument tatsächlich vorhanden sind und die richtigen Namen haben.

  • Fehler: Tabelle oder Zeile nicht gefunden: Überprüfe die Suchbegriffe für die Tabelle und die Zeile. Syntaxfehler oder falsche Namen führen dazu, dass die Suche nicht funktioniert.


Alternative Methoden

Eine andere Methode, um ein Word-Dokument zu durchsuchen, ist, das gesamte Dokument in eine Excel-Tabelle zu kopieren. So kannst du einfacher nach Überschriften und Inhalten suchen, ohne das Word-Dokument öffnen zu müssen. Diese Methode kann nützlich sein, wenn du mehrere Word-Dokumente gleichzeitig analysieren möchtest.


Praktische Beispiele

  • Beispiel für das Suchen nach einer Überschrift: Der Code oben sucht nach der Überschrift "Hausarbeit". Ersetze diesen Text mit jeder anderen gewünschten Überschrift, um die Suche anzupassen.

  • Beispiel zur Verarbeitung von mehreren Dokumenten: Du kannst eine Schleife implementieren, um mehrere Word-Dokumente zu durchsuchen und die Ergebnisse in Excel zu übertragen.


Tipps für Profis

  • Optimierung der Suche: Verwende spezifische Suchbegriffe, um die Genauigkeit zu erhöhen. Das Vermeiden von allgemeinen Begriffen kann die Leistung verbessern.

  • Fehlerbehandlung: Implementiere umfassende Fehlerbehandlungsroutinen, um unerwartete Probleme während der Ausführung des VBA-Codes zu identifizieren und zu lösen.

  • Dokumente ohne Öffnen durchsuchen: Mit fortgeschrittenen Techniken kannst du Word-Dokumente durchsuchen, ohne sie vollständig zu öffnen, was Zeit spart.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass mein VBA-Code funktioniert? Überprüfe die Referenzen in deinem VBA-Editor, um sicherzustellen, dass alle benötigten Bibliotheken aktiviert sind.

2. Kann ich auch andere Inhalte aus dem Word-Dokument extrahieren? Ja, du kannst den Code anpassen, um auch Text, Tabellen oder Bilder aus dem Word-Dokument zu extrahieren.

3. Welche Excel-Version benötige ich für diese VBA-Funktionen? Die meisten Funktionen sind mit Excel 2007 und neuer kompatibel, jedoch können einige Features spezifisch für neuere Versionen sein.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige