Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1172to1176
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

Tabellenblätter zusammenführen VBA

Tabellenblätter zusammenführen VBA
Martin
Hallo liebe Forum-User
ich habe eine Excel-Datei mit verschiedenen Arbeitsblättern, die alle den gleichen Aufbau (Überschrift 1. Zeile - unterschiedliche Länge der Tabellenblätter) haben. Nun möchte ich diese einzelnen Arbeitsblätter in einem Arbeitsblatt zusammenführen (ab Zeile 2 - Zeile 1 = Überschrift, muss erhalten bleiben). Die einzelnen Arbeitsblätter werden regelmäßig geändert.
Sobald man auf das "Gesamt" Arbeitsblatt wechselt sollten diese Änderungen übertragen / aktualisiert werden.
Ich habe schon gegoogled / im Forum gesucht und mehrere Ansätze bezüglich des Problemes gefunden. Bei vielen sollte die Formatierung der einzelnen Zellen erhalten bleiben, was bei mir aber nicht der Fall ist.
Folgenden Quellcode habe ich gefunden:

Sub Konsolidieren()
Dim Wks As Worksheet
Dim Bereich As Range
Dim strLC As String
Dim i As Integer
Set Wks = Worksheets.Add
Wks.Name = "Konsolidierung"
For i = 2 To Worksheets.Count
With Worksheets(i).UsedRange
strLC = .Cells(.Rows.Count, .Columns.Count).Address
Set Bereich = .Range("A2:" & strLC)
Bereich.Copy Destination:= _
Wks.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End With
Next i
End Sub

Wie kann ich den Code umändern, so dass das Worksheet nicht immer wieder erstellt wird, da dieser vorhanden ist, und der Quellcode dann ausgeführt wird, wenn ich auf das Arbeitsblatt wechsle.
Ich habe schon einiges getestet und es traten Fehler auf, wie z.B. - ist das "Gesamt" Arbeitsblatt leer, so wird auch die erste Zeile gelöscht bzw. beim wechseln in das Arbeitsblatt "Gesamt" lande ich in einer Schleife. Sollte aus diesem Grunde immer das "Gesamt" Arbeitsblatt gelöscht werden bevor es wieder neu zusammengeführt wird?
Über eure Hilfe würde ich mich sehr freuen. Vielen Dank im Voraus.
MfG
Martin
AW: Tabellenblätter zusammenführen VBA
13.08.2010 09:55:52
{Boris}
Hi Martin,
auf die Schnelle - probier mal:
Private Sub Worksheet_Activate()
Dim Ws As Worksheet
Me.Rows("2:" & Rows.Count).Clear
For Each Ws In ThisWorkbook.Worksheets
If Ws.Name  "Gesamt" Then
Ws.Rows("2:" & Ws.Cells.Find("*", searchdirection:=xlPrevious).Row).Copy Me.Range("A" &  _
Me.Cells.Find("*", searchdirection:=xlPrevious).Row + 1)
End If
Next Ws
End Sub
Rechtsklick auf den Blattreiter "Gesamt", Code anzeigen und den Code in das rechte offene VBA-Fenster kopieren.
Grüße Boris
AW: Tabellenblätter zusammenführen VBA
13.08.2010 10:27:29
Martin
Hallo Boris,
vielen Dank für die Hilfe. Ein Problem habe ich jetzt noch. Wenn ich wieder in das Arbeitsblatt wechsle, dann bekomme ich die Fehlermeldung "Kann Teil einer verbundenen Zelle nicht ändern". Kann man das noch abfgangen?
Anzeige
Verbundene Zellen
13.08.2010 10:29:05
{Boris}
Hi Martin,
Kann man das noch abfgangen?
Ja - keine verbundenen Zellen verwenden. Die Dinger sind Gift und führen an allen Ecken zu Problemen.
Grüße Boris
AW: Verbundene Zellen
13.08.2010 10:46:23
Martin
OK. Akzeptiert :)
Habe jetzt die verbundenen Zellen herausgenommen.
Wenn ich jetzt wieder in das Worksheet "Gesamt" wechsle (habe den Code unter Worksheet Activate abgelegt), so fügt er jetzt immer wieder die Tabellenblätter an das vorhandene heran.
z.B. 150 Zeilen - ich gehe in Tabellenblatt 3 verändere den Wert in B3 und gehe wieder in das Tabellenblatt gesamt. Nun werden auf einmal 300 Zeilen angezeigt. Sollte mann dann vorher das Tabellenblatt wieder löschen (bis auf Zeile 1)? Wenn ja wie?
Anzeige
AW: Verbundene Zellen
13.08.2010 10:48:50
{Boris}
Hi Martin,
Sollte mann dann vorher das Tabellenblatt wieder löschen (bis auf Zeile 1)? Wenn ja wie?
Ja, sollte man. Deshalb hab ich das auch direkt in den Code eingebaut mit der Zeile

Me.Rows("2:" & Rows.Count).Clear
Somit kann ich das Problem grad nicht nachvollziehen...?
Grüße Boris
AW: Verbundene Zellen
13.08.2010 10:59:12
Martin
Hallo Boris,
ich bin irgendwie schon im Wochenende. :) Sorry. Klappt alles bestens. Vielen Dank für Deine Hilfe.
MfG
Martin
AW: Tabellenblätter zusammenführen VBA
13.08.2010 09:56:45
Klaus
Moin Martin,
müsste so gehen:
Sub Konsolidieren()
Dim Wks As Worksheet
Dim Bereich As Range
Dim strLC As String
Dim i As Integer
'REMOVE Set Wks = Worksheets.Add
'REMOVE Wks.Name = "Konsolidierung"
For i = 2 To Worksheets.Count
With Worksheets(i).UsedRange
strLC = .Cells(.Rows.Count, .Columns.Count).Address
Set Bereich = .Range("A2:" & strLC)
Bereich.Copy Destination:= _
Sheets("Konsolidierung").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End With
Next i
End Sub

Anzeige
AW: Tabellenblätter zusammenführen VBA
13.08.2010 10:22:42
Martin
@Klaus: Danke. Er kopiert jetzt aber auch die erste Zeile (also Überschrift) der Tabellenblätter mit. :(
AW: Tabellenblätter zusammenführen VBA
13.08.2010 10:32:17
Martin
Klaus. Sorry war mein Fehler. Ich muss bei A3 anfangen. Hatte es falsch formuliert. Ich habe Deinen Quellcode jetzt in das Arbeitsblatt unter Worksheet Activate eingefügt. Wechsel ich in ein anderes Arbeitsblatt und führe dort eine Änderung durch und springe dann wieder in das "Konsolidierung"-Arbeitsblatt, so arbeitet er kurz, aber aktualisiert nicht. Kann es sein, dass das Blatt erst wieder geglöscht werden muss, bevor es wieder neu beschrieben wird?
Mit Änderungen meine ich
A5 ist gefüllt mit "ABC" und ich mache darauf "ZDF"
Anzeige
AW: Tabellenblätter zusammenführen VBA
13.08.2010 10:45:28
Klaus
Hi Martin,
Set Bereich = .Range("A2:" & strLC)
Ändere hier A2 in A3.
Wilde Behauptung: Das Blatt Konsolidierung WIRD jedes mal aktualisiert, du merkst es nur nicht. Der Code schreibt den Inhalt aller Tabellenblätter UNTER den vorhandenen Kontent im Blatt "Konsolidierung" - scroll mal nach unten und schau nach!
Um die Inhalte vorher zu löschen, gibt
Sheets("Konsolidierung").Cells.ClearContents
am Anfang des Codes ein.
Grüße,
Klaus M.vdT.
(Den Code von Boris verstehe ich nicht vollständig, aber er ist kürzer und eleganter. Nutz lieber den und verzichte auf verbundene Zellen!)
Anzeige
AW: Tabellenblätter zusammenführen VBA
13.08.2010 11:00:05
Martin
Vielen Dank Klaus für Deine Hilfe. Funktioniert jetzt alles. Ich wünsche ein schönes Wochenende.
MfG
Martin
Danke für die Rückmeldung! o.w.T.
13.08.2010 11:04:16
Klaus
.

28 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige