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

VBA Hilfe | Liste aus mehreren Dateien

VBA Hilfe | Liste aus mehreren Dateien
02.09.2017 12:55:17
Felix
Hallo zusammen,
ich stehe vor einem Problem, welches ich alleine aufgrund meiner nicht wirklich vorhandenen VBA Kenntnisse nicht bewätligen kann.
Vieleicht kann mir ja irgendwer dabei weiterhelfen oder mir einen Tipp geben.
Folgendes Problem:
Ich habe einen Ordner mit mehreren Excel Dateien. Jede dieser Excel Dateien ist ein immer gleich aufgebautes Formular. Aus diesen Formularen möchte ich gerne die Zellen (C;3) und (E; 51) auslesen und in eine eigene Liste eintragen lassen.
Wie mache ich das am besten? Ich habe hier schon ein bisschen gestöbert und einiges and Code gefunden, was meinem Problem ähnlich ist, aber doch nicht ganz das gleiche.
Daraus habe ich mal folgendes Gebilde gebaut:
Sub Datenzusammenfassung()
Dim dat
Dim ordner
Dim datein
Dim fso
Dim arr(65536, 3)
Dim L As Long
Dim Z As Long
Dim WB
Dim dsplalert As Boolean
Dim cal
Dim scrup As Boolean
Dim ev As Boolean
With Application
dsplalert = .DisplayAlerts
cal = .Calculation
scrup = .ScreenUpdating
ev = .EnableEvents
.DisplayAlerts = False
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With
arr(L, 0) = "Testbereich1"
arr(L, 1) = "Testbereich2"
arr(L, 2) = "Testbereich3"
L = L + 1
Set dat = Application.FileDialog(msoFileDialogFolderPicker)
With dat
.Title = "Verzeichniswahl"
.InitialFileName = "C:\"
nochmal:
If .Show = -1 Then
ordner = .SelectedItems(1)
Else:
If MsgBox("Ordner auswählen vergessen." & vbCrLf & "Nochmal ?", vbYesNo) = vbYes Then
GoTo nochmal
Else:
GoTo raus
End If
End If
End With
Set fso = CreateObject("Scripting.filesystemobject")
Set datein = fso.getfolder(ordner)
For Each WB In datein.Files
If WB.Name Like "*.xlsx" Then
Workbooks.Open WB
For Z = 3 To Sheets(1).Range("a65536").End(xlUp).Row
arr(L, 0) = Sheets(1).Cells(Z, 3).Text
Next
For k = 51 To Sheets(1).Range("a65536").End(xlUp).Row
arr(L, 1) = Sheets(1).Cells(k, 5).Text
L = L + 1
Next
Workbooks(WB.Name).Close False
End If
Next
Range("A:C") = arr
raus:
With Application
.DisplayAlerts = dsplalert
.Calculation = cal
.ScreenUpdating = scrup
.EnableEvents = ev
End With
End Sub

Allerdings werden lediglich die Werte aus der jeweiligen Zelle (E;51) in die Tabelle eingetragen und nicht die aus (C;3).
Wie müsste ich meinen Code anpassen, dass ich mein Problem lösen lässt? und kann ich es eventuell noch so einrichten, dass der Dateiname des jeweiligen Formulars immer in die erste Spalte eingefüllt wird?
Vielen Dank für alle Vorschläge schon mal im Voraus.
Beste Grüße,
Felix

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Hilfe | Liste aus mehreren Dateien
02.09.2017 13:48:31
Robert
Hallo Felix,
die Werte aus der Zelle C3 werden immer überschrieben weil in der entsprechenden For-Schleife die Variable L nicht weiter gezählt wird. Ergänze die Schleife wie folgt:
For Z = 3 To Sheets(1).Range("a65536").End(xlUp).Row
   arr(L, 0) = Sheets(1).Cells(Z, 3).Text
   L = L + 1
Next

Gruß
Robert
AW: VBA Hilfe | Liste aus mehreren Dateien
02.09.2017 17:19:46
Robert
Hallo Felix,
ich habe mir Dein Problem noch mal angeschaut. Möchtest Du nur die Zellen C3 und E51 aus dem ersten Tabellenblatt der einzelnen Dateien haben? In Deinem aktuellen Code werden die Zellinhalte von Spalte C und E (ab Zeile 3 bzw. 51) bis zur letzten in Spalte A befüllten Zeile eingefügt. Wenn z. B. A99 die letzte befüllte Zelle in der Spalte A ist, werden die Inhalte von C3 bis C99 und von E51 bis E99 geliefert.
Wenn allerdings die letzte befüllte Zelle der Spalte A die Zelle A2 sein sollte, wird überhaupt nichts geliefert.
Unter der Vorgabe, dass nur der Inhalt von C3 und E51 der ersten Tabelle in den einzelnen Dateien genommen werden sollen, liefert folgender Code die entsprechende Liste, in der ersten Spalte wird der Dateinamegelistet.
Sub Datenzusammenfassung()
Dim dat
Dim ordner
Dim datein
Dim fso
Dim arr(65536, 3)
Dim WB
Dim dsplalert As Boolean
Dim cal
Dim scrup As Boolean
Dim ev As Boolean
Dim L As Long
With Application
dsplalert = .DisplayAlerts
cal = .Calculation
scrup = .ScreenUpdating
ev = .EnableEvents
.DisplayAlerts = False
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With
arr(L, 0) = "Testbereich1"
arr(L, 1) = "Testbereich2"
arr(L, 2) = "Testbereich3"
L = L + 1
Set dat = Application.FileDialog(msoFileDialogFolderPicker)
With dat
.Title = "Verzeichniswahl"
.InitialFileName = "C:\"
nochmal:
If .Show = -1 Then
ordner = .SelectedItems(1)
Else:
If MsgBox("Ordner auswählen vergessen." & vbCrLf & "Nochmal ?", vbYesNo) = vbYes Then
GoTo nochmal
Else:
GoTo raus
End If
End If
End With
Set fso = CreateObject("Scripting.filesystemobject")
Set datein = fso.getfolder(ordner)
Dim x
For Each WB In datein.Files
If WB.Name Like "*.xlsx" Then
Workbooks.Open WB
arr(L, 0) = WB.Name
arr(L, 1) = Sheets(1).Range("C3").Text
arr(L, 2) = Sheets(1).Range("E51").Text
L = L + 1
Workbooks(WB.Name).Close False
End If
Next
Range("A:C") = arr
raus:
With Application
.DisplayAlerts = dsplalert
.Calculation = cal
.ScreenUpdating = scrup
.EnableEvents = ev
End With
End Sub

Gruß
Robert
Anzeige
AW: VBA Hilfe | Liste aus mehreren Dateien
05.09.2017 12:28:12
Felix
Hallo Robert,
Vielen Dank für deine schnellen Antworten und ausführliche Erklärungen.
Entschuldigung, dass ich erst jetzt antworten kann.
Wobei alles was ich sagen möchte auch nur "Vielen, Vielen Dank" ist.
Genau das, was mir dein Code liefert ist das, was ich erreichen wollte.
Endlich keine schlaflosen Nächte mehr :)
Vielen Dank und Beste Grüße,
Felix

222 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige