Live-Forum - Die aktuellen Beiträge
Datum
Titel
19.07.2024 18:36:17
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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

38 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige