Thema Datum  Von Nutzer Rating
Antwort
Rot Daten nach der Aktualisierung in der Variabel beibehalten
31.03.2022 09:27:16 Robin
Solved
31.03.2022 16:28:10 Gast66644
NotSolved

Ansicht des Beitrags:
Von:
Robin
Datum:
31.03.2022 09:27:16
Views:
167
Rating: Antwort:
 Nein
Thema:
Daten nach der Aktualisierung in der Variabel beibehalten

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 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:

 
 

  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Daten nach der Aktualisierung in der Variabel beibehalten
31.03.2022 09:27:16 Robin
Solved
31.03.2022 16:28:10 Gast66644
NotSolved