Nicht vorhandene Objekteigenschaft abfangen

  • #1
E

estoep

Mitglied
Themenersteller
Dabei seit
07.10.2005
Beiträge
9
Reaktionspunkte
0
Hallo zusammen,

ich bastele mal wieder mit Pivottabellen rum.  ;)

Folgender Code setzt mir auf mehreren Sheets die Pivot-Anzeige bestimmter Felder auf Alle und druckt das Sheet dann aus.
Das funktioniert im Prinzip prima.
Außer daß bei zwei Sheets das Field City zwar da ist, aber nicht als Auswahl angeboten wird.

In dem Fall liefert mir
          PfLfd.CurrentPage = Alle
den Fehler:
<Die CurrentPage-Eigenschaft des PivotField-Objektes kann nicht zugeordnet werden.>

Frage: kann ich irgendwie abfangen, ob das Field diese Eigenschaft besitzt? Bzw. wie müßte ich meine Einschränkung IF ...???? formulieren, wenn ich nicht weiß, auf welchem Sheet das Field angezeigt wird.

Danke für Eure Hilfe.

Hier der Source:
--------------------------------------------------------------------------------
For iLfd = 1 To 6
  strPrintPageLfd = SucheInRange(RgSheetToPrint, SheetPvChart & iLfd, ge_BerichtsTyp.ClaimSummary)
  If Len(Trim(strPrintPageLfd)) > 0 Then
    Set ChPrint = WbPrint.Sheets(strPrintPageLfd)
    For Each PfLfd In ChPrint.PivotLayout.PivotTable.PivotFields
      If PfLfd.Name = Status _
      Or PfLfd.Name = Type _
      Or PfLfd.Name = Country _
      Or PfLfd.Name = City Then
''??       If ????  Then
          PfLfd.CurrentPage = Alle
''??        End If
      End If
    Next PfLfd
    ChPrint.print
  Next iLfd


<Die CurrentPage-Eigenschaft des PivotField-Objektes kann nicht zugeordnet werden.>
 
  • #2
Hast du es schon mal so probiert ?
Code:
        On Error Resume Next
        PfLfd.CurrentPage = Alle
        If Err.Number <> 0 Then
         ->hat nicht geklappt
          Err.Clear
         ->...
        Else
         ->hat geklappt :-)
         ->...
        End If
        On Error GoTo 0
Gruß Matjes :)
 
  • #3
Danke, das funzt. :)

Aber interessieren würde es mich doch, ob ich das Vorhandensein von Eigenschaften abfragen kann.
 
  • #4
Hallo estoep,

ich hab dir mal ein Beispiel zusammengestellt, daß die erste Pivot-Tabelle in der aktiven Mappe etwas analysiert.

Gruß Matjes :)
Code:
Option Explicit
'****************************************************************************
Sub Excel_PivotTable_Analyse2()
  
  Dim pt As PivotTable
        
 ->** 1.gefundene Pivot-Tabelle setzen
  Set pt = PivotTabelle_dieErsteSetzen(ActiveWorkbook)
  If pt Is Nothing Then GoTo AUFRAEUMEN
  pt.Parent.Activate->Blatt mit Pivot-Tabelle aktivieren
  
  
 ->*** ALLE Pivot-Felder dieser Pivot-Tabelle ausgeben
  Call PivotTabelle_AllePivotFelderAusgeben(pt)
  
  
 ->*** Pivot-Felder dieser Pivot-Tabelle nach verschiedenen Kategorien ausgeben
 ->EINGEBLENDETE Pivot-Felder dieser Pivot-Tabelle ausgeben
  Call PivotTabelle_EingeblendetePivotFelderAusgeben(pt)
 ->ANGEZEIGTE DATEN-Pivot-Felder dieser Pivot-Tabelle ausgeben
  Call PivotTabelle_AngezeigteDatenPivotFelderAusgeben(pt)
 ->ANGEZEIGTE SEITEN-Pivot-Felder dieser Pivot-Tabelle ausgeben
  Call PivotTabelle_AngezeigteSeitenPivotFelderAusgeben(pt)
 ->SPALTEN-Pivot-Felder dieser Pivot-Tabelle ausgeben
  Call PivotTabelle_SpaltenPivotFelderAusgeben(pt)
 ->ZEILEN-Pivot-Felder dieser Pivot-Tabelle ausgeben
  Call PivotTabelle_ZeilenPivotFelderAusgeben(pt)
 ->AUSGEBLENDETE Pivot-Felder dieser Pivot-Tabelle ausgeben
  Call PivotTabelle_AusgeblendetePivotFelderAusgeben(pt)
  
  
 ->***
 ->AUSGEBLENDETE ITEMS eines sichtbaren Pivot-Felder dieser Pivot-Tabelle ausgeben
 ->Anschließend Abfrage, ob alle Items diese Feldes sichtbar gemacht werden sollen
 ->Bei ja, alle ausgeblendeten Items einblenden
  Call PivotTabelle_AusgeblendeteItemsEinesPivotFeldesAusgeben(pt)
  
 ->***
 ->AUSGEBLENDETE ITEMS eines SEITEN-Pivot-Feldes dieser Pivot-Tabelle ausgeben
 ->Anschließend Abfrage, ob alle Items diese Feldes sichtbar gemacht werden sollen
 ->Bei ja, alle ausgeblendeten Items einblenden
  Call PivotTabelle_AusgeblendeteItemsEinesSeitenPivotFeldesAusgeben(pt)
  
AUFRAEUMEN:
  Set pt = Nothing
End Sub
'****************************************************************************
Private Function PivotTabelle_dieErsteSetzen(wb As Workbook) As PivotTable
'*** 1.gefundene Pivot-Tabelle setzen
  
  Dim ws As Worksheet, pt As PivotTable
  
  For Each ws In ActiveWorkbook.Worksheets
    If ws.PivotTables.Count > 0 Then
      Set pt = ws.PivotTables(1)
      Exit For
    End If
  Next
  
  If pt Is Nothing Then
    MsgBox Es ist keine Pivot-Tabelle in der Mappe-> & wb.Name &-> vorhanden.
  Else
    MsgBox Die Pivot-Tabelle-> & pt.Name &-> wurde ausgewählt.
    Set PivotTabelle_dieErsteSetzen = pt
  End If
  
AUFRAEUMEN:
  Set ws = Nothing: Set pt = Nothing
End Function
'****************************************************************************
Private Function PivotTabelle_AllePivotFelderAusgeben(pt As PivotTable)
'ALLE Pivot-Felder dieser Pivot-Tabelle ausgeben
  Dim pf As PivotField
  Dim s As String, x As Long
  
  s = 
  For x = 1 To pt.PivotFields.Count
    Set pf = pt.PivotFields(x)
    s = s & Feld  & x & :  Name: & pf.Name & vbLf
  Next
  
  MsgBox _
    Auflistung ALLER Pivot-Felder der Pivot-Tabelle-> & pt.Name &-> & vbLf & _
    s
    
AUFRAEUMEN:
  Set pf = Nothing
End Function
'****************************************************************************
Private Function PivotTabelle_EingeblendetePivotFelderAusgeben(pt As PivotTable)
'EINGEBLENDETE Pivot-Felder dieser Pivot-Tabelle ausgeben
  Dim pf As PivotField
  Dim s As String, x As Long
  
  s = 
  For x = 1 To pt.VisibleFields.Count
    Set pf = pt.VisibleFields(x)
    s = s & Feld  & x & :  Name: & pf.Name & vbLf
  Next
  
  MsgBox _
    Auflistung EINGEBLENDETE Pivot-Felder der Pivot-Tabelle-> & pt.Name &-> & vbLf & _
    s
    
AUFRAEUMEN:
  Set pf = Nothing
End Function
'****************************************************************************
Private Function PivotTabelle_AusgeblendetePivotFelderAusgeben(pt As PivotTable)
'AUSGEBLENDETE Pivot-Felder dieser Pivot-Tabelle ausgeben
  Dim pf As PivotField
  Dim s As String, x As Long
  
  s = 
  For x = 1 To pt.HiddenFields.Count
    Set pf = pt.HiddenFields(x)
    s = s & Feld  & x & :  Name: & pf.Name & vbLf
  Next
  If s =  Then s = Keine ausgeblendeten Felder vorhanden.
  
  MsgBox _
    Auflistung AUSGEBLENDETE Pivot-Felder der Pivot-Tabelle-> & pt.Name &-> & vbLf & _
    s
    
AUFRAEUMEN:
  Set pf = Nothing
End Function
'****************************************************************************
Private Function PivotTabelle_AngezeigteSeitenPivotFelderAusgeben(pt As PivotTable)
'ANGEZEIGTE SEITEN-Pivot-Felder dieser Pivot-Tabelle ausgeben
  Dim pf As PivotField
  Dim s As String, x As Long
  
  s = 
  For x = 1 To pt.PageFields.Count
    Set pf = pt.PageFields(x)
    s = s & Feld  & x & :  Name: & pf.Name & vbLf
  Next
  If s =  Then s = Keine SEITEN-Felder vorhanden.
  
  MsgBox _
    Auflistung ANGEZEIGTE SEITEN-Pivot-Felder der Pivot-Tabelle-> & pt.Name &-> & vbLf & _
    s

AUFRAEUMEN:
  Set pf = Nothing
End Function
'****************************************************************************
Private Function PivotTabelle_SpaltenPivotFelderAusgeben(pt As PivotTable)
'SPALTEN-Pivot-Felder dieser Pivot-Tabelle ausgeben
  Dim pf As PivotField
  Dim s As String, x As Long
  
  s = 
  For x = 1 To pt.ColumnFields.Count
    Set pf = pt.ColumnFields(x)
    s = s & Feld  & x & :  Name: & pf.Name & vbLf
  Next
  If s =  Then s = Keine SPALTEN-Felder vorhanden.
  
  MsgBox _
    Auflistung SPALTEN-Pivot-Felder der Pivot-Tabelle-> & pt.Name &-> & vbLf & _
    s

AUFRAEUMEN:
  Set pf = Nothing
End Function
'****************************************************************************
Private Function PivotTabelle_ZeilenPivotFelderAusgeben(pt As PivotTable)
'ZEILEN-Pivot-Felder dieser Pivot-Tabelle ausgeben
  Dim pf As PivotField
  Dim s As String, x As Long
  
  s = 
  For x = 1 To pt.RowFields.Count
    Set pf = pt.RowFields(x)
    s = s & Feld  & x & :  Name: & pf.Name & vbLf
  Next
  If s =  Then s = Keine ZEILEN-Felder vorhanden.
  
  MsgBox _
    Auflistung ZEILEN-Pivot-Felder der Pivot-Tabelle-> & pt.Name &-> & vbLf & _
    s

AUFRAEUMEN:
  Set pf = Nothing
End Function
'****************************************************************************
Private Function PivotTabelle_AngezeigteDatenPivotFelderAusgeben(pt As PivotTable)
'ANGEZEIGTE DATEN-Pivot-Felder dieser Pivot-Tabelle ausgeben
  Dim pf As PivotField
  Dim s As String, x As Long
  
  s = 
  For x = 1 To pt.DataFields.Count
    Set pf = pt.DataFields(x)
    s = s & Feld  & x & :  Name: & pf.Name & vbLf
  Next
  If s =  Then s = Keine DATEN-Felder vorhanden.
  
  MsgBox _
    Auflistung ANGEZEIGTE DATEN-Pivot-Felder der Pivot-Tabelle-> & pt.Name &-> & vbLf & _
    s

AUFRAEUMEN:
  Set pf = Nothing
End Function
'****************************************************************************
Private Function PivotTabelle_AusgeblendeteItemsEinesPivotFeldesAusgeben(pt As PivotTable)
'AUSGEBLENDETE ITEMS eines sichtbaren Pivot-Felder dieser Pivot-Tabelle ausgeben
'Anschließend Abfrage, ob alle Items diese Feldes sichtbar gemacht werden sollen
'Bei ja, alle ausgeblendeten Items einblenden

  Dim pf As PivotField, pe As PivotItem
  Dim s As String, x As Long, y As Long, bSeitenFeld As Long
  
  s = 
  For x = 1 To pt.VisibleFields.Count
    Set pf = pt.VisibleFields(x)
    bSeitenFeld = False
    For y = 1 To pt.PageFields.Count
      If pf.Name = pt.PageFields(y).Name Then bSeitenFeld = True: Exit For
    Next
    If Not bSeitenFeld Then
     ->kein Seitenfeld
      If pf.HiddenItems.Count > 0 Then
       ->ein Feld mit ausgeblendeten Items gefunden
        For y = 1 To pf.HiddenItems.Count
          Set pe = pf.HiddenItems(y)
          s = s & pe.Name & vbLf
        Next
        If vbYes = MsgBox( _
          Auflistung AUSGEBLENDETE ITEMS des Pivot-Feldes-> & pf.Name & _
         -> der Pivot-Tabelle-> & pt.Name &-> & vbLf & _
          s & vbLf & _
          Sollen die ausgeblendeten Items eingeblendet werden?, _
          vbDefaultButton1 + vbQuestion + vbYesNo) Then
          
         ->ausgeblendete Items sichtbar machen
         ->!!!!!!!!! vom höchsten zum niedrigsten Index !!!!!!!!!
         ->klappt nur bei Nicht SEITENFELDERN
          For y = pf.HiddenItems.Count To 1 Step -1
            pf.HiddenItems(y).Visible = True
          Next
        End If
      End If
    End If
  Next
  
  If s =  Then
    MsgBox _
      Keine Pivot-Feld mit AUSGEBLENDETEN ITEMS in Pivot-Tabelle-> & _
      pt.Name &-> vorhanden.
  End If
  

AUFRAEUMEN:
  Set pf = Nothing: Set pe = Nothing
End Function

'****************************************************************************
Private Function PivotTabelle_AusgeblendeteItemsEinesSeitenPivotFeldesAusgeben(pt As PivotTable)
'AUSGEBLENDETE ITEMS eines Seiten-Pivot-Feldes dieser Pivot-Tabelle ausgeben
'Anschließend Abfrage, ob alle Items diese Feldes sichtbar gemacht werden sollen
'Bei ja, alle ausgeblendeten Items einblenden

  Dim pf As PivotField, pe As PivotItem
  Dim s As String, x As Long, y As Long
  
  s = 
  For x = 1 To pt.PageFields.Count
    Set pf = pt.PageFields(x)
    If pf.HiddenItems.Count > 0 Then
     ->ein Feld mit ausgeblendeten Items gefunden
      For y = 1 To pf.HiddenItems.Count
        Set pe = pf.HiddenItems(y)
        s = s & pe.Name & vbLf
      Next
      If vbYes = MsgBox( _
        Auflistung AUSGEBLENDETE ITEMS des Seiten-Pivot-Feldes-> & pf.Name & _
       -> der Pivot-Tabelle-> & pt.Name &-> & vbLf & _
        s & vbLf & _
        Sollen alle Items eingeblendet werden?, _
        vbDefaultButton1 + vbQuestion + vbYesNo) Then
        pf.CurrentPage = (Alle) ->bei Excel 97
      End If
    End If
  Next
  
  If s =  Then
    MsgBox _
      Keine Seiten-Pivot-Feld mit AUSGEBLENDETEN ITEMS in Pivot-Tabelle-> & _
      pt.Name &-> vorhanden.
  End If
  
AUFRAEUMEN:
  Set pf = Nothing: Set pe = Nothing
End Function
 
Thema:

Nicht vorhandene Objekteigenschaft abfangen

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben