Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1828to1832
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bestimmte_Zeilen_aus_WordDatei_auslesen

Bestimmte_Zeilen_aus_WordDatei_auslesen
18.05.2021 10:27:30
Steffen
Hallo,
ich suche nach einer Möglichkeit in Excel bestimmte Inhalte einer Vielzahl von Word-Dateien auszulesen.
Es sollen alle Word-Dokumente, die in einem bestimmten Ordner liegen ausgewertet werden.
Ausgegeben werden sollen alle Zeilen, die zwischen zwei Suchbegriffen liegen.
Suchbegriff 1: Leistungsanforderung
Suchbegriff 2: Kostenkalkulation
Zwischen den beiden Begriffen kann nur eine Zeile stehen, es können aber auch 30 Zeilen dazwischen stehen.
Die Ausgabe soll wie folgt aussehen:
Spalte A: Dateiname
Spalte B: Vollständiger Zeileninhalt
Folgender Beitrag scheint mir in die gleiche Richtung zu gehen, ich bekomme die entsprechende Modifizierung aber leider nicht hin.
https://www.herber.de/forum/archiv/1372to1376/1374285_bestimmte_Zeilen_aus_WordDatei_auslesen__Franz.html#1374285
Viele Grüße

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bestimmte_Zeilen_aus_WordDatei_auslesen
18.05.2021 13:24:59
Jowe
Hallo Steffen,
probier mal (auf die Schnelle, bin kein Profi mit Word):

Sub Hole_Wordtexte()
Dim strFileName As String 'Pfad und Dateiname
Dim objWDApp As Object    'Word Applikation
Dim strSuchText1 As String    'Suchbegriff 1 = Anfang
Dim strSuchText2 As String    'Suchbegriff 2 = Ende
strFileName = "C:\Temp\TestDokument.docx" 'Anpassen!!
On Error GoTo FBRoutine   'bei Fehler zur Fehlerbehandlung
Set objWDApp = CreateObject("Word.Application")
objWDApp.Visible = True
objWDApp.documents.Open strFileName
strSuchText1 = "Anfangs-Suchtext" 'Anpassen!
strSuchText2 = "Ende-Suchtext4"   'Anpassen!
With objWDApp.Activedocument.Range
If .Find.Execute(strSuchText1) Then vStart = .Start + 1
End With
With objWDApp.Activedocument.Range
If .Find.Execute(strSuchText2) Then vLast = .Start - 1
End With
objWDApp.Activedocument.Range(Start:=vStart, End:=vLast).Copy
Range("A1") = strFileName
Range("B1").PasteSpecial Paste:=xlPasteValues
objWDApp.Activedocument.Close savechanges:=False
objWDApp.Quit
FBRoutine:
MsgBox "Es ist ein Fehler ausgetreten. ErrorNummer = " & Err.Number, vbCritical + vbOKOnly, "Hinweis"
End Sub
Gruß
Jochen
Anzeige
AW: Bestimmte_Zeilen_aus_WordDatei_auslesen
18.05.2021 14:15:30
Steffen
Hallo Jochen,
zunächst einmal vielen Dank; es werden jetzt alle benötigten Einträge aus dem jeweiligen Dokument ausgelesen.
Was ich noch bräuchte bräuchte wäre eine Lösung, die mir alle Dateien aus dem entsprechenden Ordner ausliest (aktuell wird nur die jeweilige Datei ausgelesen).
Zusätzlich wäre es auch optimal, wenn ich in den Spalten D und E zwei Felder ausgeben lassen kann, die ich im Word-Dokument in einer Tabelle in dem immer gleichen Feld stehen habe.
Viele Grüße
AW: Bestimmte_Zeilen_aus_WordDatei_auslesen
18.05.2021 18:01:58
Jowe
Hallo,
hier eine Idee:
Die Schleife der Routine "Sub getDocListe()" läuft über alle Dateien eines bestimmten Ordners und übergibt Pfad- und Dateinamen (nur die mit Extension "doc" ) an die Routine "Sub Hole_Wordtexte(myPath, strDatei)". Jetzt werden im Dokument-Text die Positionen von "strSuchText1" und "strSuchText2" ermittelt und der Text zwischen den Fundstellen kopiert. Schließlich werden die Elemente Pfad- und Dateiname, der kopierte Bestandteil, der Suchbegriff 1 und der Suchbegriff 2 in die Tabelle1, beginnend in Zeile2 geschrieben: Dann geht's zurück in die erste Routine und der nächste Schleifenschritt wird gestratet. Teste mal!

Sub getDocListe()
Dim lngAnzahl As Long
Dim strDatei As String
Dim strDateien() As String
Dim myPath As String
myPath = "C:\Users\wordfiles" 'Anpassen
strDatei = Dir(myPath & "\*.doc")    'Anpassen; nur *.doc ? oder auch *,docx ?
Do While Len(strDatei)
If strDatei  ThisWorkbook.Name Then
lngAnzahl = lngAnzahl + 1
ReDim Preserve strDateien(1 To lngAnzahl)
strDateien(lngAnzahl) = strDatei
Call Hole_Wordtexte(myPath, strDatei)
End If
strDatei = Dir
Loop
End Sub
Sub Hole_Wordtexte(myPath, strDatei)
Dim strFileName As String 'Pfad und Dateiname
Dim objWDApp As Object    'Word Applikation
Dim strSuchText1 As String    'Suchbegriff 1 = Anfang
Dim strSuchText2 As String    'Suchbegriff 2 = Ende
Dim ze As Long
strFileName = myPath & "\" & strDatei
strSuchText1 = "Anfangs-Suchtext" 'Anpassen!
strSuchText2 = "Ende-Suchtext4"   'Anpassen!
On Error GoTo FBRoutine   'bei Fehler zur Fehlerbehandlung
Set objWDApp = CreateObject("Word.Application")
objWDApp.Visible = True
objWDApp.documents.Open strFileName
With objWDApp.Activedocument.Range
If .Find.Execute(strSuchText1) Then vStart = .Start + 1
End With
With objWDApp.Activedocument.Range
If .Find.Execute(strSuchText2) Then vLast = .Start - 1
End With
objWDApp.Activedocument.Range(Start:=vStart, End:=vLast).Copy
With Sheets("Tabelle1")
ze = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(ze, 1) = strFileName
.Cells(ze, 2).PasteSpecial Paste:=xlPasteValues
.Cells(ze, 3) = strSuchText1
.Cells(ze, 4) = strSuchText2
End With
objWDApp.Activedocument.Close savechanges:=False
objWDApp.Quit
Exit Sub
FBRoutine:
MsgBox "Es ist ein Fehler ausgetreten. ErrorNummer = " & Err.Number, vbCritical + vbOKOnly, "Hinweis"
End Sub
Gruß
Jochen
Anzeige
AW: Bestimmte_Zeilen_aus_WordDatei_auslesen
18.05.2021 18:13:40
Steffen
Hallo Jochen,
vielen Dank. Jetzt liest es beide aus; überschreibt aber die Ergebnisse aus dem ersten Dokument; listet diese leider nicht untereinander auf.
Viele Grüße
AW: Bestimmte_Zeilen_aus_WordDatei_auslesen
18.05.2021 18:17:14
JoWE
In meiner Umgebung nicht. Was hast Du verändert und was meinst Du mit "beide"
AW: Bestimmte_Zeilen_aus_WordDatei_auslesen
18.05.2021 18:20:48
Steffen
verändert habe ich nichts; mit beide meine ich, dass ich aktuell nur zwei Dateien in meinem Testordner stehen habe.
AW: Bestimmte_Zeilen_aus_WordDatei_auslesen
18.05.2021 18:25:30
Jowe
Das MAkro geht davon aus, das die Zelle A1 schon gefüllt ist!!
Siehe Code "ze = .Cells(Rows.Count, 1).End(xlUp).Row + 1"
Ist das Bei Dir der Fall?
AW: Bestimmte_Zeilen_aus_WordDatei_auslesen
18.05.2021 18:30:31
Steffen
ja; A1 ist bei mir gefüllt;
Zuerst werden die richtigen Einträge aus einer Datei eingetragen,
dann aber mit den Werten aus der zweiten überschrieben; ich bekomme keine Auflistung.
Anzeige
AW: Bestimmte_Zeilen_aus_WordDatei_auslesen
18.05.2021 18:33:23
Jowe
lade mal die beiden Dateien hoch
AW: Bestimmte_Zeilen_aus_WordDatei_auslesen
18.05.2021 18:45:56
Steffen
Suchkriterien sind dann:
strSuchText1 = "Verantwortlichkeiten / Aufgaben"
strSuchText2 = "Kritische Erfolgsfaktoren / Messgrößen"
AW: letzter Versuch :-))
18.05.2021 19:19:51
Jowe
jetzt aber:

Sub getDocListe()
Dim lngAnzahl As Long
Dim strDatei As String
Dim strDateien() As String
Dim myPath As String
Dim cTxt As String
myPath = "C:\Users\joche\Desktop" 'Anpassen
strDatei = Dir(myPath & "\*.doc*")    'Anpassen; nur *.doc ? oder auch *,docx ?
Do While Len(strDatei)
If strDatei  ThisWorkbook.Name Then
lngAnzahl = lngAnzahl + 1
ReDim Preserve strDateien(1 To lngAnzahl)
strDateien(lngAnzahl) = strDatei
Call Hole_Wordtexte(myPath, strDatei)
End If
strDatei = Dir
Loop
End Sub
Sub Hole_Wordtexte(myPath, strDatei)
Dim strFileName As String 'Pfad und Dateiname
Dim objWDApp As Object    'Word Applikation
Dim strSuchText1 As String    'Suchbegriff 1 = Anfang
Dim strSuchText2 As String    'Suchbegriff 2 = Ende
Dim ze As Long
strFileName = myPath & "\" & strDatei
strSuchText1 = "Verantwortlichkeiten / Aufgaben"
strSuchText2 = "Kritische Erfolgsfaktoren / Messgrößen"
On Error GoTo FBRoutine   'bei Fehler zur Fehlerbehandlung
Set objWDApp = CreateObject("Word.Application")
objWDApp.Visible = True
objWDApp.documents.Open strFileName
With objWDApp.Activedocument.Range
If .Find.Execute(strSuchText1) Then vStart = .Start + 33 'ohne Suchbegriff, oder? (sonst -1)
End With
With objWDApp.Activedocument.Range
If .Find.Execute(strSuchText2) Then vLast = .Start - 2
End With
'objWDApp.Activedocument.Range(Start:=vStart, End:=vLast).Copy
cTxt = objWDApp.Activedocument.Range(Start:=vStart, End:=vLast)
With Sheets("Tabelle1")
ze = .Cells(Rows.Count, 2).End(xlUp).Row + 1
.Cells(ze, 1) = strFileName
.Cells(ze, 2) = cTxt
.Cells(ze, 3) = strSuchText1
.Cells(ze, 4) = strSuchText2
End With
objWDApp.Activedocument.Close savechanges:=False
objWDApp.Quit
Exit Sub
FBRoutine:
MsgBox "Es ist ein Fehler ausgetreten. ErrorNummer = " & Err.Number, vbCritical + vbOKOnly, "Hinweis"
End Sub

Anzeige
AW: letzter Versuch :-))
18.05.2021 19:28:38
Steffen
jetzt werden alle Dateien ausgelesen, aber die einzelnen Zeilen sind leider nicht mehr untereinander; sondern die Ergebnisse werden in eine Zelle eingetragen; z.B. steht bei mir jetzt in B2: A
B
C
D
E
F
G
4
AW: letzter Versuch :-((
18.05.2021 19:34:48
Jowe
ja nun, was willst Du denn erreichen? Wie soll das Ergebnis denn aussehen?
Aber heute nicht mehr. So long :-))
AW: letzter Versuch :-((
18.05.2021 19:42:08
Steffen
also erreichen will ich, dass das Kriterium in Spalte B, oder C steht und dass je Kriterium (hier im Beispiel A bis G) eine Zeile ausgegeben wird; der jeweilige Bereich aus dem nächsten Dokument (hier im Beispiel h bis n) soll sich dann anschließen; in Spalte A sollte dann der Pfad stehen.
Schon einmal vielen Dank für die ganze Mühe
Anzeige
AW: letzter Versuch :-((
18.05.2021 20:18:45
Steffen
So funktioniert es (gibt zwar in Spalte A nur einmal den Pfad an; reicht mir aber).
Vielen Dank nochmal, Du hast mir sehr weitergeholfen.
Viele Grüße

Sub getDocListe()
Dim lngAnzahl As Long
Dim strDatei As String
Dim strDateien() As String
Dim myPath As String
Dim cTxt As String
myPath = "C:\Temp\" 'Anpassen
strDatei = Dir(myPath & "\*.doc*")    'Anpassen; nur *.doc ? oder auch *,docx ?
Do While Len(strDatei)
If strDatei  ThisWorkbook.Name Then
lngAnzahl = lngAnzahl + 1
ReDim Preserve strDateien(1 To lngAnzahl)
strDateien(lngAnzahl) = strDatei
Call Hole_Wordtexte(myPath, strDatei)
End If
strDatei = Dir
Loop
End Sub

Sub Hole_Wordtexte(myPath, strDatei)
Dim strFileName As String 'Pfad und Dateiname
Dim objWDApp As Object    'Word Applikation
Dim strSuchText1 As String    'Suchbegriff 1 = Anfang
Dim strSuchText2 As String    'Suchbegriff 2 = Ende
Dim ze As Long
strFileName = myPath & "\" & strDatei
strSuchText1 = "Suchbegriff1"          'Anpassen!
strSuchText2 = "Suchbegriff2"   'Anpassen!
On Error GoTo FBRoutine   'bei Fehler zur Fehlerbehandlung
Set objWDApp = CreateObject("Word.Application")
objWDApp.Visible = True
objWDApp.documents.Open strFileName
With objWDApp.Activedocument.Range
If .Find.Execute(strSuchText1) Then vStart = .Start + 33 'ohne Suchbegriff, oder?
End With
With objWDApp.Activedocument.Range
If .Find.Execute(strSuchText2) Then vLast = .Start - 2
End With
objWDApp.Activedocument.Range(Start:=vStart, End:=vLast).Copy
With Sheets("Tabelle1")
ze = .Cells(Rows.Count, 2).End(xlUp).Row + 1
.Cells(ze, 1) = strFileName
.Cells(ze, 2).PasteSpecial Paste:=xlPasteValues
.Cells(ze, 3) = strSuchText1
.Cells(ze, 4) = strSuchText2
End With
objWDApp.Activedocument.Close savechanges:=False
objWDApp.Quit
Exit Sub
FBRoutine:
MsgBox "Es ist ein Fehler ausgetreten. ErrorNummer = " & Err.Number, vbCritical + vbOKOnly, "Hinweis"
End Sub

Anzeige
AW: noch etwas probiert...
19.05.2021 15:07:05
Jowe
hab' nochmal was probiert:

Option Explicit
Sub getDocListe()
Dim lngAnzahl As Long
Dim strDatei As String
Dim strDateien() As String
Dim myPath As String
myPath = "C:\Users\joche\Desktop"   'Anpassen!!
strDatei = Dir("Z:\Files" & "\*.doc*")    'Anpassen!!
Do While Len(strDatei)
If strDatei  ThisWorkbook.Name Then
lngAnzahl = lngAnzahl + 1
ReDim Preserve strDateien(1 To lngAnzahl)
strDateien(lngAnzahl) = strDatei
'Debug.Print strDatei
Call Hole_Wordtexte(myPath, strDatei)
End If
strDatei = Dir
Loop
End Sub
Sub Hole_Wordtexte(myPath, strDatei)
Dim strFileName As String     'Pfad und Dateiname
Dim objWDApp As Object        'Word Applikation
Dim strSuchText1 As String    'Suchbegriff 1 = Anfang
Dim strSuchText2 As String    'Suchbegriff 2 = Ende
Dim strCtxt As String         'kopierter Text aus Worddatei
Dim numLänge As Long          'Länge des Textes
Dim numZe As Long             'Schleifenzähler
Dim numZeile As Long          'Schleifenzähler
Dim numSchleifenzähler        'Schleifenzähler
Dim strSplitArray As Variant  'Array für den getrennten Wordtext
Dim strVStart As Long         'Position Start Textteil
Dim strVLast As Long          'Position Ende Textteil
'Pfad-/Dateiname in VAriable übergeben
strFileName = myPath & "\" & strDatei
'die beiden Suchbegriffe in Variable übergeben
strSuchText1 = "Verantwortlichkeiten / Aufgaben"
strSuchText2 = "Kritische Erfolgsfaktoren / Messgrößen"
'Fehlerroutine vorbereiten
On Error GoTo FBRoutine
'Word-App starten und sichtbar machen
Set objWDApp = CreateObject("Word.Application")
objWDApp.Visible = True
'Word-Dokument öffnen
objWDApp.documents.Open strFileName
'die Position für den Start des auszuschneidenden Text ermitteln
With objWDApp.Activedocument.Range
If .Find.Execute(strSuchText1) Then strVStart = .Start + 34 '34 um  den Suchbegriff nicht mitkopieren
End With
'die Position für das Ende des auszuschneidenden Textes ermitteln
With objWDApp.Activedocument.Range
If .Find.Execute(strSuchText2) Then strVLast = .Start - 4
End With
'den Textschnipsel anhand der beiden Positionen in VAriable übergeben
strCtxt = objWDApp.Activedocument.Range(Start:=strVStart, End:=strVLast)
'Word-Datei und Word-App wieder schließen
objWDApp.Activedocument.Close savechanges:=False
objWDApp.Quit
'überflüssige Leerzeichen aus dem String entferne
strCtxt = Trim(strCtxt)
'Anzahl der Zeichen des Strings in VAriable übergeben
numLänge = Len(strCtxt)
'den Strin zerlegen anhand Textxtrennee chr(13) "Zeilenumbruch"
strSplitArray = Split(strCtxt, Chr(13))
'ab hier werden die Daten in die Tabelle geschrieben
With Sheets("Tabelle1")
'ermitteln in welcher Zeile der nächste Eintrag beginnt
numZe = .Cells(Rows.Count, 2).End(xlUp).Row + 1
.Cells(numZe, 1) = strFileName
'der mit Split-Befehl zerteilte Text in jeweils eine Zeile schreiben
For numZeile = numZe To numZe + UBound(strSplitArray)
'.Cells(numZeile, 1) = strFileName 'braucht man das in jeder Zeile?
.Cells(numZeile, 2) = strSplitArray(numSchleifenzähler)
numSchleifenzähler = numSchleifenzähler + 1
Next
.Cells(numZe, 3) = strSuchText1
.Cells(numZe, 4) = strSuchText2
End With
'Fertig und Beenden
Exit Sub
FBRoutine:
objWDApp.Activedocument.Close savechanges:=False
objWDApp.Quit
MsgBox "Es ist ein Fehler ausgetreten. ErrorNummer = " & Err.Number, vbCritical + vbOKOnly, "Hinweis"
End Sub
Gruß
Jochen
Anzeige
AW: noch etwas probiert...
19.05.2021 16:43:45
Steffen
Hallo Jochen,
vielen Dank. Das führt zu dem gleichen Ergebnis, das ich auch hatte (in Spalte A steht dann nur einmal der Pfad).
Aber das reicht mir auch völlig aus.
Vielen Dank noch einmal für die ganze Mühe und Deine Hilfe
AW: noch etwas probiert...
19.05.2021 17:04:55
JoWE
das ist im Code berücksichtigt:
Siehe "braucht man das?"
Wenn das Hochkomma am Anfang dieser Zeile entfernt wird, wird der Pfad in jeder Zeile eingetragen
AW: noch etwas probiert...
19.05.2021 17:16:50
Steffen
ok; verstanden.
Jetzt erhalte ich genau die Ausgabe die ich gerne hätte.
Vielen Dank
AW: Bestimmte_Zeilen_aus_WordDatei_auslesen
18.05.2021 19:12:42
Steffen
so wie ich es verstehe, liegt das Problem darin, dass die Zellen A3 ff. leer bleiben, wenn mehrere Einträge aus der ersten Datei ausgelesen werden; für die zweite und folgende Dateien wird dann in A3 aufgesetzt.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige