Excel VBA检查轴字段是否应格式化为数字或百分比

Excel VBA检查轴字段是否应格式化为数字或百分比,excel,pivot-table,percentage,vba,Excel,Pivot Table,Percentage,Vba,我不知道这是否可行,但我正在尝试设计一个宏,将所有透视字段作为数字或百分比添加到透视表的值部分 以下是我到目前为止的情况: 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 D

我不知道这是否可行,但我正在尝试设计一个宏,将所有透视字段作为数字或百分比添加到透视表的值部分

以下是我到目前为止的情况:

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
但是接下来我想添加一个if语句,看看是否应该将字段格式化为百分比。 我的想法是:

  • 检查字段中的单个记录值是否小于100%(或1)(这在95%的情况下都是理想的)


  • 检查字段的总和是否小于任意数字,例如,如果有人感兴趣,我会这样做:

    子自动添加字段()


    End Sub

    如果有人感兴趣,我会这样做:

    子自动添加字段()


    End Sub

    在有人给出更好的答案之前,您可以研究如何循环数据透视字段中的项目(可能是数据透视表1.列字段(1).子项(1).值)谢谢,我想我有个主意,我将尝试对字段求和,如果有错误,那么它必须是文本,否则在将求和字段添加到透视表后,请检查其值,然后对其进行格式化。求和忽略文本值,但您可能会发现其他函数不这样做。我在考虑逐个检查数据透视字段值并求和,直到有人给出更好的答案,您可以查看数据透视字段项的循环(可能是数据透视表1.ColumnFields(1.ChildItems(1.Value))谢谢,我想我有个主意,我将尝试对字段求和,如果有错误,那么它必须是文本,否则在将求和字段添加到透视表后,请检查其值,然后对其进行格式化。求和忽略文本值,但您可能会发现其他函数不这样做。我在想一个接一个地检查数据透视字段的值,并对它们求和
    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