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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | Private wdAnw As Object
Private wdDok As Object
Sub Stats()
Pfad = "C:\Test.doc"
On Error Resume Next
Set wdAnw = GetObject(, "Word.Application" )
Select Case Err.Number
Case 0
Case 429
Err.Clear
Set wdAnw = CreateObject( "Word.Application" )
If Err.Number > 0 Then
BadOrHappyEnd Err.Number, Err.Description
Exit Sub
End If
Case Else
BadOrHappyEnd Err.Number, Err.Description
Exit Sub
End Select
On Error GoTo 0
wdAnw.Visible = True
wdAnw.WindowState = 0
On Error Resume Next
Set wdDok = wdAnw.Documents.Open(Filename:=Pfad)
If Err.Number > 0 Then
BadOrHappyEnd Err.Number, Err.Description
Exit Sub
End If
On Error GoTo 0
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
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
BadOrHappyEnd Err.Number, Err.Description
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
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:
1 2 | 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. Beste Grüße,
wuumbs
|