Anzeige
Archiv - Navigation
972to976
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
972to976
972to976
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Pivot Tabelle sortieren - alle Felder per VBA
07.05.2008 18:39:05
Andreas
Hallo Herber Fans,
im Zuge meiner Pivot Forschungen habe ich auch daran gedacht, alle Pivotfields automatisch absteigend sortieren zu lassen. Das funktioniert anscheinend auch, nur bekomme ich nach dem Sortiervorgang eine Fehlermeldung, die ich nicht behoben kriege. Seit neuestem spinnt auch die eigentlich stabil laufende iNputBox und ich kann mir keinen Reim drauf machen.
Ich habe den ganzen Code in einer Beispieldatei dargestellt und hoffe, jemand von Euch kann mich auf den gedanklichen Fehler aufmerksam machen, der ein funktionieren verhindert.
https://www.herber.de/bbs/user/52209.xls
Dank und Gruß, Andreas Hanisch

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pivot Tabelle sortieren - alle Felder per VBA
08.05.2008 03:00:00
fcs
Hallo Andreas,
Problem mit der Inputbox: Die Zeile
Application.ScreenUpdating = False
muss nach der Inputbox-Zeile stehen.
Problem in der Sortierschleife:
Die Zeilen- und Spaltenfelder können nur nach sich selber oder einem der berechneten Werte im Datenbereich sortiert werden. Als Wert für den Parameter "Field" kann man also nur immer sehr wenige Werte vorgeben. Schau mal bei manuellem Sortieren welche Werte in der Auswhlliste liste der einzelnen Felder stehen. Falls du ein Feld als Sortier-Referenz wählst dann läuft das Makro bei den anderen Feldern in den Fehler.
Gruß
Franz

Anzeige
AW: Pivot Tabelle sortieren - alle Felder per VBA
08.05.2008 10:58:00
Andreas
Hallo Franz,
das mit dem Sortierparameter war mir bekannt, aber ich hatte es nicht korrekt berücksichtigt. Es sollen alle Zeilenfelder nach einem (über die Inputbox) zu wählenden Datenfeld sortiert werden. Nacheinander absteigend. Das bringt mich zu der bisher noch nicht gelösten Prüfung. Wie kann ich prüfen, ob die Auswahl im Datenfeldbereich einer Pivottabelle liegt?
Folgende Befehle aus dem Objektkatalog habe ich bisher erfolglos probiert:
DataRange/ DataType/ Range/ PivotCellType/ LabelRange
Ich habe keine Ahnung, ob das überhaupt möglich ist. Es gleicht der Suche der Nadel im Heuhaufen. Auch mit der F1 Hilfe im Objektkatalog werde ich nicht richtig schlau und bekomme oft die Fehlermeldung, daß dieser Befehl vom Objekt nicht unterstützt wird.
Hast Du eine Idee, wie die Prüfung Datenfeld Ja/ Nein korrekt durchgeführt werden kann. Wenn es kein Datenfeld ist, soll in der späteren Ausbaustrufe auch die Inputbox noch einmal kommen.
Dank und Gruß für Deine Idee, Andreas

Anzeige
AW: Pivot Tabelle sortieren - alle Felder per VBA
08.05.2008 11:58:00
fcs
Hallo Andreas,
mit den folgenden Anpassungen sollte es funktionierne, wobei ich auch noch ein paar Fehlerbehandlungen eingebaut hab.
Gruß
Franz

Sub SortierePivot()
Dim SortierRef As Range
Dim SortierRefField As String
Dim pvField As PivotField, pvTable As PivotTable
Dim bolSortiert As Boolean, intFehler As Integer, strMsg As String
On Error GoTo Fehler
Auswaehlen:
intFehler = 1
Set SortierRef = Application.InputBox("Bitte Sortierreferenz markieren:" & vbLf & _
"Abbrechen verläßt die Sortierung.", "Sortierreferenz", Type:=8)
Application.ScreenUpdating = False
Application.EnableEvents = False
If SortierRef Is Nothing Then
Exit Sub
Else
intFehler = 2
SortierRefField = SortierRef.PivotField
MsgBox SortierRefField
intFehler = 3
Set pvTable = ActiveSheet.PivotTables(1)
intFehler = 4
Set pvField = pvTable.PivotFields(SortierRefField)
pvField.AutoSort xlDescending, SortierRefField
bolSortiert = True
intFehler = 0
End If
Application.ScreenUpdating = True
Application.EnableEvents = True
If bolSortiert = True Then
MsgBox ("PivotTabelle ist sortiert")
End If
Exit Sub
Fehler:
strMsg = "Fehler " & Err.Number & " ist aufgetreten!" & vbLf & Err.Description
Select Case intFehler
Case 1
MsgBox strMsg & vbLf & vbLf & "Fehler bei Selektion"
Case 2
If MsgBox(strMsg & vbLf & vbLf & SortierRef.Value _
& ": Feld in PivotTabelle nicht vorhanden" _
& vbLf & vbLf & "Sortierreferenz neu markieren?", vbYesNo) = vbYes Then
Application.ScreenUpdating = True
Resume Auswaehlen
End If
Case 3
MsgBox strMsg & vbLf & vbLf & "Pivottabelle fehlt"
Case 4
MsgBox strMsg & vbLf & vbLf & "Feldzuweisung bei Sortierung fehlerhaft"
Case Else
MsgBox strMsg
End Select
End Sub


Anzeige
AW: Pivot Tabelle sortieren - alle Felder per VBA
08.05.2008 14:55:40
Andreas
Hallo Franz,
Dein Sortiercode funktioniert gut. Ich muß jedoch ehrlich eingestehen, daß damit eine Komplexität für mein VBA Verständnis erreicht ist, die ich durch bloßes Code Studieren und Analogien bilden auf die Schnelle wohl nicht knacken werde. Aber gut Ding will Weile haben… Wie die intFehler mit der Case Anweisung zusammenarbeiten werde ich mir heute noch genauer ansehen.
Auf alle Fälle ist das ein heftiger Code… Respekt! Was ich in der Sortierung meinte, war aber „anders“ herum. Ich vermute aber, ich habe die falschen Termini verwandt. Die für die Sortierung einzig wählbaren Felder sollen jeweils die Datenfelder sein. D.h. in dem konkreten Beispiel sind das „Istverbrauch“ bzw. „Planverbrauch“. Wenn mit der Inputbox auf die Zeilenfelder referenziert wird, soll Deine Meldung kommen „Feldzuweisung bei Sortierung fehlerhaft“.
Wenn nun also mit der Inputbox auf „Istverbrauch“ referenziert wird, dann sollen im Bereich der Zeilenfelder die Felder „Material“, „Baustelle“ und „Lieferant“ sämtlich absteigend nach „Istverbrauch“ sortiert werden. Da muß also irgendwo eine For Each Schleife rein?!
Deine Logik hinter Deinem Makro hat sich mit bisher noch nicht erschlossen. Ich kann es also nicht so umstellen, wie soeben beschrieben.
Ich würde mich sehr freuen und wäre Dir dankbar, wenn Du dich noch einmal der Sache annehmen könntest.
Dankeschön.
Grüße, Andreas

Anzeige
AW: Pivot Tabelle sortieren - alle Felder per VBA
08.05.2008 18:24:22
fcs
Hallo Andreas,
Pivot-Tabellen sind nun einmal ziemlich komplexe Objekte und unter VBA manchmal schwierig zu handhaben.
Ich hab nochmals umgebaut und eine Schleife eingebaut, die nur die Zeilenfelder in der Sortierschleife abarbeitet. Die Fehlermeldungen hab ich auch noch ein wenig modifiziert. Ich denke, dass es jetzt funktionieren sollte.
Gruß
Franz

Sub SortierePivot()
Dim SortierRef As Range
Dim SortierRefField As String
Dim pvField As PivotField, pvTable As PivotTable
Dim bolSortiert As Boolean, intFehler As Integer, strMsg As String
On Error GoTo Fehler
Auswaehlen:
intFehler = 1
Set SortierRef = Application.InputBox("Bitte Sortierreferenz markieren:" & vbLf & _
"Abbrechen verläßt die Sortierung.", "Sortierreferenz", Type:=8)
Application.ScreenUpdating = False
Application.EnableEvents = False
If SortierRef Is Nothing Then
Exit Sub
Else
intFehler = 2
SortierRefField = SortierRef.PivotField
MsgBox SortierRefField
intFehler = 3
Set pvTable = ActiveSheet.PivotTables(1)
For Each pvField In pvTable.RowFields
intFehler = 4
pvField.AutoSort xlDescending, SortierRefField
Next
bolSortiert = True
intFehler = 0
End If
Application.ScreenUpdating = True
Application.EnableEvents = True
If bolSortiert = True Then
MsgBox ("PivotTabelle ist sortiert")
End If
Exit Sub
Fehler:
strMsg = "Fehler " & Err.Number & " ist aufgetreten!" & vbLf & Err.Description
Select Case intFehler
Case 1 'Keine Zelle selektiert
MsgBox strMsg & vbLf & vbLf & "Fehler bei Selektion, keine Zelle selektiert!"
Case 2 'Zelle außerhalb der Pivot-Tabelle selektiert
If MsgBox(strMsg & vbLf & vbLf & SortierRef.Value _
& ": Zelle außerhalb der PivotTabelle wurde selektiert" _
& vbLf & vbLf & "Sortierreferenz neu markieren?", vbYesNo) = vbYes Then
Application.ScreenUpdating = True
Resume Auswaehlen
End If
Case 3
MsgBox strMsg & vbLf & vbLf & "Pivottabelle fehlt"
Case 4 'Unzulässiges Feld in Pivot-Tabelle selectiert
If MsgBox(strMsg & vbLf & vbLf & "Feldzuweisung bei Sortierung fehlerhaft" _
& vbLf & vbLf & "Sortierreferenz neu markieren?", vbYesNo) = vbYes Then
Application.ScreenUpdating = True
Resume Auswaehlen
End If
Case Else
MsgBox strMsg
End Select
End Sub


Anzeige
AW: Pivot Tabelle sortieren - alle Felder per VBA
13.05.2008 17:21:08
Andreas
Hallo Franz,
ungeachtet der Tatsache, daß Pivot Tabellen VBA technisch komplexe Gebilde sind, verstehst Du dich anscheinend grandios darauf, sie dennoch zu beherrschen. Ich sitze gerade mit offenem Mund vor meinem Rechner wenn ich betrachte, was Dein Code leistet. Der Wahnsinn. Der läuft glatt durch und sortiert alles auf Teufel komm raus. Das so etwas diffiziles so perfektioniert werden kann, hätte ich nicht gedacht. Ich habe in den letzten Tagen so viel über Pivots gelernt und auch wieder in VBA Fortschritte gemacht. Es ist herrlich.
Vielen, Vielen Dank für Deine Geduld in dieser Sache.
Habe noch einen schönen Abend.
Liebe Grüße aus Berlin,
Andreas

Anzeige
AW: Pivot Tabelle sortieren - alle Felder per VBA
14.05.2008 04:41:59
fcs
Hallo Andreas,
freut mich, dass es jetzt rund läuft.
Pivot-Tabellen unter VBA grandios beherschen ist ja relativ. Unter den Blinden ist der einäugige halt König.
In deinem Fall war das Hauptproblem die aus der Eingabe resultierenden möglichen Fehler im Makro-Ablauf kontrolliert abzufangen und passende Hinweise zu geben, was schief gegangen ist. So ist die Fehlerbehandlung im Code fast lang wie die Hauptpozedur.
Gruß
Franz

319 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige