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

Makro mehrere Tabellen zusammenfügen

Makro mehrere Tabellen zusammenfügen
10.09.2013 09:52:39
Ina
Hallo zusammen,
ich bin keine Makro Expertin, deswegen benoetige ich Eure Hilfe.
Es gibt mehrere Excel Dateien, in jeder Datei ein Bestimmter Arbeitsblatt "Summary".
Die Namen von den Dateien koennen von Woche zur Woche geaendert werden. Der Name von diesem Arbeitsblatt bleibt Kostant in jeder Datei, hat aber keinen bestimmten Platz (muss nicht unbedingt das erste Arbeitsblatt sein)
Also wenn Makro startet, soll fragen "bitte die Dateien auswaehlen" , damit kann man bestimmen wieviele Dateien zusammengefuehrt werden sollen.
Die Summaries erhalten auch Formeln und Verknuepfungen zu den anderen Arbeitsblaettern, deswegen es ist wichtig, dass in die Zusammenfassung Inhalte eingefuegt werden sollen, damit die Ergebnisse nicht geaendert werden. Die Anzahl von Spalten ist gleich von A bis S, die Anzahl von Zeilen ist in jeder Summary unterschiedlich.
Ich haette gerne auch die Formatierung aus den originalen Summaries uebernommen.
Nach jeder Summary in der Zusammenfassung benoetige ich einen Seitenumbruch, damit die Summaries spaeter problemlos einzeln ausgedruckt werden koennen.
Es waere ganz toll wenn mir Jemand helfen koennte. Ich benutze Makros gerne, kann die leider selbst nicht schreiben. Ich bedanke mich im Voraus!

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro mehrere Tabellen zusammenfügen
10.09.2013 11:59:10
Bastian
Hallo Ina,
hier ein Makro, welches schon ein paar Teilaufgaben erfüllt:
Du kannst mehrere Dateien auswählen. Diese werden nacheinander geöffnet, und die Namen der Arbeitsblätter werden durchsucht. Du musst an der markierten Stelle im Code noch die entsprechenden Anweisungen für das Kopieren der Daten schreiben (bin gleich weg, deshalb komm ich nicht mehr dazu).
Aber ich glaube, dass Du damit schon eine gute Ausgangslage hast (vielleicht kann Dir auch jemand hier weiterhelfen).
Gruß, Bastian

Option Explicit
Sub DateienAuswaehlen()
Dim strVerz() As String
Dim objSheet As Object
Dim objSheets As Object
Dim strSheet As String
Dim lngCount As Long, lngCount2 As Long
Dim objZiel As Object, objQuelle As Object
Set objZiel = ThisWorkbook
objZiel.Sheets("Summary").Range("A:A").ClearContents
With Application.FileDialog(msoFileDialogFilePicker)  'Dateien auswählen
.AllowMultiSelect = True
.Filters.Clear
.InitialFileName = "C:\"                      'Hier steht das Default- Verzeichnis
.Title = "Dateiauswahl"
.ButtonName = "Auswahl..."
.InitialView = msoFileDialogViewDetails
.Show
For lngCount = 1 To .SelectedItems.Count
ReDim Preserve strVerz(lngCount)
strVerz(lngCount) = .SelectedItems(lngCount)
Next lngCount
End With
For lngCount2 = 1 To lngCount - 1
Application.Workbooks.Open (strVerz(lngCount2))
Set objQuelle = ActiveWorkbook
Set objSheets = objQuelle.Worksheets
For Each objSheet In objSheets
If objSheet.Name = "Summary" Then
'Hier den Code zum Kopieren einfügen!!
End If
Next objSheet
objQuelle.Close
Next lngCount2
End Sub

Anzeige
AW: Makro mehrere Tabellen zusammenfügen
10.09.2013 13:03:11
Ina
Hallo Bastian,
ich danke Dir vielmals und wuensche noch einen schoenen Tag!
Kann mir noch Jemand weiter helfen bitte....

AW: Makro mehrere Tabellen zusammenfügen
12.09.2013 10:07:59
Bastian
Hallo Ina,
hier der komplette Code. Probier mal aus, ob das Deinen Vorstellungen entspricht.
Option Explicit
Sub DateienAuswaehlen()
Dim strVerz() As String  'Array- Variable für Pfade der ausgewählten Dateien
Dim objSheet As Object   'Tabellenblatt der Quell-Datei
Dim objSheets As Object  'Alle Tabellenblaetter der Quell-Datei
Dim lngCount As Long, lngCount2 As Long  'Zaehler fuer die Schleifen
Dim lngLZeileZiel As Long, lngLZeileQuelle As Long  'Letzte Zeile mit Inhalt
Dim objZiel As Object, objQuelle As Object  'Variablen für Ziel-Tabelle und Quell-Datei
Set objZiel = ThisWorkbook.Sheets("Summary")    'Zieltabelle zuweisen
objZiel.Range("A:S").Clear                      'Inhalte in Zieltabelle loeschen
'Dateidialogfeld öffnen, über das der Benutzer eine oder mehrere Dateien auswählen kann
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = True
.Filters.Clear
.InitialFileName = "C:\"   'Hier steht das Default- Verzeichnis
.Title = "Dateiauswahl"
.ButtonName = "Auswahl..."
.InitialView = msoFileDialogViewDetails
.Show
'Die Pfade der ausgewählten Dateien in einer Array-Variablen ablegen
For lngCount = 1 To .SelectedItems.Count
ReDim Preserve strVerz(lngCount)
strVerz(lngCount) = .SelectedItems(lngCount)
Next lngCount
End With
'Die ausgewählten Dateien in einer Schleife nacheinander öffnen
For lngCount2 = 1 To lngCount - 1
Application.Workbooks.Open (strVerz(lngCount2)) 'Quell- Datei öffnen
Set objQuelle = ActiveWorkbook
Set objSheets = objQuelle.Worksheets
'In einer zweiten Schleife nach einem Tabellenblatt "Summary" suchen
For Each objSheet In objSheets
If objSheet.Name = "Summary" Then
'Letzte Zeile mit einem Eintrag in der Quell-Tabelle und der Ziel-Tabelle  _
herausfinden
If objZiel.Range("A1") = "" Then
lngLZeileZiel = 1
Else
lngLZeileZiel = objZiel.Cells.Find(What:="*", SearchOrder:=xlByRows,  _
SearchDirection:=xlPrevious).Row + 1
End If
lngLZeileQuelle = objSheet.Cells.Find(What:="*", SearchOrder:=xlByRows,  _
SearchDirection:=xlPrevious).Row
'Daten kopieren und in die Zieltabelle einfügen
objSheet.Cells(1, 1).Resize(lngLZeileQuelle, 19).Copy _
Destination:=objZiel.Cells(lngLZeileZiel, 1).Resize(lngLZeileQuelle, 19)
'Seitenumbruch einfügen
objZiel.Rows(lngLZeileZiel + lngLZeileQuelle).PageBreak = xlPageBreakManual
End If
Next objSheet
objQuelle.Close  'Quell- Datei schließen
Next lngCount2
End Sub
Gruß, Bastian

Anzeige
Korrektur ...
12.09.2013 10:25:00
Bastian
...es sollten ja nur Werte und Formatierungen übertragen werden und keine Formeln.
Option Explicit
Sub DateienAuswaehlen()
Dim strVerz() As String  'Array- Variable für Pfade der ausgewählten Dateien
Dim objSheet As Object   'Tabellenblatt der Quell-Datei
Dim objSheets As Object  'Alle Tabellenblaetter der Quell-Datei
Dim lngCount As Long, lngCount2 As Long  'Zaehler fuer die Schleifen
Dim lngLZeileZiel As Long, lngLZeileQuelle As Long  'Letzte Zeile mit Inhalt
Dim objZiel As Object, objQuelle As Object  'Variablen für Ziel-Tabelle und Quell-Datei
Set objZiel = ThisWorkbook.Sheets("Summary")    'Zieltabelle zuweisen
objZiel.Range("A:S").Clear                      'Inhalte in Zieltabelle loeschen
'Dateidialogfeld öffnen, über das der Benutzer eine oder mehrere Dateien auswählen kann
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = True
.Filters.Clear
.InitialFileName = "C:\"   'Hier steht das Default- Verzeichnis
.Title = "Dateiauswahl"
.ButtonName = "Auswahl..."
.InitialView = msoFileDialogViewDetails
.Show
'Die Pfade der ausgewählten Dateien in einer Array-Variablen ablegen
For lngCount = 1 To .SelectedItems.Count
ReDim Preserve strVerz(lngCount)
strVerz(lngCount) = .SelectedItems(lngCount)
Next lngCount
End With
'Die ausgewählten Dateien in einer Schleife nacheinander öffnen
For lngCount2 = 1 To lngCount - 1
Application.Workbooks.Open (strVerz(lngCount2)) 'Quell- Datei öffnen
Set objQuelle = ActiveWorkbook
Set objSheets = objQuelle.Worksheets
'In einer zweiten Schleife nach einem Tabellenblatt "Summary" suchen
For Each objSheet In objSheets
If objSheet.Name = "Summary" Then
'Letzte Zeile mit einem Eintrag in der Quell-Tabelle und der Ziel-Tabelle  _
herausfinden
If objZiel.Range("A1") = "" Then
lngLZeileZiel = 1
Else
lngLZeileZiel = objZiel.Cells.Find(What:="*", SearchOrder:=xlByRows,  _
SearchDirection:=xlPrevious).Row + 1
End If
lngLZeileQuelle = objSheet.Cells.Find(What:="*", SearchOrder:=xlByRows,  _
SearchDirection:=xlPrevious).Row
'Daten kopieren und in die Zieltabelle einfügen
objSheet.Cells(1, 1).Resize(lngLZeileQuelle, 19).Copy
With objZiel.Cells(lngLZeileZiel, 1).Resize(lngLZeileQuelle, 19)
.PasteSpecial Paste:=xlPasteValues    'Werte einfügen
.PasteSpecial Paste:=xlPasteFormats   'Formate einfügen
End With
'Seitenumbruch einfügen
objZiel.Rows(lngLZeileZiel + lngLZeileQuelle).PageBreak = xlPageBreakManual
End If
Next objSheet
objQuelle.Close  'Quell- Datei schließen
Next lngCount2
End Sub

Anzeige
AW: Korrektur ...
16.09.2013 09:33:38
Ina
Hallo Bastian,
vielen lieben Dank fuer Deine Hilfe! Ich habe schon die Hoffnung aufgegeben eine Antwort zu bekommen. Ich habe schon eine Loesung gefunden, bin trotzdem sehr sehr dankbar fuer Deine Unterstuetzung!
Ich wuensche Dir noch alles Gute!
Ina.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige