Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1544to1548
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

Unterordner durchsuchen Excel VBA

Unterordner durchsuchen Excel VBA
01.03.2017 20:51:45
niki

Hi, ich habe mir ein Makro gebastelt, mit dem ich Daten aus mehreren Word Tabellen auslesen kann. Das Makro durchsucht alle Word Dokumente in einem Ordner, es sollte aber möglichst auch alle Unterordner in diesem Ordner durchsuchen. Zudem würde ich gerne Dokumente mit der Endung .docx UND .docm durchsuchen. Ist das möglich?
Hier mein Code:

Sub WordtabelleEinlesen()
Dim sPfad As String
Dim appWord As Object
Dim fd As FileDialog
Dim arrDaten
Dim zeichnung
Dim material
Dim bezeichnung
Dim cam
Dim vorrichtung1
Dim vorrichtung2
Dim vorrichtung3
Dim vorrichtung4
Dim strDatei As String
Dim loLetzte As Long
sPfad = "O:\ODE\Data\Produktion ODP\AVOR\allgemein\Laserprogramme - Überarbeitung\Test Makro  _
Word Einrichtblätter Schüler\Original\" '<== Pfad anpassen
Application.ScreenUpdating = False
Set appWord = CreateObject("Word.Application")
appWord.Visible = True
strDatei = Dir(sPfad & "*.docx") '<== Dateiendung anpassen
Do While strDatei <> ""
appWord.Documents.Open sPfad & strDatei, , True 'fragt nich immer nach, ob dokument  _
schreibgeschützt geöffnet werden soll
If appWord.activeDocument.Tables.Count > 1 Then ' <== Abfrage ob mindestens 2 Tabellen  _
enthalten sind
tabelle = appWord.activeDocument.Tables(1).Cell(1, 3)
zeichnung = appWord.activeDocument.Tables(1).Cell(2, 3)
material = appWord.activeDocument.Tables(1).Cell(3, 3)
bezeichnung = appWord.activeDocument.Tables(1).Cell(4, 3)
cam = appWord.activeDocument.Tables(1).Cell(5, 3)
vorrichtung1 = appWord.activeDocument.Tables(1).Cell(10, 2)
vorrichtung2 = appWord.activeDocument.Tables(1).Cell(11, 2)
vorrichtung3 = appWord.activeDocument.Tables(1).Cell(12, 2)
vorrichtung4 = appWord.activeDocument.Tables(1).Cell(13, 2)
arrDaten = Split(Application.Substitute(appWord.activeDocument.Tables(1), Chr(7), ""), Chr(13) & _
Chr(13))
With ThisWorkbook.Worksheets("Tabelle1").Columns(1)
loLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows. _
Count) + 1
strInhalt = Mid(arrDaten(1), InStr(arrDaten(1), Chr(13)) + 1)
'strInhalt = Mid(strInhalt, 1, InStr(strInhalt, Chr(13)) - 1)
.Cells(loLetzte, 1) = tabelle
.Cells(loLetzte, 2) = zeichnung
.Cells(loLetzte, 3) = material
.Cells(loLetzte, 4) = bezeichnung
.Cells(loLetzte, 5) = cam
.Cells(loLetzte, 6) = vorrichtung1
.Cells(loLetzte, 7) = vorrichtung2
.Cells(loLetzte, 8) = vorrichtung3
.Cells(loLetzte, 9) = vorrichtung4
Columns("A:I").AutoFit
End With
End If
appWord.activeDocument.Close savechanges:=False
strDatei = Dir
Loop
appWord.Quit
Set appWord = Nothing
Set fd = Nothing
End Sub

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Unterordner durchsuchen Excel VBA
02.03.2017 13:52:36
Piet
Hallo niki
ich gebe mal Hilfestellung wie man das Problem lösen kann, man kann es über zwei Makros lösen, In dem Fall sollte man den Pfad des Haupt-Ordners ganz nach oben in eine Const Anweisung setzen. Der sPfad muss auch oben als Dim Deklariert sein, damit sein Wert beim Call Aufruf ans naechste Makro übergeben wird.
Wichtig: In deinem alten Makro "WordtabelleEinlesen" muss Dim sPfad gelöscht werden und dort muss auch die Zeile wo du den sPfad mit ""O:\ODE\Data\..." definiert hast komplett gelöscht werden. Du übergibst hier ja den -fertigen Pfad- aus dem 1. Makro!!
Dann kannst du im 1. Makro jeden Unterordner festlegen, und rufst ganz normal das 2. Makro auf. Um mehrere Word Dokumente wie .docx und .docm aufzulisten versuche es zuerst mal indem du in der "strDatei" für den letzten Buchstaben ein "*" eingibst.
'strDatei = Dir(sPfad & "*.doc*") '<== mehrere Dateiendungen
Sollte das nicht klappen muss man die korrekte Dateiendung angeben, dann ist mein Trick die Do Loop Schleife als sog. GoSub Unterprogramm mit Return zu benutzen. Durch Return kehrt das Makro zurück, und kann ein zweites mal abgearbeitet werden. (GoSub ist vielen Programmierern nicht bekannt)
Einfach mal ein bisschen experimentieren, und selbst herausfinden was klappt.
mfg Piet
Const HPfad = "O:\ODE\Data\Produktion ODP\AVOR\allgemein\Laserprogramme - Überarbeitung\"
Dim sPfad As String   'Haupt-Pfad als Constant Pfad festlegen
Sub Wordtabelle_Mehrfach_lesen()
'1. Ordner auflisten
sPfad = HPfad & "Test Makro Word Einrichtblätter Schüler\Original\"  '<== Pfad anpassen
Call WordtabelleEinlesenNeu
'2. Ordner auflisten
sPfad = HPfad & "Test Makro Word Einrichtblätter Schüler\Prüfungen\"  '<== Pfad anpassen
Call WordtabelleEinlesenNeu
End Sub
Sub WordtabelleEinlesenNeu()
Dim appWord As Object
Dim fd As FileDialog
Dim arrDaten
Dim zeichnung
Dim material
Dim bezeichnung
Dim cam
Dim vorrichtung1
Dim vorrichtung2
Dim vorrichtung3
Dim vorrichtung4
Dim strDatei As String
Dim loLetzte As Long
Application.ScreenUpdating = False
Set appWord = CreateObject("Word.Application")
appWord.Visible = True
'2x als GoSub Unterprogramm aufrufen
strDatei = Dir(sPfad & "*.docx") '<== Dateiendung anpassen
GoSub list
strDatei = Dir(sPfad & "*.docm") '<== Dateiendung anpassen
GoSub list
appWord.Quit
Set appWord = Nothing
Set fd = Nothing
Exit Sub
list:  'Dokuments auflisten   (GoSub Unterprogramm)
Do While strDatei <> ""
'fragt nicht immer nach, ob dokument schreibgeschützt geöffnet werden soll
appWord.Documents.Open sPfad & strDatei, , True
' <== Abfrage ob mindestens 2 Tabellen enthalten sind
If appWord.activeDocument.Tables.Count > 1 Then
tabelle = appWord.activeDocument.Tables(1).Cell(1, 3)
zeichnung = appWord.activeDocument.Tables(1).Cell(2, 3)
material = appWord.activeDocument.Tables(1).Cell(3, 3)
bezeichnung = appWord.activeDocument.Tables(1).Cell(4, 3)
cam = appWord.activeDocument.Tables(1).Cell(5, 3)
vorrichtung1 = appWord.activeDocument.Tables(1).Cell(10, 2)
vorrichtung2 = appWord.activeDocument.Tables(1).Cell(11, 2)
vorrichtung3 = appWord.activeDocument.Tables(1).Cell(12, 2)
vorrichtung4 = appWord.activeDocument.Tables(1).Cell(13, 2)
arrDaten = Split(Application.Substitute(appWord.activeDocument.Tables(1), Chr(7), ""), Chr(13) & _
Chr(13))
With ThisWorkbook.Worksheets("Tabelle1").Columns(1)
loLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows. _
Count) + 1
strInhalt = Mid(arrDaten(1), InStr(arrDaten(1), Chr(13)) + 1)
'strInhalt = Mid(strInhalt, 1, InStr(strInhalt, Chr(13)) - 1)
.Cells(loLetzte, 1) = tabelle
.Cells(loLetzte, 2) = zeichnung
.Cells(loLetzte, 3) = material
.Cells(loLetzte, 4) = bezeichnung
.Cells(loLetzte, 5) = cam
.Cells(loLetzte, 6) = vorrichtung1
.Cells(loLetzte, 7) = vorrichtung2
.Cells(loLetzte, 8) = vorrichtung3
.Cells(loLetzte, 9) = vorrichtung4
Columns("A:I").AutoFit
End With
End If
appWord.activeDocument.Close savechanges:=False
strDatei = Dir
Loop
Return
End Sub

Anzeige
AW: Unterordner durchsuchen Excel VBA
04.03.2017 09:07:02
Hajo_Zi
Du hast doch eine Lösung unterbreitet. Überlasse den Fragesteller die Entscheidung ob offen.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige