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语句,看看是否应该将字段格式化为百分比。
我的想法是:
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