Inhalte aus Excel-Dateien in Sammeldokument kopieren mittels Makro?
Hallo zusammen!
Ich habe die glorreiche Aufgabe bekommen, ein Makro für Excel zu programmieren, habe das aber noch nie zuvor gemacht. Ich habe hier im Forum auch schon einige Beiträge gefunden (z.B.: - https://www.administrator.de/index.php?content=141027, http://www.online-excel.de/excel/singsel.php?f=100, https://www.administrator.de/index.php?content=48278 etc.). Da ich aber wie gesagt ein blutigster Anfänger in dieser Sache bin muss ich hier mein Problem trotzdem nochmal schildern:
Ziel des Makros soll es sein Daten aus ca. 150 unterschiedlichen einzelnen Excel-Sheets (die alle gleich aufgebaut sind) in eine große Sammeldatei zusammenzufassen. Dabei geht es jeweils immer nur um die 2. Zeile der Daten (also ohne Spaltenüberschrift), die aus mehreren Spalten (Name, Vorname, Präferenz 1, Präferenz 2 etc.) besteht. Es sollen also die jeweiligen Daten übernommen werden und untereinander in ein Sammeldoc eingetragen werden. Bisher existieren diese ca. 150 verschiedenen Dateien noch nicht.
Die Dateien werden dann (sie werden im zuge eines Bewerbungsverfahrens per Mail zugeschickt) alle zusammen an einem Ort gespeichert werden (Frage: Muss die "Sammeldatei" und die Quelldateien im gleichen Ordner gespeichert werden oder ist es besser in verschiedenen Ordnern? Wie müssen die Datenblätter benannt werden, damit es möglichst einfach ist, oder dürfen die auch ganz unterschiedlich heissen (was am besten wäre)?). Ich kann also die Rahmenbedingungen teilweise noch gestalten und suche nun nach einem Makro, das relativ einfach ist. Ich hoffe, diejenigen die ich bisher gefunden habe sind zu komplex für mein Problem. Außerdem sagen sie mir nicht viel (Eine kurze Erklärung darüber, wo ich dann den entsprechenden Pfad oder Dateinamen oder sonstiges eintragen muss, wäre also TOP)
Ich hoffe, meine Frage löst jetzt kein mega-Gelächter aus und auch keinen Zorn!
Ich sage schon jetzt ein riesiges Dankeschön!
Liebe Grüße
Eva
Nachtrag: Jetzt habe ich mittlerweile etwas rumprobiert und hab mal das eingegeben:
Dann erscheint mir die Fehlermeldung: "Fehler beim Komplieren: Argument ist nicht optional" (ich denke das hat irgendwas mit dem letzten Befahl zu tun der die Datei speichern soll.
Ach ja, die Vorlage hab ich übrigends von hier: Excel Makro - Daten aus mehreren Tabellen in einer neuen Tabelle zusammenfassen)
Wer kann den helfen, bitte? Was ist falsch?
Grüße
Ich habe die glorreiche Aufgabe bekommen, ein Makro für Excel zu programmieren, habe das aber noch nie zuvor gemacht. Ich habe hier im Forum auch schon einige Beiträge gefunden (z.B.: - https://www.administrator.de/index.php?content=141027, http://www.online-excel.de/excel/singsel.php?f=100, https://www.administrator.de/index.php?content=48278 etc.). Da ich aber wie gesagt ein blutigster Anfänger in dieser Sache bin muss ich hier mein Problem trotzdem nochmal schildern:
Ziel des Makros soll es sein Daten aus ca. 150 unterschiedlichen einzelnen Excel-Sheets (die alle gleich aufgebaut sind) in eine große Sammeldatei zusammenzufassen. Dabei geht es jeweils immer nur um die 2. Zeile der Daten (also ohne Spaltenüberschrift), die aus mehreren Spalten (Name, Vorname, Präferenz 1, Präferenz 2 etc.) besteht. Es sollen also die jeweiligen Daten übernommen werden und untereinander in ein Sammeldoc eingetragen werden. Bisher existieren diese ca. 150 verschiedenen Dateien noch nicht.
Die Dateien werden dann (sie werden im zuge eines Bewerbungsverfahrens per Mail zugeschickt) alle zusammen an einem Ort gespeichert werden (Frage: Muss die "Sammeldatei" und die Quelldateien im gleichen Ordner gespeichert werden oder ist es besser in verschiedenen Ordnern? Wie müssen die Datenblätter benannt werden, damit es möglichst einfach ist, oder dürfen die auch ganz unterschiedlich heissen (was am besten wäre)?). Ich kann also die Rahmenbedingungen teilweise noch gestalten und suche nun nach einem Makro, das relativ einfach ist. Ich hoffe, diejenigen die ich bisher gefunden habe sind zu komplex für mein Problem. Außerdem sagen sie mir nicht viel (Eine kurze Erklärung darüber, wo ich dann den entsprechenden Pfad oder Dateinamen oder sonstiges eintragen muss, wäre also TOP)
Ich hoffe, meine Frage löst jetzt kein mega-Gelächter aus und auch keinen Zorn!
Ich sage schon jetzt ein riesiges Dankeschön!
Liebe Grüße
Eva
Nachtrag: Jetzt habe ich mittlerweile etwas rumprobiert und hab mal das eingegeben:
sQuellpfad = "C:\...\Bewerbungen-Test"
Q = Array("A2", "B2", "C2", "D2", "E2", "F2", "G2", "H2", "I2", "J2", "K2", "L2")
Z = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L")
R = 2
Set wbGes = ActiveWorkbook
Set fso = CreateObject("Scripting.FileSystemObject")
N = UBound(Q)
For Each oFile In fso.GetFolder(sQuellpfad).Files
If LCase(Right(oFile.Name, 4)) = ".xls" Then
Application.Workbooks.Open oFile.Path
For i = 0 To N
wbGes.Worksheets(1).Cells(R, Z(i)).Value = ActiveWorkbook.Worksheets(1).Range(Q(i)).Value
Next
ActiveWorkbook.Close False
R = R + 1
End If
Next
wbGes.Worksheets(1).Activate
wbGes.Save
MsgBox
Dann erscheint mir die Fehlermeldung: "Fehler beim Komplieren: Argument ist nicht optional" (ich denke das hat irgendwas mit dem letzten Befahl zu tun der die Datei speichern soll.
Ach ja, die Vorlage hab ich übrigends von hier: Excel Makro - Daten aus mehreren Tabellen in einer neuen Tabelle zusammenfassen)
Wer kann den helfen, bitte? Was ist falsch?
Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 07.12.2011 um 19:30:22 Uhr
Codeformatierung nachgezogen.
Content-ID: 177406
Url: https://administrator.de/contentid/177406
Ausgedruckt am: 24.11.2024 um 21:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo EvaM26 und willkommen im Forum!
Wenn Du ohnehin zusammenhängende Zellen übernehmen willst, lässt sich das etwas vereinfachen:
Die Quelldateien (Dateinamen egal, Dateityp wie in Zeile 15 des Makros) sollten nicht im gleichen Ordner wie die Zieldatei liegen. Daten werden immer nur aus der angegebenen Zeile (siehe Makro-Zeile 4) im ersten Blatt der Quelldatei gelesen.
Grüße
bastla
Wenn Du ohnehin zusammenhängende Zellen übernehmen willst, lässt sich das etwas vereinfachen:
Sub Sammeln()
sQuellpfad = "C:\...\Bewerbungen-Test"
QZeile = 2 'Zeile in Quelldatei
QSpalten = 12 'Spaltenanzahl
QSpalteAb = "A" ' ab dieser Spalte insgesamt "QSpalten" Spaltenwerte übernehmen
ZZeile = 2 'erste Zeile in Zieldatei
ZSpalteAb = "A" 'erste Spalte in Zieldatei
Set wbGes = ActiveWorkbook
Set fso = CreateObject("Scripting.FileSystemObject")
For Each oFile In fso.GetFolder(sQuellpfad).Files
If LCase(Right(oFile.Name, 4)) = ".xls" Then 'nur ".xls"-Dateien verarbeiten; bei ".xlsx" natürlich die letzten 5 Zeichen vergleichen
Application.Workbooks.Open oFile.Path 'Quelldatei öffnen
'Zellen lt Vorgabe aus Quelldatei lesen und in aktuelle Zeile der Zieldatei schreiben
wbGes.Worksheets(1).Cells(ZZeile, ZSpalteAb).Resize(1, QSpalten).Value = ActiveWorkbook.Worksheets(1).Cells(QZeile, QSpalteAb).Resize(1, QSpalten).Value
ActiveWorkbook.Close False 'Quelldatei schließen
ZZeile = ZZeile + 1 'Zeilennummer Zieldatei erhöhen
End If
Next
wbGes.Save 'Zieldatei speichern
End Sub
Grüße
bastla