Registriert seit: 18.08.2016
Version(en): 2010
Hallo liebe Excel-Community,
ich möchte .xlsm-Dateien eines Ordners in einer Auswertungsdatei zusammenfassen. Jede einzelne Datei hat den selben Aufbau mit 2 Tabellenblättern, bei denen ich aber nur die Zellen des ersten Blattes brauche (Tabelle1). Zudem ist jede Datei anders benannt.
Anbei habe ich ein Muster angehängt, dass den Aufbau der Auswertungsdatei darstellt. Die Zellenbezeichnungen stehen für die Zellen, die aus den .xlsm-Dateien kopiert werden sollen.
Ich hoffe ihr könnt mir helfen :19: .
Gruß
Betalo
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Moin!
Zitat:Ich hoffe ihr könnt mir helfen [img]
Dateiupload bitte im Forum! So geht es: Klick mich!
]
Vielleicht, vielleicht auch nicht, schließlich ist Deine Beschreibung mehr als dürftig.
Was hast Du bisher?
Zeig mal Deinen Code.
Oder soll das eine Auftragsarbeit werden?
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Damit das nicht so böse rüberkommt, mal ein Ansatz zum Einstieg:
Alle Dateien eines Ordners (bestimmter Dateityp) nacheinander öffnenGruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 18.08.2016
Version(en): 2010
Hallo Ralf,
also den Code den ich mir zusammengesucht habe, lautet wie folgt:
Code:
Option Explicit
Dim objFileSystemObject As Object
Dim objDateien As Object
Dim objWeitereDateien As Object
Dim objDatei As Object
Dim lngFirstFreeRow As Long
Dim wksAuswertsheet As Worksheet
Sub Auswertung_start()
'Objektverweise zuweisen
Set objFileSystemObject = CreateObject("Scripting.FileSystemObject")
Set objDateien = objFileSystemObject.getfolder("Z:\SWF - Jeder\Vogel\Dienstreise\Übersicht Reisekosten pro Abrechnung")
Set wksAuswertsheet = ThisWorkbook.Sheets("Auswertung")
Call Dateien_auswerten
'Zuweisung wieder aufheben
Set objFileSystemObject = Nothing
Set objDateien = Nothing
Set wksAuswertsheet = Nothing
'Text aus Statusbar löschen
Application.StatusBar = ""
End Sub
Sub Dateien_auswerten()
Application.ScreenUpdating = False
For Each objDatei In objDateien.Files
If Right(objDatei.Name, 5) = ".xlsm" Then
'erste freie Zelle in der Zieldatei in Spalte A ermitteln
lngFirstFreeRow = wksAuswertsheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
'Meldung in Statusbar anzeigen
Application.StatusBar = "Datei """ & objDatei.Name & """ wird ausgelesen!"
DoEvents
'Gefundene Datei unsichtbar öffnen
GetObject (objDatei)
'Wert aus geöffneter Datei aus dem Tabellenblatt 1 aus Zelle _
B8 in die erste freie Zelle in Spalte A übertragen
wksAuswertsheet.Cells(lngFirstFreeRow, 1) = _
Workbooks(objDatei.Name).Sheets(1).Range("B8")
'Wert aus geöffneter Datei aus dem Tabellenblatt 1 aus Zelle _
B10 in die erste freie Zelle in Spalte A übertragen
wksAuswertsheet.Cells(lngFirstFreeRow, 2) = _
Workbooks(objDatei.Name).Sheets(1).Range("B10")
'Wert aus geöffneter Datei aus dem Tabellenblatt 1 aus Zelle _
S7 in die erste freie Zelle in Spalte A übertragen
wksAuswertsheet.Cells(lngFirstFreeRow, 3) = _
Workbooks(objDatei.Name).Sheets(1).Range("S7 ")
'Wert aus geöffneter Datei aus dem Tabellenblatt 1 aus Zelle _
L2 in die erste freie Zelle in Spalte A übertragen
wksAuswertsheet.Cells(lngFirstFreeRow, 5) = _
Workbooks(objDatei.Name).Sheets(1).Range("L2 ")
'Wert aus geöffneter Datei aus dem Tabellenblatt 1 aus Zelle _
D24 in die erste freie Zelle in Spalte A übertragen
wksAuswertsheet.Cells(lngFirstFreeRow, 8) = _
Workbooks(objDatei.Name).Sheets(1).Range("D24")
'Wert aus geöffneter Datei aus dem Tabellenblatt 1 aus Zelle _
B27 in die erste freie Zelle in Spalte A übertragen
wksAuswertsheet.Cells(lngFirstFreeRow, 9) = _
Workbooks(objDatei.Name).Sheets(1).Range("B27 ")
'Wert aus geöffneter Datei aus dem Tabellenblatt 1 aus Zelle _
D22 in die erste freie Zelle in Spalte A übertragen
wksAuswertsheet.Cells(lngFirstFreeRow, 10) = _
Workbooks(objDatei.Name).Sheets(1).Range("D22 ")
'Wert aus geöffneter Datei aus dem Tabellenblatt 1 aus Zelle _
D28 in die erste freie Zelle in Spalte A übertragen
wksAuswertsheet.Cells(lngFirstFreeRow, 14) = _
Workbooks(objDatei.Name).Sheets(1).Range("D28")
'Geöffnete Datei wieder schließen ohne zu speichern
Workbooks(objDatei.Name).Close SaveChanges:=False
End If
Next
'Nächstes Verzeichnis abfragen
For Each objWeitereDateien In objDateien.subfolders
Set objDateien = objWeitereDateien
Call Dateien_auswerten
Next
Nur dann bekomme ich folgende Fehler: Beim 1. Sub ist der Index außerhalb des Bereiches und beim 2. Sub ist die Objektvariable oder With-Blockvariable nicht festgelegt.
Und da ich von VBA nicht viel Ahnung habe, weiß ich nicht wie ich das Programm zum laufen bringe.
Gruß
Nico
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Ich habe es gerade mal auf meine Ordnerstruktur angepasst.
Läuft einwandfrei durch.
Gibt es das Sheet Auswertung in der Makro-Datei?
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 18.08.2016
Version(en): 2010
Das erste Blatt heißt Auswertung.
Hast du ne Idee an was es sonst liegen kann?
Gruß Nico
Registriert seit: 11.04.2014
Version(en): '97 bis 2016; 365
Hallo Nico,
Zitat:Das erste Blatt heißt Auswertung.
Hast du ne Idee an was es sonst liegen kann?
Gruß Nico
Schau mal nach Leerzeichen, die sich eingeschlichen haben können.
" Auswertung" ist nun mal was anderes als " Auswertung " oder "Auswertung " und dgl. mehr.
Registriert seit: 18.08.2016
Version(en): 2010
Hallo,
hat geklappt, danke für den Hinweis.
nur wird mir alles unter der ganzen Tabelle geschrieben. Das ist noch etwas unschön. Wie kann ich es abändern, damit Excel in die erste Zeile der Tabelle schreibt? An sich ist die Zelle leer, aber erkennt Excel vielleicht die Tabellenlinien als Inhalt an?
Gruß Nico
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Willst Du verhindern, dass die erste Zeile,
die keine Überschriften enthält nicht freibleibt, Nico?
Dann musst Du nach dieser Zeile
Code:
lngFirstFreeRow = wksAuswertsheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
folgendes einfügen:
Code:
If lngFirstFreeRow = 2 Then lngFirstFreeRow = 1
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Ah, nach Ansicht Deines Screenshots verstehe ich Dein Problem!
Du solltest die Summenzeile nach ganz oben setzen.
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)