我想我遗漏了一些明显的东西,但我已经看了很长时间了,我想我可能对它视而不见。我编写了一个工作表,以便从下载的报表中创建数据透视表,并将特定的筛选器应用于数据透视表-我知道,在某些情况下,筛选器列表中只有1项,因此无法应用并返回错误。
我已经设法添加了“On Error GoTo...”超过我知道的代码将无法处理的行。
然而,我在同一张工作表上还有第二个透视表,它应用了相同的过滤器,但情况相反-即过滤器通常会有两个项目,所以这两个数据透视表最终显示了每个项目的内容的细分。
问题是“On Error GoTo...”没有在第二个项目上工作。我使用不同的名称命名GoTo位置-第一个轴心GoTo = 'NoOKL:‘,第二个= 'NoOKS:’。
因为第一个透视上的错误将意味着第二个透视上的错误,每次我试图通过在第一个透视的错误处理中添加'P = 1‘来解决这个问题,然后为第二个透视添加以下代码:
If P = 1 Then GoTo NoOKS
With ActiveSheet.PivotTables("PivotTable11").PivotFields("CATEGORY")
.PivotItems("OKL_CONTRACTS").Visible = False
End With
ActiveSheet.PivotTables("PivotTable11").PivotFields("CATEGORY"). _
EnableMultiplePageItems = True
NoOKS:
End If
我已经尝试将GoTo位置'NoOKS‘移到If语句内部和外部,但得到了相同的结果。
任何帮助都将不胜感激。
发布于 2021-02-15 12:50:17
下面是一个示例,展示了如果省略所有GoTo的代码会是什么样子。
If P = 1 Then
With ActiveSheet.PivotTables("PivotTable12").PivotFields("CATEGORY")
.PivotItems("OKL_CONTRACTS").Visible = False
.EnableMultiplePageItems = False
End With
Else
With ActiveSheet.PivotTables("PivotTable11").PivotFields("CATEGORY")
.PivotItems("OKL_CONTRACTS").Visible = False
.EnableMultiplePageItems = True
End With
End If
这段代码假设您有两个透视表,您希望根据要显示的项数隐藏其中一个透视表(假定为P
),并以不同的方式设置EnableMultiplePageItems
属性。这在上面的示例中没有多大意义,但其目的是展示If和Else的用法,而不是GoTo。
我指出,根据语句(P = 1)
的计算结果,EnableMultiplePageItems = (P = 1)
还会将该属性设置为True或False。在上面的示例中,属性属于不同的对象,但是如果您必须根据P的值在项目中将相同对象的相同属性设置为不同的值,则该方法将避免使用If
,更不用说GoTo
了,还会减少代码量。
https://stackoverflow.com/questions/66206574
复制