Daten aus 2. Tab holen und in Tab1 hinzfügen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Daten aus 2. Tab holen und in Tab1 hinzfügen
von: Werner Perouse
Geschrieben am: 18.04.2015 14:48:29

Hallo Forum,
ich habe ein kleines Problem, obwohl ich schon eine Lösung habe. Ich habe eine Excel-File mit mehreren Tabellen-Blättern. Manche dieser Blätter werden automatisch erzeugt, und haben einen bestimmten Syntax im Blatt-Namen. Daneben gibt es ein Blatt mit dem Namen "Gesamtliste".
Nun möchte ich die "Gesamtliste" um die Daten der automatisch erzeugten Blätter erweitern; die jeweiligen Daten werden also einfach an dieses Blatt angefügt. Die Spalten sind identisch.
Meine Lösung:
WSCount = ActiveWorkbook.Worksheets.Count
CurrSheet = ActiveSheet.Name
MaxRowG = ActiveSheet.UsedRange.Rows.Count
For LCount1 = 1 To WSCount
If Left(Worksheets(LCount1).Name, Len(CopyName)) = CopyName Then
CopySheet = Worksheets(LCount1).Name
MaxRowI = Sheets(LCount1).UsedRange.Rows.Count
MaxColI = Sheets(LCount1).UsedRange.Columns.Count
Sheets(LCount1).Select
Sheets(CopySheet).Range(Cells(2, 1), Cells(MaxRowI, MaxColI)).Copy
Sheets(CurrSheet).Select
Cells(1 + MaxRowG, 1).Select
ActiveSheet.Paste
MaxRowG = ActiveSheet.UsedRange.Rows.Count
End If
Next LCount1

Was mich stört, ist die Tatsache, dass diese Routine nur funktioniert, wenn ich das jeweilige Blatt mit ".Select" aktiviere.
Geht das auch, ohne dass ich das jeweilige Blatt immer "aktiviere"?.

Da ich aus den Tabellenblättern alle Daten ab Zeile 2 übernehme, gäbe es auch die Möglichkeit, die gesamten Daten zu kopieren und dann in das Gesamt-Blatt einfügen. Weil dann allerdings auch die Titel-Zeile kopiert würde, müsste ich die nach dem Einfügen wieder löschen (was kein Problem darstellt).
Wie würde eine Lösung aussehen, alle Daten zu kopieren??
Grüße aus dem Schwabenland
Werner

Bild

Betrifft: AW: Daten aus 2. Tab holen und in Tab1 hinzfügen
von: Nepumuk
Geschrieben am: 18.04.2015 15:36:28
Hallo,
teste mal:

Const CopyName As String = "????????????????" 'eintragen

Dim CurrSheet As Worksheet
Dim MaxRowG As Long, LCount1 As Long
Dim MaxRowI As Long, MaxColI As Long

Set CurrSheet = ActiveSheet
MaxRowG = CurrSheet.UsedRange.Rows.Count

For LCount1 = 1 To ThisWorkbook.Worksheets.Count
    With Worksheets(LCount1)
        If Left$(.Name, Len(CopyName)) = CopyName Then
            MaxRowI = .UsedRange.Rows.Count
            MaxColI = .UsedRange.Columns.Count
            .Range(.Cells(2, 1), .Cells(MaxRowI, MaxColI)).Copy _
                Desination:=CurrSheet.Cells(1 + MaxRowG, 1)
            MaxRowG = MaxRowG + MaxRowI
        End If
    End With
Next LCount1
Set CurrSheet = Nothing

wozu willst du mehr als den benutzten Bereich kopieren?
Gruß
Nepumuk

Bild

Betrifft: AW: Daten aus 2. Tab holen und in Tab1 hinzfügen
von: Werner Perouse
Geschrieben am: 18.04.2015 16:16:26
Hallo Nepumuk,
vielen Dank für Deine Antwort. Habe sofort Deinen Code probiert. Nach einer kleiner "Reparatur" funktioniert jetzt alles so, wie ich mir das vorgestellt hatte.
In Deinem Beispiel steht:
Desination:=CurrSheet.Cells(1 + MaxRowG, 1)
Nachdem ich diese Zeile wie folgt geändert hatte, funktioniert alles:
Destination:=Sheets(CurrSheet).Cells(1 + MaxRowG, 1)
VBA hat nicht wegen "Desination" gemeckert, sondern wegen "=CurrSheet". Und da dachte ich zuerst, dass "Destination" richtiger wäre. Trotzdem hat VBA gemeckert.
Habe im Internet mit den Begriffen "excel vba copy destination" die Syntax der Anweisung nachgeschaut.
Gruß und nochmals herzlichen Dank
Werner

Bild

Betrifft: AW: Daten aus 2. Tab holen und in Tab1 hinzfügen
von: Nepumuk
Geschrieben am: 18.04.2015 16:57:12
Hallo,
du hättest auch die Dim- und Set-Anweisung für das CurrSheet übernehmen sollen dann hätte es ohne Korrektur funktioniert.
Gruß
Nepumuk

Bild

Betrifft: AW: Daten aus 2. Tab holen und in Tab1 hinzfügen
von: Werner Perouse
Geschrieben am: 18.04.2015 17:21:50
Hallo Nepumuk,
ich hatte ja nicht meinen gesamten Code in den Thread gestellt, sondern lediglich den Teil, in welchem das Kopieren stattfand. Natürlich gab es eine entsprechende DIM-Anweisung. Und gleich zu Beginn meines bereitgestellten Codes gibt es die Anweisung
CurrSheet = ActiveSheet.Name
Und dass diese Variable richtig gefüllt war, ergibt sich aus der Tatsache, dass mein Code ja funktionierte, solange ich noch auf die jeweilige Tabelle "umgeschaltet" hatte:
Sheets(CurrSheet).Select
Ist doch alles kein Problem, nachdem jetzt alles fehlerfrei funktioniert. Ich wollte lediglich eine Feedback geben, damit andere, die diesen Thread anschauen, gleich auch eine funktionierende Lösung finden.
Gruß
Werner

Bild

Betrifft: AW: Daten aus 2. Tab holen und in Tab1 hinzfügen
von: Werner Perouse
Geschrieben am: 18.04.2015 17:26:37
Hallo Nepumuk,
noch ein Nachtrag von mir: ich hatte CurrSheet als String definiert. Erst jetzt ist mir aufgefallen, dass in Deiner Antwort folgende Zeile vorhanden ist:
Dim CurrSheet As Worksheet
Sorry.
Werner

Bild

Betrifft: AW: Daten aus 2. Tab holen und in Tab1 hinzfügen
von: Nepumuk
Geschrieben am: 18.04.2015 17:38:33
Hallo,
über den Namen einer Tabelle auf diese zuzugreifen bedeutet immer einen Zugriff über die Auflistungsklasse in dem sich alle Blätter befinden. Ich hatte das auf den direkten Zugriff auf die Tabelle umgestellt. Der Zugriff ist damit doppelt so schnell wie über die Auflistungsklasse.
Gruß
Nepumuk

Bild

Betrifft: AW: Daten aus 2. Tab holen und in Tab1 hinzfügen
von: Nepumuk
Geschrieben am: 18.04.2015 19:17:55
Hallo,
so besser?

Option Explicit

Private Sub Worksheet_Activate()
    Dim objPivotItem As PivotItem
    Dim lngIndex As Long
    Dim blnFound As Boolean
    Application.ScreenUpdating = False
    EnableCalculation = False
    For Each objPivotItem In ChartObjects(1).Chart.PivotLayout.PivotTable.PivotFields("Ebene 1").PivotItems
        With objPivotItem
            .Visible = True
            If CDbl(.Value) = Cells(1, 2).Value Then blnFound = True
        End With
    Next
    If blnFound Then
        For Each objPivotItem In ChartObjects(1).Chart.PivotLayout.PivotTable.PivotFields("Ebene 1").PivotItems
            With objPivotItem
                .Visible = CDbl(.Value) = Cells(1, 2).Value
            End With
        Next
        With ChartObjects(1).Chart.PivotLayout.PivotTable.PivotFields("KW")
            For Each objPivotItem In .PivotItems
                objPivotItem.Visible = True
            Next
            For lngIndex = 1 To .PivotItems.Count - 5
                .PivotItems.Item(lngIndex).Visible = False
            Next
        End With
    Else
        MsgBox "Der Wert ist nicht in der Liste", vbExclamation, "Hinweis"
    End If
    EnableCalculation = True
    Application.ScreenUpdating = True
End Sub

Gruß
Nepumuk

Bild

Betrifft: AW: Daten aus 2. Tab holen und in Tab1 hinzfügen
von: Werner Perouse
Geschrieben am: 19.04.2015 08:34:32
Hallo Nepumuk,
kann es sein, dass Dein letzter Eintrag (Beispiel: Private Sub Worksheet_Activate()) gar nichts mit meinem Problem zu tun hat, sondern versehentlich in den falschen Thread gerutscht ist.
Gruß
Werner

Bild

Betrifft: AW: Daten aus 2. Tab holen und in Tab1 hinzfügen
von: Nepumuk
Geschrieben am: 19.04.2015 10:36:07
Hallo,
das ist richtig. Da hab ich mich wohl vertan.
Gruß
Nepumuk

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Windows Zwischenspeicher Inhalt prüfen"