如何从数据透视表中

时间:2016-06-06 16:23:31

标签: vba excel-vba excel

我有这个代码取消选择每个小于10的值,它可以工作。

Dim pt as PivotTable
Dim pf as PivotField
Dim pi as PivotItem

Set pt = ActiveSheet.PivotTables("PivotTable1")
Set pf = pt.PivotFields("Count")

For each pi in pf.PivotItems
If pi.Value < 10 Then pi.Visible = False
Next

但是我在这里有文本字符串(如“NA”和(空格))导致此公式不起作用。我收到一条错误消息:“运行时错误'13':当pi.Value遇到”NA“时键入不匹配”。我将代码调整为:

If pi.Value < 10 or pi.Value ="NA" or pi.Value ="(Blank)" Then pi.Visible = False

但是我仍然收到相同的错误消息。我们有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

这应该有效:

If IIf(VarType(Pi.Value) = vbError, 0, Pi.Value) < 10 Then Pi.Visible = False

如果您真的只想删除BlanksNullsErrors,那么您也可以使用此功能:

For Each pi In pf.PivotItems
    If IIf(VarType(pi.Value) = vbError Or _
           VarType(pi.Value) = vbEmpty Or _
           VarType(pi.Value) = vbNull, _
           0, pi.Value) < 10 Then pi.Visible = False
Next

答案 1 :(得分:0)

谢谢拉尔夫!我调整代码看起来像这样,它摆脱了NA和空白。如果你有任何其他方法可以缩短这一点,我肯定会对此进行测试:)

For Each pi In pf.PivotItems
   If IIf(VarType(pi.Value) = vbError, 0, pi.Value) < 10 Or _
   IIf(VarType(pi.Value) = vbError, 0, pi.Value) = "NA" Or _
   IIf(VarType(pi.Value) = vbError, 0, pi.Value) = "(blank)" _
   Then pi.Visible = False
Next