Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1468to1472
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 bei Datei auslesen einbeziehen

Unterordner bei Datei auslesen einbeziehen
11.01.2016 18:08:33
Vicky
Hallo zusammen,
ich habe ein Makro, welches Daten aus unterschiedlichen (gleich aufgebauten) Dateien auslesen soll.
Bsp. aus Reiter 1 werden die Zellen A1 und B5 ausgelesen, aus Reiter 2 C7 usw.
Das alles wird dann in eine Gesamtliste geschrieben, in der jede Zeile 1 Datei entspricht.
Hierbei werden aktuell immer nur die Dateien in einem bestimmten Ordner ausgelesen. Jetzt möchte ich das Makro gerne so anpassen, dass alle Dateien die in Unterordnern dieses Ordners liegen ebenfalls ausgelesen werden.
Ich habe auch schon im Internet gesucht, aber nichts gefunden, was mir weiter geholfen hat. Wisst ihr hier eine Lösung?
Aktuell ist das Makro so:

Option Explicit
Sub ExcelDateienAuswerten()
Application.ScreenUpdating = False
Dim strDateiname As String
Dim strPfad      As String
Dim lngZeile     As Long
'Pfadangabe, in dem die zu lesenden Excel-Datei (*.xls) liegen
strPfad = "S:\Dateipfad\"
'Den 1. Dateinamen holen
strDateiname = Dir(strPfad & "*.xls")
'Startzeile festlegen
lngZeile = 2
'Solange ein Dateiname gelesen wird
Do While Not strDateiname = ""
'Datei verarbeiten
Call TabVerarb(strPfad & strDateiname, lngZeile)
'nächsten Dateinamen holen
strDateiname = Dir()
'Zeilenzähler erhöhen
lngZeile = lngZeile + 1
Loop
End Sub
Sub TabVerarb(strPfad As String, lngZeile As Long)
Dim strMeSH As String
Dim strDatei As String
Dim strSH As String
'Dateinamen extrahieren
strDatei = Split(strPfad, "\")(UBound(Split(strPfad, "\")))
'Eigenen Namen merken
strMeSH = ActiveWorkbook.Name
'Datei öffnen
Workbooks.Open Filename:=strPfad, Password:="passwort"
If Worksheets("4. Reiter").Range("J7") Like "Außertarifliches GG:" Then
With Workbooks(strMeSH)
'Dateinamen und auszuwertenden Zellen übertragen, sind tatsächlich ca. 30 Felder, die  _
ausgelesen werden
.Sheets("ID").Cells(lngZeile, 1) = strDatei
.Sheets("ID").Cells(lngZeile, 2) = Workbooks(strDatei).Sheets("4. Reiter").Range("F6"). _
Value
.Sheets("ID").Cells(lngZeile, 3) = Workbooks(strDatei).Sheets("4. Reiter").Range("D6"). _
Value
.Sheets("ID").Cells(lngZeile, 4) = Workbooks(strDatei).Sheets("4. Reiter").Range("D7"). _
Value    End With
Else
With Workbooks(strMeSH)
'Dateinamen und auszuwertenden Zellen übertragen, sind tatsächlich ca. 30 Felder, die  _
ausgelesen werden
.Sheets("ID").Cells(lngZeile, 1) = strDatei
.Sheets("ID").Cells(lngZeile, 2) = Workbooks(strDatei).Sheets("4. Reiter").Range("F6"). _
Value
.Sheets("ID").Cells(lngZeile, 3) = Workbooks(strDatei).Sheets("4. Reiter").Range("D6"). _
Value
.Sheets("ID").Cells(lngZeile, 4) = Workbooks(strDatei).Sheets("4. Reiter").Range("D7"). _
Value
End With
End If
'Quelldatei schließen
Workbooks(strDatei).Saved = True
Workbooks(strDatei).Close
End Sub
Danke schon mal für eure Ideen!
Viele Grüße
Vicky

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Unterordner bei Datei auslesen einbeziehen
12.01.2016 13:30:35
Matthias
Hallo Vicky! Ich suche mir meine Ordner meist mit folgendem Code. Dieser durchläuft aber dem Startordner alle Ordner darunter und listet die Dateien (derzeit xls kann man aber auch anpassen und nach Dateinamenbestandteilen filtern) in einem Datenfeld auf. Anschließend kann man die Daten durchgehen. Den Pfad musst du noch eintragen und dann deine Function integrieren (am besten oben und nicht extra als Funktion).
Ich habe deine Bearbeitung noch nicht eingebaut! Aber Teile deiner Funktion könnten mittig der SUB eingefügt werden. Dort wird jede Datei geöffnet und wieder geschlossen. Bei dem Kommentar 'hier jetzt den Code einfügen, was mit der Datei gemacht werden soll , dann deinen Teil anpassen. Viele Grüße

Dim dateien()
Option Explicit
Sub DateienLesen()
Dim DateiName As String
Dim quelle As String
Dim i As Long
Dim Dateialt As String
Dim Namekurz As String
Dim suche As Variant
Application.ScreenUpdating = False
Dateialt = ThisWorkbook.Name
ReDim dateien(0)
dateien(0) = 0
quelle = "    " 'Pfad eintragen
If Right(quelle, 1) = "\" Then quelle = Left(quelle, Len(quelle) - 1)
If Dir(quelle & "\") = "" Then
MsgBox "Der Pfad wurde nicht gefunden!"
End
End If
Call txtsuchen(quelle)
If dateien(0) = 0 Then
MsgBox "Keine Dateien gefunden!"
Else
'Daten auslesen
For i = 1 To dateien(0)
DateiName = dateien(i)
Namekurz = Right(DateiName, InStr(1, StrReverse(DateiName), "\") - 1)
'die Mappen aufmachen
Workbooks.Open DateiName
'hier jetzt den Code einfügen, was mit der Datei gemacht werden soll
Workbooks(Dateialt).Activate
Workbooks(Namekurz).Close savechanges:=False
Next i
End If
Application.ScreenUpdating = True
End Sub
Function txtsuchen(quelle As String)
Dim suche
Dim ordner()
Dim i As Long
ReDim ordner(0)
ordner(0) = 0
ChDrive (Left(quelle & "\", 3))
ChDir (quelle)
'Ordner durchschauen
suche = Dir(quelle & "\*.*", vbDirectory)
Do Until suche = ""
'Normale Dateien rausfiltern
If (GetAttr(quelle & "\" & suche) = 16) Then
'die hier ankommen, sind Ordner, extra speichern
ordner(0) = ordner(0) + 1
ReDim Preserve ordner(ordner(0))
ordner(ordner(0)) = suche
Else
If Right(suche, 4) = ".xls" Then
dateien(0) = dateien(0) + 1
ReDim Preserve dateien(dateien(0))
dateien(dateien(0)) = quelle & "\" & suche
End If
End If
suche = Dir()
Loop
'jetzt durch die Ordner gehen
For i = 1 To UBound(ordner)
If Dir(ordner(i), vbNormal) = "" And Left(ordner(i), 1)  "." Then
Call txtsuchen(quelle & "\" & ordner(i))
ChDir (quelle)
End If
Next
End Function

Anzeige
AW: Unterordner bei Datei auslesen einbeziehen
13.01.2016 15:44:36
Vicky
Hallo Mathias,
danke dir für deine Hilfestellung!
Ich habe mal versucht, mein Auslese-Makro über die Call-Function in deinen Code einzufügen.
Ich glaube aber, ich verstehe zu wenig von VBA, dass dies so richtig hinhaut :-(
Ich bekomme immer die Meldung "keine Dateien gefunden", was denke ich mal mit der txtsuchen-Funktion zusammenhängt, aber ich komme nicht selber drauf, woran dies liegen könnte. Ich habe in dem Test-Ordner zwei Dateien auf der obersten Ebene angelegt und zwei Dateien in einem Unterordner. Kann es damit zusammenhängen, dass die Dateien beim Öffnen mit einem Passwort geschützt sind?
Ich hänge die aktuelle Datei mit dem Makro mal an: https://www.herber.de/bbs/user/102752.xlsm
Noch mal vielen Dank.
Grüße
Vicky

Anzeige
AW: Unterordner bei Datei auslesen einbeziehen
13.01.2016 20:28:17
Matthias
Hallo! Habe noch das gute alte Excel 2003. :-D Kann daher mit deiner Datei nicht viel anfangen. Habe aber mal deinen Code in meinen einfließen lassen. So sollte es eigentlich klappen. Außer es läuft auf einem Server, da kämpfe ich grad auch mit einem anderen Nutzer. Probieres mal aus. Wenn keine Datei gefunden kommt, hat er zwar gesucht aber keine Dateien gefunden. Da du eine xlsm Datei hochgeladen hast, habe ich mal auf Dateien mit der Endung xlsx umgestellt. Falls du andere Dateien suchst das in der Function anpassen. Viele Grüße

Dim dateien()
Option Explicit
Sub DateienLesen()
Dim DateiName As String
Dim quelle As String
Dim i As Long
Dim strMeSH As String
Dim strDatei As String
Dim suche As Variant
Dim lngZeile As Long
Application.ScreenUpdating = False
strMeSH = ThisWorkbook.Name
'Startzeile festlegen
lngZeile = 2
ReDim dateien(0)
dateien(0) = 0
quelle = "S:\Dateipfad\" 'Pfad eintragen
If Right(quelle, 1) = "\" Then quelle = Left(quelle, Len(quelle) - 1)
If Dir(quelle & "\") = "" Then
MsgBox "Der Pfad wurde nicht gefunden!"
End
End If
Call txtsuchen(quelle)
If dateien(0) = 0 Then
MsgBox "Keine Dateien gefunden!"
Else
'Daten auslesen
For i = 1 To dateien(0)
DateiName = dateien(i)
strDatei = Right(DateiName, InStr(1, StrReverse(DateiName), "\") - 1)
'die Mappen aufmachen
Workbooks.Open DateiName, Password:="passwort"
'hier jetzt den Code einfügen, was mit der Datei gemacht werden soll
If Worksheets("4. Reiter").Range("J7") Like "Außertarifliches GG:" Then
With Workbooks(strMeSH)
'Dateinamen und auszuwertenden Zellen übertragen, sind tatsächlich ca. 30 Felder, die  _
_
ausgelesen werden
.Sheets("ID").Cells(lngZeile, 1) = strDatei
.Sheets("ID").Cells(lngZeile, 2) = Workbooks(strDatei).Sheets("4. Reiter").Range("F6") _
. _
Value
.Sheets("ID").Cells(lngZeile, 3) = Workbooks(strDatei).Sheets("4. Reiter").Range("D6") _
. _
Value
.Sheets("ID").Cells(lngZeile, 4) = Workbooks(strDatei).Sheets("4. Reiter").Range("D7") _
. _
Value
End With
Else
With Workbooks(strMeSH)
'Dateinamen und auszuwertenden Zellen übertragen, sind tatsächlich ca. 30 Felder, die  _
_
ausgelesen werden
.Sheets("ID").Cells(lngZeile, 1) = strDatei
.Sheets("ID").Cells(lngZeile, 2) = Workbooks(strDatei).Sheets("4. Reiter").Range("F6") _
. _
Value
.Sheets("ID").Cells(lngZeile, 3) = Workbooks(strDatei).Sheets("4. Reiter").Range("D6") _
. _
Value
.Sheets("ID").Cells(lngZeile, 4) = Workbooks(strDatei).Sheets("4. Reiter").Range("D7") _
. _
Value
End With
End If
Workbooks(strMeSH).Activate
Workbooks(strDatei).Close savechanges:=False
lngZeile = lngZeile + 1
Next i
End If
Application.ScreenUpdating = True
End Sub
Function txtsuchen(quelle As String)
Dim suche
Dim ordner()
Dim i As Long
ReDim ordner(0)
ordner(0) = 0
ChDrive (Left(quelle & "\", 3))
ChDir (quelle)
'Ordner durchschauen
suche = Dir(quelle & "\*.*", vbDirectory)
Do Until suche = ""
'Normale Dateien rausfiltern
If (GetAttr(quelle & "\" & suche) = 16) Then
'die hier ankommen, sind Ordner, extra speichern
ordner(0) = ordner(0) + 1
ReDim Preserve ordner(ordner(0))
ordner(ordner(0)) = suche
Else
If Right(suche, 5) = ".xlsx" Then
dateien(0) = dateien(0) + 1
ReDim Preserve dateien(dateien(0))
dateien(dateien(0)) = quelle & "\" & suche
End If
End If
suche = Dir()
Loop
'jetzt durch die Ordner gehen
For i = 1 To UBound(ordner)
If Dir(ordner(i), vbNormal) = "" And Left(ordner(i), 1)  "." Then
Call txtsuchen(quelle & "\" & ordner(i))
ChDir (quelle)
End If
Next
End Function

Anzeige
AW: Unterordner bei Datei auslesen einbeziehen
14.01.2016 12:06:48
Vicky
Hallo Matthias,
ich hab grad einen kleinen Freudentanz aufgeführt, es funktioniert jetzt perfekt und spart mir sooo viel Arbeit und Zeit.
Vielen, vielen Dank für deine Hilfe!!!
Gruß
Vicky

183 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige