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

Pivotfeld - gruppieren per VBA geht nicht

271 views
Skip to first unread message

Volker Neurath

unread,
Dec 8, 2010, 6:31:09 AM12/8/10
to
Hi zusammen,

folgender code führt zu einem fehler, der nachfolgend Excel sogar
komplett spinnen lässt, so dass ich es per Taskmanager abschiessen MUSS

[code].PivotFields("SAP document date").VisibleItems(1).LabelRange.Group
_
Start:=True, End:=True, _
periods:=Array(False, False, False, False, True, False,
True)[/code]


auch in leicht modifizierter Form:

[code].PivotFields("SAP document date").VisibleItems(1).Group _
Start:=True, End:=True, _
periods:=Array(False, False, False, False, True, False,
True)[/code]

wo liegt mein Fehler und wie geht es richtig?

Gruppierung über dieses Feld soll nach Jahren und Monaten erfolgen.
ausserdem soll das entsehende "Jahr" Feld auf 2010 voreingestellt werden

Volker

--
Wenn es vom Himmel Zitronen regnet -- lerne, Limonade zu machen.

Claus Busch

unread,
Dec 8, 2010, 6:57:40 AM12/8/10
to
Hallo Volker,

beim Gruppieren darf nur eine Zelle des Bereichs selektiert sein.
Probiers mal so:

Dim pt As PivotTables
Set pt = ActiveSheet.PivotTables

With pt(1)
With .PivotFields("SAP document date")
With .DataRange.Cells(1)
.Group Start:=True, End:=True, Periods:=Array(False, _


False, False, False, True, False, True)

End With
End With
End With


Mit freundlichen Grüssen
Claus Busch
--
Win XP Prof SP2 / Vista Ultimate SP2
Office 2003 SP2 /2007 Ultimate SP2

Volker Neurath

unread,
Dec 8, 2010, 7:19:07 AM12/8/10
to
Claus Busch wrote:

> Dim pt As PivotTables
> Set pt = ActiveSheet.PivotTables

> With pt(1)
> With .PivotFields("SAP document date")
> With .DataRange.Cells(1)
> .Group Start:=True, End:=True, Periods:=Array(False, _
> False, False, False, True, False, True)
> End With
> End With
> End With

Demnach hat Michael Kofler in seinem Buch also unsinn geschrieben -
daher hatte ich nämlich meine erste codezeile (die mit LabelRange drin)
- danke für den Hinweis.

Übrigens bedauerlich, dass es offenbar in keinem Buch eine wirklich
ausführliche Darstellung des Themas "Pivottabellen mit VBA" gibt ...

Volker Neurath

unread,
Dec 8, 2010, 7:22:33 AM12/8/10
to
Claus Busch wrote:

[funktionierenden code]

Danke, das hat hervorragend geklappt.

Zusatzfrage:
wenn jetzt das Jahr 2010 voreingestellt sein soll - reicht es, dafür
einfach noch

PivotFields("Jahre").CurrentPage="2010"

zwischen Letztes und vorletztes End With zu schreiben?

Claus Busch

unread,
Dec 8, 2010, 7:42:25 AM12/8/10
to
On 8 Dez., 13:22, Volker Neurath <neande...@expires-31-12-2010.news-
group.org> wrote:
> wenn jetzt das Jahr 2010 voreingestellt sein soll - reicht es, daf r

> einfach noch
>
> PivotFields("Jahre").CurrentPage="2010"
>
> zwischen Letztes und vorletztes End With zu schreiben?

was gruppierst du denn? Ein Seitenfeld (Berichtsfilter) oder ein
Zeilenfeld?
Du musst dann das Datum als Zahl bei Start und bei Ende eingeben, für
2010 dann also:
.Group Start:=40179, End:=40543 usw

Mit freundlichen Grüßen
Claus Busch

Volker Neurath

unread,
Dec 8, 2010, 7:53:07 AM12/8/10
to
Claus Busch wrote:

> On 8 Dez., 13:22, Volker Neurath <neande...@expires-31-12-2010.news-
> group.org> wrote:
>> wenn jetzt das Jahr 2010 voreingestellt sein soll - reicht es, daf r
>> einfach noch
>>
>> PivotFields("Jahre").CurrentPage="2010"
>>
>> zwischen Letztes und vorletztes End With zu schreiben?

> was gruppierst du denn? Ein Seitenfeld (Berichtsfilter) oder ein
> Zeilenfeld?

Uuups!
Stympt, das ist kein Seiten- sondern ein Spaltenfeld.

> Du musst dann das Datum als Zahl bei Start und bei Ende eingeben, für
> 2010 dann also:
> .Group Start:=40179, End:=40543 usw

Muss das wirklich in dieser Schreibweise erfolgen?!

Danke.

Claus Busch

unread,
Dec 8, 2010, 7:56:52 AM12/8/10
to
Hallo Volker,

Am Wed, 08 Dec 2010 13:53:07 +0100 schrieb Volker Neurath:

> Muss das wirklich in dieser Schreibweise erfolgen?!

nein, du kannst es auch als Datum schreiben:
Start:=DateSerial(2010, 1, 1), End:=DateSerial(2010, 12, 31)

Volker Neurath

unread,
Dec 8, 2010, 8:11:56 AM12/8/10
to
Claus Busch wrote:

> Hallo Volker,

> Am Wed, 08 Dec 2010 13:53:07 +0100 schrieb Volker Neurath:

>> Muss das wirklich in dieser Schreibweise erfolgen?!

> nein, du kannst es auch als Datum schreiben:
> Start:=DateSerial(2010, 1, 1), End:=DateSerial(2010, 12, 31)

Danke.

Vorerst letzte Frage:

da in dem Datenbestand auch Zeilen ohne Datum in diesem Feld waren, habe
ich per code ein Dummy-Datum eingefügt, und zwar den 1.1.1900

Jetzt erscheint aber in dem Feld "Jahre" der Gruppierung *jedes* Jahr
zwischen 1900 und 2010, unabhängig davon, welche Jahre wirklich in dem
Bestand enthalten sind.
Lässt sich das ändern? wie?

Claus Busch

unread,
Dec 8, 2010, 8:19:58 AM12/8/10
to
Hallo Volker,

Am Wed, 08 Dec 2010 14:11:56 +0100 schrieb Volker Neurath:

> da in dem Datenbestand auch Zeilen ohne Datum in diesem Feld waren, habe
> ich per code ein Dummy-Datum eingefügt, und zwar den 1.1.1900
>
> Jetzt erscheint aber in dem Feld "Jahre" der Gruppierung *jedes* Jahr
> zwischen 1900 und 2010, unabhängig davon, welche Jahre wirklich in dem
> Bestand enthalten sind.

bei mir erscheint nur das Jahr 1900. Die anderen Jahre dürften nicht
auftauchen, da sie in der Quelltabelle nicht vorhanden sind.

Und die Werte außerhalb 2010 kannst du ja ausblenden:
With ActiveSheet.PivotTables("PivotTable1").PivotFields("SAP document date")
.PivotItems("<01/01/2010").Visible = False
.PivotItems(">31/12/2010").Visible = False
End With

Volker Neurath

unread,
Dec 8, 2010, 8:48:52 AM12/8/10
to
Hi Claus,

Claus Busch wrote:

> Hallo Volker,

>> Jetzt erscheint aber in dem Feld "Jahre" der Gruppierung *jedes* Jahr

>> zwischen 1900 und 2010, unabhängig davon, welche Jahre wirklich in dem
>> Bestand enthalten sind.

> bei mir erscheint nur das Jahr 1900. Die anderen Jahre dürften nicht
> auftauchen, da sie in der Quelltabelle nicht vorhanden sind.

Merkwürdig - bei mir werden in dieser Auswahlbox definitiv alle
Zwischenjahre angezeigt...

> Und die Werte außerhalb 2010 kannst du ja ausblenden:
> With ActiveSheet.PivotTables("PivotTable1").PivotFields("SAP document date")
> .PivotItems("<01/01/2010").Visible = False
> .PivotItems(">31/12/2010").Visible = False
> End With

Sehr schön - teste ich morgen ;)

Jetzt fällt mir aber gerade doch noch was ein:
wie weise ich einem Datenfeld eine andere Berechnungsanweisung zu?

Wenn ich schreibe:

...
.PivotFields("MeinFeld").orientation=xlDataField

wird das Feld ja mit der Standardfunktion eingerichtet, IIRC ist das
"Anzahl", ich erhalte dann ein Feld "Anzahl von MeinFeld"

Ich will da aber nun als Berechnung "Summe" drin haben.

Wie geht das per code?

Meine ganze aktuelle aktion mache ich für unsere Außendienstler - von
denen einige ziemliche EDV-Allergiker sind ;)

0 new messages