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

Leere Zeilen, Intersect-Ereignis

Leere Zeilen, Intersect-Ereignis
07.04.2022 16:36:53
Filikos
Hallo an die VBA-Spezialistinnen und Spezialisten
Nach stundenlangem Error and Trail bitte ich euch um Support. Grundsätzlich funktioniert mein Code. Eine ListObject-Tabelle fragt die Werte aus einer Pivot-Tabelle ab. Es gibt 4 verschiedene Datenschnitte, wobei der Wichtigste der "TagTyp" ist. Je nach Selektion muss die ListObject-Tabelle anders befüllt werden. Dieser Filterwert ist fix in Zelle G13.
----- Problem 1:
Mit zunehmender Nutzung wird der Bereich der leeren Zellen unterhalb der ListObject-Tabelle immer wie länger. Was kann ich tun, damit das nicht passiert?
----- Problem 2:
Im Sheet "Hilfspivot" ist ein Worksheet-Change eingefügt. Dieser triggert den Wert in Zelle G13. Warum springt das Makro "DatenUpdate" immer wieder in diesen Change-Befehl - auch wenn sich am Wert von Zelle G13 nichts ändert? Also bloss einer der anderen 3 Datenschnitte sich ändern? Hat diese damit zu tun, dass die Pivot-Tabelle dennoch immer als Ganzes aktualisiert wird?
1. Code
Private Sub Worksheet_Change(ByVal Target As Range)
Dim filter As Variant
filtercell = Range("TagTyp").Address
If Intersect(Target, Range(filtercell)) Is Nothing Then Exit Sub
'MsgBox filtercell
Call DatenUpdate
End Sub
2. Code
Sub DatenUpdate()
Application.ScreenUpdating = False
'--------------------------------------------
' START - Tabellenbody leeren
'--------------------------------------------
Dim tbl As ListObject
Dim lz As Long
Set tbl = Sheets("Hilfspivot").ListObjects("tb_source_full")
If tbl.ListRows.Count >= 1 Then
tbl.DataBodyRange.Delete
End If

'-------------------------------------
' START - Range Pivottabelle abfragen -> piv_bic_source
'-------------------------------------
Dim pt As PivotTable
Set pt = Sheets("Hilfspivot").PivotTables("piv_bic_source")
rngPivot = Union(pt.DataBodyRange, pt.PivotFields(1).DataRange).Address
'--------------------------------------------
' START - Tabellenbody neu befüllen vom Start- bis Enddatum
'--------------------------------------------
Dim datum As Date
Dim start As Date
Dim ende As Date
Dim newRow As ListRow
Dim filter As Variant
filter = Range("TagTyp")
start = Range("Datum_START")
ende = Range("Datum_ENDE")
If filter = "WE" Then
For datum = start To ende
If Weekday(datum, 2) > 5 Then
Set newRow = tbl.ListRows.Add
With newRow
.Range(1) = datum
.Range(2) = filter
.Range(3) = "=IFERROR(VLOOKUP([@Datum], " & rngPivot & " ,2,FALSE),0)"
End With
End If
Next datum

ElseIf filter = "WT" Then
For datum = start To ende
If Weekday(datum, 2) Set newRow = tbl.ListRows.Add
With newRow
.Range(1) = datum
.Range(2) = filter
.Range(3) = "=IFERROR(VLOOKUP([@Datum], " & rngPivot & " ,2,FALSE),0)"
End With
End If
Next datum
Else
For datum = start To ende
Set newRow = tbl.ListRows.Add
With newRow
.Range(1) = datum
.Range(2) = "=IF(WEEKDAY([@Datum],2) >5,""WE"",""WT"")"
.Range(3) = "=IFERROR(VLOOKUP([@Datum], " & rngPivot & " ,2,FALSE),0)"
End With
Next datum
End If
Application.ScreenUpdating = True
End Sub

Danke bestens!

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Leere Zeilen, Intersect-Ereignis
07.04.2022 17:03:46
Nepumuk
Hallo,
teste mal damit:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("TagTyp")) Is Nothing Then
Application.EnableEvents = False
Call DatenUpdate
Application.EnableEvents = True
End If
End Sub
Gruß
Nepumuk
AW: Leere Zeilen, Intersect-Ereignis
07.04.2022 17:31:25
Filikos
Hallo Nepumuk,
leider dasselbe Verhalten ...
Gruss Filikos
AW: Leere Zeilen, Intersect-Ereignis
07.04.2022 17:36:04
Nepumuk
Hallo,
kann ich nicht nachvollziehen. Ich lass deine Frage offen.
Gruß
Nepumuk
AW: Leere Zeilen, Intersect-Ereignis
08.04.2022 11:28:13
Yal
Hallo Filikos,
eigentlich ist eine Pivottabelle immer das Endergebnis und eine aktive Tabelle (ListObject) eine Datenquelle.
Diese umgekehrt zu verwenden ist nicht gewöhnlich. Weil eben nicht so gedacht worden. Was aber gut geht, ist aktive Tabelle zu aktive Tabelle über Power Query
Wenn ich davon ausegehe, dass die Quelledaten von der Pivottabellen auch in einer aktive Tabelle vorliegen, dann Power Query verwenden um in den Zielzustand umzuwandeln, ohne über einen Pivottabelle umgehen zu müssen.
Vielleicht kannst Du eine anonymisierte Version deiner Datei hochladen. Dann könnten wir besser unterstützen.
VG
Yal
Anzeige
AW: Leere Zeilen, Intersect-Ereignis
08.04.2022 13:02:31
Filikos
Hi,
das würde ich grundsätzlich gerne tun. Aber die Quelldaten stammen aus einem Datawarehouse, werden danach in PowerQuery weiterverarbeitet und ich ziehe am Ende die Pivot-Tabelle(n). Es sind diverse Slicer vorhanden. Der Knackpunkt ist das Zählen von Ereignissen an Kalendertagen. Es muss - unter anderem - unterschieden werden zwischen Sa/So (WE) und Mo-Fr (WT) . Challenge: hat ein Kalendertag kein Ereignis, wird dieser Kalendertag in der Pivot-Tabelle nicht ausgegeben. Dies führt zu falschen Mittel- und Median-Werten und in den Histogramm-Diagrammen fehlen diese Tage. Deshalb diese ListObject-Tabelle, welche sich initialisiert über das Start- und Enddatum der Beobachtungsperiode und in Abhängigkeit vom TagTyp-Slicer. Das ListObject enthält somit immer lückenlos ALLE Kalendertage.
Pivot-Ergebnis (Jahr 2019, Filter auf WE):
Datum_Pivot || PT_BIC
09.03.2019 1
11.05.2019 1
12.05.2019 1
15.06.2019 1
16.06.2019 1
20.07.2019 1
23.11.2019 1
24.11.2019 1
30.11.2019 1
01.12.2019 1
Auszug aus der ListObject-Tabelle - es werden alle WE-Tage dargestellt. Ist für ein Datum in der Pivot-Tabelle kein Wert vorhanden, wird der Tag mit dem Wert 0 eingerechnet. Ich kann nun über Formeln wie MAX, MIN, MED, MW, ANZ Tage ohne Werte die Kennzahlen problemlos ermitteln. Die Histogramme und die Verlaufsgrafik über das ganze Jahr zeigen auch korrekte Werte.
Datum || TagTyp || PT
05.01.2019 WE 0
06.01.2019 WE 0
12.01.2019 WE 0
13.01.2019 WE 0
19.01.2019 WE 0
20.01.2019 WE 0
26.01.2019 WE 0
27.01.2019 WE 0
02.02.2019 WE 0
03.02.2019 WE 0
09.02.2019 WE 0
10.02.2019 WE 0
16.02.2019 WE 0
17.02.2019 WE 0
23.02.2019 WE 0
24.02.2019 WE 0
02.03.2019 WE 0
03.03.2019 WE 0
09.03.2019 WE 1
10.03.2019 WE 0
16.03.2019 WE 0
17.03.2019 WE 0
23.03.2019 WE 0
24.03.2019 WE 0
Sorry, aber es ist schlicht nicht möglich, ein File mit den Rohdaten zu posten. Und zum Anonymisieren müsste ich die ganze DWH-Abfrage zuerst umbauen. Vielleicht gibt es noch einen anderen Lösungsansatz für diese Kalendertag-Problematik? Mein Tellerrand hat geendet bei dieser Idee mit der benannten Tabelle.
Anzeige
AW: Leere Zeilen, Intersect-Ereignis
08.04.2022 16:12:18
Filikos
Ich habe den Filter für den TagTyp über eine andere Quelltabelle gelegt. Somit hat sich das Problem mit dem immer wieder neuen Durchlauf erledigt. Warum aber weiterhin leere Zeilen generiert werden, weiss ich nicht.
AW: Leere Zeilen, Intersect-Ereignis
08.04.2022 16:54:21
ChrisL
Hi
Es wird nicht erwartet, dass du dein DWH exportierst, aber dass du eine Datei zur Verfügung stellen würdest, womit man arbeiten kann. Freiluft Programmierung beherrschen die wenigsten.
https://www.herber.de/bbs/user/152351.xlsx
Ich habe dir im Anhang mal ein Beispiel vorbereitet, um mögliche Spielarten aufzuzeigen.
- Die Dummy-Quelldaten werden direkt in PQ erweitert (Zahlenreihe vervollständigt)
- Damit wird erstmal eine Pivot mit allen Daten erzeugt, worauf die Datenschnitte beruhen. Diese Pivot kann man auch verstecken.
- Die Pivot wird mit Copy/Paste dupliziert und die neue Pivot kann bedarfsgerecht angepasst werden. Der Datenschnitt von vorhin wirkt sich damit auch auf die zweite Pivot aus. Der User merkt nicht, dass er eigentlich den Schnitt von der ersten Pivot bedient.
- Da die Datengrundlage vollständig ist, kann man so auch Features wie Measures für Mittelwert etc. benutzen.
(ob es 2 Pivots braucht sei dahingestellt)
Mit der Datei habe ich nicht den Anspruch auf eine Lösung, sondern möchte dir alternative Möglichkeiten aufzeigen, um dem Problem zu begegnen.
cu
Chris
Anzeige
AW: Leere Zeilen, Intersect-Ereignis
12.04.2022 17:30:36
Filikos
Hi Chris,
danke dir vielmals für diesen Effort und die Unterstützung. Das ist alles Andere als selbstverständlich. Die Quelldaten hatte ich analog wie du in PQ verarbeitet, um eine zweite PQ-Abfrage für den vollständigen Kalender zu erhalten. Deine Variante mit der Abfrage von End- und Startdatum ist allerdings eleganter. Ich mache mich nun auf die Suche nach dem ominösen Haken: warum wollte mein Datenschnitt denn nicht funktionieren? Irgendwo steckt noch ein Fehler. Mit deinem Lösungsansatz werde ich auch kein Problem mehr haben mit dem Excel-Sheet, welches je länger desto mehr leere Zeilen aufweist. Mal schauen, ob ich die dynamischen Histogramme noch geregelt bekomme. Vorteil meines gigantischen Umweges war,/ist dass ich viel über VBA gelernt hat. Ich schliesse den Thread und sage nochmals Tausend Dank! mit Gruss Nakami
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige