Hallo zusammen,
in meinem Makro kopiere ich mir Werte aus einem Pivot-Table mit:
Set pvtab = wksZ.PivotTables("Werte") 'der Pivottable Werte wird in dem Datenblatt "PivotDaten" angesteuert und in die Variable pvtab abgespeichert.
Set rngcopy = pvtab.DataBodyRange 'nur Datenbereich des Pivottable wird zum kopieren in Variable abgespeichert.
rngcopy.Copy 'Datenbereich wird kopiert.
---
Aktualisiere sie danach mit:
ActiveWorkbook.RefreshAll 'die Datei wird aktualisiert
---
und will sie dann derzeit nach einiger Zeit wieder einfügen:
With wksZ.Cells(2, 3) 'hier wird der Bereich im Datenblatt "PivotDaten" definiert, wo die Daten eingefügt werden sollen.
.PasteSpecial xlPasteValuesAndNumberFormats, Transpose:=False 'hier wird definiert, dass und wie die Daten eingefügt werden sollen. Die Daten müssen ja transponiert eingefügt werden.
End With 'Ende der With Formel
---
Dabei habe ich das Problem, dass die Daten, die er dann einfügt, nicht die gleichen Daten sind, die ich vor der Aktualisierung gezogen habe, sondern die, die nach der Aktualisierung in der Tabelle stehen. Vorher funktionierte es eigentlich reibungslos und nun nicht mehr. Was muss ich anpassen, damit er die Daten in der Variable "rngcopy" nicht aktualisiert?
Hier noch einmal der komplette Code:
Sub Aktualisierung()
Dim Anzahlwert, Datumold, wertzählenwenngleich, letztezeile, letztzeileDS As String
Dim wksZ, wksY, WksX As Worksheet
Dim pvtab As PivotTable
Dim Wertold(1 To 40), Wertnew(1 To 40)
Set wksZ = Workbooks("Abrechnungsmonitoring").Worksheets("PivotDaten") 'Datenblätter werden in Variabeln geladen.
Set wksY = Workbooks("Abrechnungsmonitoring").Worksheets("Baum") 'Datenblätter werden in Variabeln geladen.
Set WksX = Workbooks("Abrechnungsmonitoring").Worksheets("Datensammlung")
letztezeile = wksZ.Cells(256, 1).End(xlUp).Row 'letzte beschriebene Zeile im ersten PivotTable ermittelt.
letzteZeileDS = WksX.Cells(256, 1).End(xlUp).Row
Datumold = wksY.Cells(2, 27)
Anzahlwert = 0 'erneuter Schleifenzähler
For Each C In wksZ.Range(wksZ.Cells(2, 2), wksZ.Cells(2, letztezeile)) 'For Each Schleife, die nur die Daten der Werte-Tabelle durchläuft. Heißt: Zeile, wo das erste Mal ein Wert vorkommt -> Zeile, wo das letzte Mal ein Wert vorkommt. Dies machen wir hier, um die alten Werte in Variabeln zu schreiben Wertold(1 - *).
Anzahlwert = Anzahlwert + 1 'Schleifenzähler wird um 1 erhöht.
activerow = C.Row 'Die Positon der gerade durchlaufenen Spalte wird in die Variabel gespeichert, damit wir diese gleich zur Ermittlung der Daten nutzen können.
Wertold(Anzahlwert) = wksZ.Cells(activerow, 2) 'Die alten Werte werden hier nun in die Variabel Wertold(1 - *) geschrieben. Heißt, beim ersten Schleifendruchlauf heißt die Variabel Wertold1 beim letzten dann Wertold10 oder ähnlich. Hinter dem = wird angezeigt, wo die Werte stehen, die in die Variabel geschrieben werden sollen.
Next 'Nächster Schleifendurchlauf
Set pvtab = wksZ.PivotTables("Werte") 'der Pivottable Werte wird in dem Datenblatt "PivotDaten" angesteuert und in die Variable pvtab abgespeichert.
Set rngcopy = pvtab.DataBodyRange 'nur Datenbereich des Pivottable wird zum kopieren in Variable abgespeichert.
rngcopy.Copy 'Datenbereich wird kopiert.
ActiveWorkbook.RefreshAll 'die Datei wird aktualisiert
wertzählenwenngleich = 0
Anzahlwert = 0 'erneuter Schleifenzähler
For Each C In wksZ.Range(wksZ.Cells(2, 2), wksZ.Cells(2, letztezeile)) 'For Each Schleife, die nur die Daten der Werte-Tabelle durchläuft. Heißt: Zeile, wo das erste Mal ein Wert vorkommt -> Zeile, wo das letzte Mal ein Wert vorkommt. Dies machen wir hier, um die alten Werte in Variabeln zu schreiben Wertold(1 - *).
Anzahlwert = Anzahlwert + 1 'Schleifenzähler wird um 1 erhöht.
activerow = C.Row 'Die Positon der gerade durchlaufenen Spalte wird in die Variabel gespeichert, damit wir diese gleich zur Ermittlung der Daten nutzen können.
Wertnew(Anzahlwert) = wksZ.Cells(activerow, 2) 'Die neuen Werte werden hier nun in die Variabel Wertnew(1 - *) geschrieben. Heißt, beim ersten Schleifendruchlauf heißt die Variabel Wertold1 beim letzten dann Wertold10 oder ähnlich. Hinter dem = wird angezeigt, wo die Werte stehen, die in die Variabel geschrieben werden sollen.
If Wertnew(Anzahlwert) = Wertold(Anzahlwert) Then
wertzählenwenngleich = wertzählenwenngleich + 1
End If
Next 'Nächster Schleifendurchlauf
If wertzählenwenngleich = Anzahlwert Then 'Es wird geprüft, ob die alten Werte identisch zu den neuen Daten sind.
MsgBox "Das aktuelle Datum wurde nicht in das Blatt *Baum* geschrieben, da die Daten identisch sind."
Application.CutCopyMode = False 'Daten werden aus der Zwischenablage entfernt.
Exit Sub 'Wenn dies so ist und keine neuen Daten vorhanden sind, wird das Makro beendet.
Else
wksY.Cells(2, 27).Value = Format(Now, "dd.mm.yyyy") 'sind neue Daten vorhanden, wird das Tagesdatum in das Datenblatt "Baum" geschrieben.
wksY.Cells(4, 27).Value = Datumold
With wksZ.Cells(2, 3) 'hier wird der Bereich im Datenblatt "PivotDaten" definiert, wo die Daten eingefügt werden sollen.
.PasteSpecial xlPasteValuesAndNumberFormats, Transpose:=False 'hier wird definiert, dass und wie die Daten eingefügt werden sollen. Die Daten müssen ja transponiert eingefügt werden.
End With 'Ende der With Formel
Application.CutCopyMode = False 'Daten werden aus der Zwischenablage entfernt.
Set pvtab = wksZ.PivotTables("Werte") 'der Pivottable "Werte" wird in dem Datenblatt "PivotDaten" angesteuert und in die Variable pvtab abgespeichert.
Set rngcopy = pvtab.DataBodyRange 'nur Datenbereich des Pivottable wird zum kopieren in Variable abgespeichert.
rngcopy.Copy 'Datenbereich wird kopiert.
With WksX.Cells(letzteZeileDS + 1, 2) 'hier wird der Bereich im Datenblatt "PivotDaten" definiert, wo die Daten eingefügt werden sollen.
.PasteSpecial xlPasteValuesAndNumberFormats, Transpose:=True 'hier wird definiert, dass und wie die Daten eingefügt werden sollen.
End With 'Ende der With Formel
WksX.Cells(letzteZeileDS + 1, 1).Value = Format(Now, "dd.mm.yyyy")
Application.CutCopyMode = False 'Daten werden aus der Zwischenablage entfernt.
End If
End Sub
---
Vielen Dank im Voraus und euch einen angenehmen Tag.
Viele Grüße
Robin
|