Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBA-Code verbessern für Pivot-Seitenfelder

144 views
Skip to first unread message

Frank Vellner

unread,
May 6, 2009, 5:06:50 AM5/6/09
to
Liebe NG,

beim unten aufgefᅵhrten Makro werden alle Pivot-Tabellen einer
Arbeitsmappe auf die selben Seitenfelder - der gerade aktiven PT -
eingestellt. Das funktioniert soweit prima.

Es bricht jedoch ab, wenn ein Seitenfeld der aktiven PT in irgendeiner
zu bearbeitenden nicht vorhanden ist. Da wᅵrde ich mir wᅵnschen, wenn
es etwas toleranter arbeitet: Nur wenn das Seitenfeld in der anderen PT
vorhanden ist, soll es wie bei der aktiven engestellt werden -
ansonsten soll es ignoriert werden.

Damit kein falscher Verdacht aufkommt: Der Code ist natᅵrlich
eigentlich nicht von mir sondern von Thomas Ramel (Ursprungsname
PivotTable_Gleich()). Er bezog sich jedoch nur auf ein Tabellenblatt
und ich habe ihn auf die ganze Mappe erweitert (erneut mit einem andern
Thomas-Code, den ich reingemixt habe):

Sub Pivot_SeitenfeldGleichUeberall()

Dim ptActive As PivotTable
Dim pt As PivotTable
Dim pf As PivotField
Dim wks As Worksheet

On Error Resume Next
Set ptActive = ActiveCell.PivotTable
On Error GoTo 0
If Not ptActive Is Nothing Then
On Error GoTo ErrorHandler
Application.EnableEvents = False
For Each wks In ActiveWorkbook.Worksheets
For Each pt In wks.PivotTables
If pt.Name <> ptActive.Name Then
For Each pf In ptActive.PageFields
pt.PivotFields(pf.Value).CurrentPage = _
ptActive.PivotFields(pf.Value).CurrentPage.Value
Next pf
End If
Next pt
Next wks
Else
MsgBox "Bitte zuerst eine Zelle in einer PT markieren"
End If

ResumePoint:
Application.EnableEvents = True
Exit Sub

ErrorHandler:
If Err.Number = 1004 Then
'MsgBox (wks.Name & pt.Name)
wks.Activate
pt.TableRange1.Select
End If
Resume ResumePoint:
End Sub

Viele Grᅵᅵe
Frank

Thomas Ramel

unread,
May 8, 2009, 12:35:05 AM5/8/09
to
Gr嚙箴zi Frank

Frank Vellner schrieb am 06.05.2009

> beim unten aufgef嚙篁rten Makro werden alle Pivot-Tabellen einer

> Arbeitsmappe auf die selben Seitenfelder - der gerade aktiven PT -
> eingestellt. Das funktioniert soweit prima.
>
> Es bricht jedoch ab, wenn ein Seitenfeld der aktiven PT in irgendeiner

> zu bearbeitenden nicht vorhanden ist. Da w嚙緝de ich mir w嚙緯schen, wenn

> es etwas toleranter arbeitet: Nur wenn das Seitenfeld in der anderen PT
> vorhanden ist, soll es wie bei der aktiven engestellt werden -
> ansonsten soll es ignoriert werden.

Da braucht es eigentlich 'nur' eine weitere Schleife, in der die
Seitenfelder der anderen PT's durchlaufen werden und der Abgleich nur dann
vorgenommen wird, wenn das Feld auch in der anderen PT enthalten ist.

Die folgenden Zeilen sollten dies erf嚙締len, denke ich:

Sub Pivot_SeitenfeldGleichUeberall()
Dim ptActive As PivotTable
Dim pt As PivotTable

Dim pf1 As PivotField
Dim pf2 As PivotField
Dim wks As Worksheet

On Error Resume Next
Set ptActive = ActiveCell.PivotTable
On Error GoTo 0
If Not ptActive Is Nothing Then
On Error GoTo ErrorHandler
Application.EnableEvents = False
For Each wks In ActiveWorkbook.Worksheets
For Each pt In wks.PivotTables
If pt.Name <> ptActive.Name Then

For Each pf1 In ptActive.PageFields
For Each pf2 In pt.PageFields
If pf1.Name = pf2.Name Then
pf2.CurrentPage = _
pf1.CurrentPage.Value
End If
Next pf2
Next pf1


End If
Next pt
Next wks
Else
MsgBox "Bitte zuerst eine Zelle in einer PT markieren"
End If

ResumePoint:
Application.EnableEvents = True
Exit Sub

ErrorHandler:
If Err.Number = 1004 Then
'MsgBox (wks.Name & pt.Name)
wks.Activate
pt.TableRange1.Select
End If
Resume ResumePoint:
End Sub

Mit freundlichen Gr嚙編sen
Thomas Ramel

--
- MVP f嚙緝 Microsoft-Excel -
[Vista Ultimate SP-1 / xl2007 SP-1]

Frank Vellner

unread,
May 8, 2009, 4:55:33 AM5/8/09
to
Moin Thomas,

> Da braucht es eigentlich 'nur' eine weitere Schleife, in der die
> Seitenfelder der anderen PT's durchlaufen werden und der Abgleich nur
> dann vorgenommen wird, wenn das Feld auch in der anderen PT enthalten
> ist.

danke f�r die Anf�hrungsstriche um das 'nur' ;-)

Tja, und dein Code funktioniert nat�rlich super und rasend schnell.
Siehst dann am End immer so sch�n einfach und �bersichtlich aus... das
macht's so genial.

Ganz herzlichen Dank f�r deine M�he und ein sch�nes Wochenende w�nscht
der Frank

0 new messages