2017-02-14 4 views
1

Ich weiß nicht, ob dies möglich ist, aber ich versuche, ein Makro, das alle Pivot-Felder in die Werte Abschnitt einer Pivot-Tabelle als entweder fügt Zahlen oder Prozentsätze.Excel VBA Überprüfen Sie, ob Pivot-Feld sollte als eine Zahl oder einen Prozentsatz formatiert werden

Hier ist, was ich bisher:

If MsgBox("Do you want to add all pivot table fields as values?", vbOKCancel + vbQuestion, "Accept/Reject") = vbCancel Then 
    Exit Sub 
End If 

Dim pt As PivotTable 
Dim pf As PivotField 
Dim pivotTableName As String 

On Error Resume Next 
Set pt = ActiveCell.PivotTable 

If pt Is Nothing Then 
    pivotTableName = InputBox("Enter the pivot table name.") 
    Set pt = ActiveSheet.PivotTables(pivotTableName) 
End If 

For Each pf In pt.PivotFields 
    pt.AddDataField pt.PivotFields(pf.Name), pf.Name & " ", xlSum 
    pt.PivotFields(pf.Name & " ").NumberFormat = "#,##0" 
Next pf 

Aber nächstes würde Ich mag ein hinzufügen, wenn Aussage, um zu sehen, ob das Feld als Prozentsatz stattdessen formatiert werden soll. Meine Ideen waren:

  1. prüfen ein einzelner Datensatz Wert in einem Feld, um zu sehen, wenn es weniger als 100% (oder 1)

  2. (dies würde in 95% der Situationen, die ich bin in ideal sein)
  3. überprüfen sie, ob die Summe eines Feldes geringer ist als eine beliebige Anzahl wie < 100 (nicht perfekt)

  4. überprüfen sie, ob der Name des Feldes% in ihm hat (was ich werde wahrscheinlich mit gehen)

    Für jedes Feld i n pt.PivotFields

    Wenn InStr (fld.Value, "%") Dann

    Weiter

  5. Überprüfen Sie, ob das Feld ein berechnetes Feld ist (nicht perfekt)

    For Each fld in pt.PivotFields

    Wenn fld.IsCalculated Dann

    Weiter

Sind die ersten beiden möglich? Hat jemand bessere Ideen?

Danke!

P.S. Eine andere Sache, die ich interessiert war, ist zu überprüfen, ob das Feld Text enthält oder ob das Feld nicht summiert werden kann.

+0

, bis jemand eine bessere Antwort gibt, können Sie die Einzelteile Blick in Schleifen der PivotField https://msdn.microsoft.com/en-us/library/office/ff820762.aspx (vielleicht pivotTable1.ColumnFields (1) .ChildItems (1) .Value) – Slai

+0

Danke dafür, ich denke, ich habe eine Idee, ich werde versuchen, das Feld summieren, wenn Fehler dann muss es Text nach dem Hinzufügen der su sein mmed-Feld an die Pivot-Tabelle überprüfen Sie ihren Wert dann formatieren Sie es. –

+0

Sum ignoriert Textwerte, aber möglicherweise finden Sie andere Funktionen, die nicht funktionieren. Ich dachte daran, die PivotField-Werte nacheinander durchzugehen, um sie zu überprüfen und zu summieren – Slai

Antwort

0

Dies ist, was ich tun, am Ende, wenn jemand interessiert ist:

Sub AutoAddFields()

If MsgBox("Do you want to add all pivot table fields as values?", vbOKCancel + vbQuestion, "Accept/Reject") = vbCancel Then 
    Exit Sub 
End If 

Dim pt As PivotTable 
Dim pf As PivotField 
Dim pivotTableName As String 

On Error Resume Next 
Set pt = ActiveCell.PivotTable 

If pt Is Nothing Then 
    pivotTableName = InputBox("Enter the pivot table name.") 
    Set pt = ActiveSheet.PivotTables(pivotTableName) 
End If 

For Each pf In pt.PivotFields 
    If InStr(pf.Value, "%") > 0 Then 
     pt.AddDataField pt.PivotFields(pf.Name), pf.Name & " ", xlSum 
     pt.PivotFields(pf.Name & " ").NumberFormat = "0.0%" 
    Else 
     If pf.IsCalculated Then 
      If InStr(pf.Formula, "/") > 0 Then 
       pt.AddDataField pt.PivotFields(pf.Name), pf.Name & " ", xlSum 
       pt.PivotFields(pf.Name & " ").NumberFormat = "0.0%" 
      Else 
       pt.AddDataField pt.PivotFields(pf.Name), pf.Name & " ", xlSum 
       pt.PivotFields(pf.Name & " ").NumberFormat = "#,##0" 
      End If 
     Else 
      pt.AddDataField pt.PivotFields(pf.Name), pf.Name & " ", xlSum 
      pt.PivotFields(pf.Name & " ").NumberFormat = "#,##0" 
     End If 
    End If 
Next pf 

For Each pf In pt.PivotFields 
    If (pt.GetPivotData(pf.Value & " ") = 0) Then 
     pt.PivotFields(pf.Value & " ").Orientation = xlHidden 
    End If 
Next pf 

End Sub

Verwandte Themen