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

Pivot SubTotals auslesen_in zweiDim Array_&recover

Pivot SubTotals auslesen_in zweiDim Array_&recover
25.11.2008 14:52:23
Andreas
Hallo Excel Freunde,
ich hänge gerade an einem VBA Problem in Pivot Tabellen fest. Für manche Aktionen, die z.T. auch wieder VBA gestützt verlaufen, ist es ungünstig, SubTotals aller Art in den PivotFeldern zu haben. Bevor ich großen Code Aufwand betreibe, diese SubTotals zu erkennen und zu umgehen, möchte ich sie – sofern vorhanden – erkennen, auslesen (Feldname & Art des SubTotals), in ein Array schreiben und nachdem die Aktion durchgeführt ist, wiederherstellen.
Der 1. Teil geht schon ganz gut. Ich durchlaufe alle Pivot Felder und ermittle deren SubTotal Status korrekt. Um das zu kontrollieren, lasse ich ein Debug.Print mitlaufen. Diese Ergebnisse werden in ein zweispaltiges Array geschrieben. Anschließend werden die SubTotals gelöscht.
Dann wartet die Application 3 Sekunden und soll die SubTotals wieder herstellen. Bei der Wiederherstellung bin ich nun schon gescheitert. Die Kontrolle über Debug.Print zeigt mir, daß die Counter korrekt mitgelaufen sind, aber Debug.Print gibt mir aus dem Array immer nur den letzten Wert aus. Obwohl oben alle Felder & SubTotals korrekt erkannt (und ich nehme an, auch in das Array geschrieben?) wurden.
Aber ich finde den Fehler in der Logik nicht.
Für Anregungen, warum das Array fehlerhaft zu sein scheint, bin ich sehr dankbar.

Die Datei https://www.herber.de/bbs/user/57118.xls wurde aus Datenschutzgründen gelöscht


Vielen Dank und Grüße, Andreas Hanisch

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pivot SubTotals auslesen_in zweiDim Array_&recover
25.11.2008 15:03:00
Rudi
Hallo,
du ReDimst das Array. Dadurch gehen die Werte verloren.
Siehe ReDim Preserve.
Gruß
Rudi
AW: Pivot SubTotals auslesen_in zweiDim Array_&recover
25.11.2008 15:32:33
Andreas
Hallo Rudi,
vielen Dank für Deine Antwort. Ich glaube jetzt ist auch der Groschen gefallen. Das 'Preserve' sorgt - wie die Vokabel ja auch schon vermuten läßt - dafür, daß bei einer Redimensionierung eines sich verändernden Arrays alle bisherhigen Werte behalten werden. Das erklärt dann auch, warum nur der letzt Werte im Array gespeichert wurde.
Werde nun noch weiter die Hilfe studieren.
Vielen Dank und Gruß, Andreas
AW: Pivot SubTotals auslesen_in zweiDim Array_&recover
25.11.2008 15:49:55
Andreas
Hallo Rudi,
wenn ich es mit ReDim Preserve laufen lasse, bekomme ich einen Index- Fehler. Also habe ich es testweise für nur eine Dimension (nur die Zeilen) probiert und es hat funktioniert. Sobald ich die Spalten dazu nahm (1 to 2) kam wieder der Fehler. Ich habe nun so weit im Forum gelesen, daß ich über Redim Preserve nur die letzte Dimension anpassen kann. Das wären dann doch die Spalten, oder? Also ist es doch gar nicht möglich, ein dynamisches zweispaltiges Array zu erstellen, welches über ReDim Preserve seine Zeilen automatisch erweitert?
Siehst Du das auch so, bzw. wie kann das Problem gelöst werden?
Dank und Gruß, Andreas
Anzeige
AW: Pivot SubTotals auslesen_in zweiDim Array_&recover
25.11.2008 17:59:26
Tino
Hallo,
mit ReDim Preserve und mehrdimensionalen Area kannst Du immer nur den linken Bereich verändern ;-)
Gruß Tino
AW: Pivot SubTotals auslesen_in zweiDim Array_&recover
26.11.2008 09:18:43
Andreas
Hallo Tino,
hmmm, vielleicht bin ich wirklich ein wenig begriffsstutzig... Ich habe ein zweidimensionales Array vor zwei Monaten schon einmal sein gelassen, aber diesmal möchte ich es endlichverstehen. Wenn ich immer nur den linken Bereich verändern kann, das sind doch dann die Zeilen. D.h. ReDim Preserve myArr(1 to iCounter, 1 to2) würde das ReDim Preserve entsprechend dem iCounter doch die Zeilen anpassen und nicht die Spalten (1to2). Das wäre ja genau das was ich brauche. Aber das hat nicht geklappt. Das Array eindimensonal hat funktioniert. Sobald (1to2) dazukamen, kam der Fehler 'Index außerhalb des gültigen Bereiches'.
In VBA ist der linke Bereich doch immer die Row? Es wird ja immer erst nach Rowindex und dann Columnindex gefragt. z.B. bei Cells(x, y).
Ich habe mir nun damit beholfen, indem ich einfach das Array (1 to 15, 1 to 2) dimensionierte. Das ist nicht die perfekte Lösung, da ich dadurch Fleixibilität einbüße und "leere Speicherplätze" im Array haben kann. Ich bin nah dran. Um es nun endlich zu verstehen, würde ich mich freuen, sehr freuen, wenn Du in meinem Code die Zeilen verändern kannst, die Du meinst, damit es funktioniert. Vielleicht verstehe ich die Hinweise auch nicht richtig.
Die jetztige Lösung läuft ja. Es geht also nicht darum Programmierarbeit abzunehmen oder das ich es mir nur einfach machen möchte. Aber wenn ich es nicht an dem Beispiel korrekt erleben kann, in das ich mich nun eingedacht habe, wird der Groschen nicht richtig fallen und ich bin in sachen zweidimensionaler Arrays so weit wie vorher...
Kannst Du das machen? Bitte.
Vielen, vielen Dank für Deine Mühe.
Grüße, Andreas
Anzeige
AW: Pivot SubTotals auslesen_in zweiDim Array_&recover
26.11.2008 09:55:00
Rudi
Hallo,
so geht das:

Sub SubTotalsAuslesen_Array()
Dim pvTable As PivotTable
Dim iCounter, iCounter_2 As Long
Dim SubTotalElement As Variant
Dim SubTotalArr() 'As String
Set pvTable = ActiveSheet.PivotTables(1)
iCounter_2 = 0
For Each pvField In pvTable.RowFields
iCounter = 0
For Each SubTotalElement In pvField.Subtotals
iCounter = iCounter + 1
If SubTotalElement = True Then
iCounter_2 = iCounter_2 + 1
ReDim Preserve SubTotalArr(1 To 2, 1 To iCounter_2)
Debug.Print iCounter_2; pvField.Caption; "/ SubT:"; iCounter
SubTotalArr(1, iCounter_2) = pvField.Caption
SubTotalArr(2, iCounter_2) = iCounter
pvField.Subtotals(iCounter) = False
Exit For
End If
Next
Next
SubTotalArr = WorksheetFunction.Transpose(SubTotalArr)
Application.Wait Now + TimeSerial(0, 0, 3)
For i = 1 To iCounter_2
Debug.Print i; "Field:"; SubTotalArr(i, 1), "SubT:"; SubTotalArr(i, 2)
pvTable.RowFields(SubTotalArr(i, 1)).Subtotals(SubTotalArr(i, 2)) = True
Next i
End Sub


Gruß
Rudi

Anzeige
AW: Pivot SubTotals auslesen_in zweiDim Array_&recover
26.11.2008 14:52:48
Andreas
Hallo Rudi,
vielen, vielen Dank! Das mit dem Transponieren war mir neu. Ich werde jetzt noch zum Transpose Befehl lesen und den Code testen, testen, testen. Damit ich es alles richtig verstehe.
Habe noch einen schönen Abend.
Viele Grüße, Andreas
AW: Pivot SubTotals auslesen_in zweiDim Array_&recover
26.11.2008 10:06:00
Tino
Hallo,
wenn man links von rechts nicht unterscheiden kann, ich meinde den rechten Bereich. sorry
Links ist wo der Daumen rechts ist.
Gruß Tino
AW: Pivot SubTotals auslesen_in zweiDim Array_&recover
26.11.2008 14:50:00
Andreas
Hallo Tino,
ok, gut, ich dachte schon ich bin komplett bescheuert. Mußte gerade herzlich lachen über Deine Antwort. Klar, wenn es der rechte Bereich ist, dann deckt sich das alles mit dem, was ich in der letzten Zeit lernte.
Ich danke Dir für Deine bisherige Mühe und Dein Wissen in diesem Thread. Aber nicht nur bei mir und heute, sondern auch für alle anderen Frager und Threads in denen Du hilfst.
Vielen Dank!
Grüße aus Berlin, Andreas
Anzeige
AW: Pivot SubTotals auslesen_in zweiDim Array_&recover
26.11.2008 08:32:58
Rudi
Hallo,

ein dynamisches zweispaltiges Array zu erstellen, welches über ReDim Preserve seine Zeilen automatisch erweitert?


Erstelle ein 2-zeiliges Array mit ganz vielen Spalten und Transponiere es am Ende.
Gruß
Rudi

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige