Sub alle_Dateien_Verzeichnis()
Dim dlg As FileDialog
Dim StatusCalc&
Dim varItem, Ext$, Datei$
Dim wkbNeu As Workbook, wkbQuelle As Workbook
Dim wksNeu As Worksheet, wksQuelle As Worksheet, LR&
On Error GoTo Fehler
'Makrobremsen lösen
With Application
.ScreenUpdating = False
.EnableEvents = False
StatusCalc = .Calculation
.Calculation = xlCalculationManual
End With
Set dlg = Application.FileDialog(msoFileDialogFolderPicker) 'Verzeichnis wählen
If dlg.Show = True Then
'Neue Mappe Anlegen
Set wkbNeu = Application.Workbooks.Add(Template:=xlWBATWorksheet)
Set wksNeu = wkbNeu.Worksheets(1)
With wksNeu
'Spaltentitel
.Cells(1, 1) = "Verzeichnis:"
.Cells(3, 1) = "Dateiname"
.Cells(3, 2) = "Wert 1"
.Cells(3, 3) = "Wert 2"
.Cells(3, 4) = "Wert 3"
'ggf. noch Formate für Spalten vorgeben
End With
For Each varItem In dlg.SelectedItems 'Die Abfrage für den selektierten Eintrag
Ext = "*.xls*" 'Dateiextension ggf. anpassen
Datei = Dir(varItem & "\" & Ext)
Do While Datei <> ""
If LCase(Datei) = LCase(ThisWorkbook.Name) Then GoTo NextDatei
Set wkbQuelle = Workbooks.Open(Filename:=varItem & "\" & Datei, _
ReadOnly:=True, UpdateLinks:=False)
' Set wksQuelle = wkbQuelle.Worksheets(1) '1. Tabelle aus der gelesen wird
Set wksQuelle = wkbQuelle.Sheets("Tabelle1") 'Tabelle aus der gelesen wird
With wksNeu
LR = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 'letzte Zeile der Spalte+1
.Cells(LR, 1) = wkbQuelle.Name
'Werte aus Zellen auslesen
.Cells(LR, 2) = wksQuelle.Range("A1") 'hier hinten sind die Zielzellen
.Cells(LR, 3) = wksQuelle.Range("B2") '
.Cells(LR, 4) = wksQuelle.Range("B3") '
'u.s.w
End With
wkbQuelle.Close SaveChanges:=False
Set wkbQuelle = Nothing
NextDatei:
Datei = Dir() 'wählt die nächste Datei
Loop
wksNeu.Cells(1, 2) = varItem
Next
With wksNeu
.Columns.AutoFit
End With
End If
Fehler:
With Err
Select Case .Number
Case 0 'alles OK
Case 1004
If Not wkbQuelle Is Nothing Then wkbQuelle.Close SaveChanges:=False
Resume NextDatei
Case -2147221080 'Automatisierungsfehler
If Not wkbQuelle Is Nothing Then wkbQuelle.Close SaveChanges:=False
Resume NextDatei
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, vbOKOnly, "Fehler-Makro"
End Select
End With
'Makrobremsen zurücksetzen
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = StatusCalc
End With
End Sub
Sub alle_Dateien_Verzeichnis()
Dim dlg As FileDialog
Dim StatusCalc&
Dim varItem, Ext$, Datei$
Dim wkbNeu As Workbook, wkbQuelle As Workbook
Dim wksNeu As Worksheet, wksQuelle As Worksheet, LR&
On Error GoTo Fehler
'Makrobremsen lösen
With Application
.ScreenUpdating = False
.EnableEvents = False
StatusCalc = .Calculation
.Calculation = xlCalculationManual
End With
Set dlg = Application.FileDialog(msoFileDialogFolderPicker) 'Verzeichnis wählen
If dlg.Show = True Then
'Neue Mappe Anlegen
Set wkbNeu = Application.Workbooks.Add(Template:=xlWBATWorksheet)
Set wksNeu = wkbNeu.Worksheets(1)
With wksNeu
'Spaltentitel
.Cells(1, 1) = "Verzeichnis:"
.Cells(3, 1) = "Dateiname"
.Cells(3, 2) = "Wert 1"
.Cells(3, 3) = "Wert 2"
.Cells(3, 4) = "Wert 3"
'ggf. noch Formate für Spalten vorgeben
End With
For Each varItem In dlg.SelectedItems 'Die Abfrage für den selektierten Eintrag
Ext = "*.xls*" 'Dateiextension ggf. anpassen
Datei = Dir(varItem & "\" & Ext)
Do While Datei <> ""
If LCase(Datei) = LCase(ThisWorkbook.Name) Then GoTo NextDatei
Set wkbQuelle = Workbooks.Open(Filename:=varItem & "\" & Datei, _
ReadOnly:=True, UpdateLinks:=False)
' Set wksQuelle = wkbQuelle.Worksheets(1) '1. Tabelle aus der gelesen wird
Set wksQuelle = wkbQuelle.Sheets("Tabelle1") 'Tabelle aus der gelesen wird
With wksNeu
LR = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 'letzte Zeile der Spalte+1
.Cells(LR, 1) = wkbQuelle.Name
'Werte aus Zellen auslesen
.Cells(LR, 2) = wksQuelle.Range("A1") 'hier hinten sind die Zielzellen
.Cells(LR, 3) = wksQuelle.Range("B2") '
.Cells(LR, 4) = wksQuelle.Range("B3") '
'u.s.w
End With
wkbQuelle.Close SaveChanges:=False
Set wkbQuelle = Nothing
NextDatei:
Datei = Dir() 'wählt die nächste Datei
Loop
wksNeu.Cells(1, 2) = varItem
Next
With wksNeu
.Columns.AutoFit
End With
End If
Fehler:
With Err
Select Case .Number
Case 0 'alles OK
Case 1004
If Not wkbQuelle Is Nothing Then wkbQuelle.Close SaveChanges:=False
Resume NextDatei
Case -2147221080 'Automatisierungsfehler
If Not wkbQuelle Is Nothing Then wkbQuelle.Close SaveChanges:=False
Resume NextDatei
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, vbOKOnly, "Fehler-Makro"
End Select
End With
'Makrobremsen zurücksetzen
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = StatusCalc
End With
End Sub