VBA - 测试一个值是否是 PivotField 的有效选择

VBA - test if a value is a valid selection for a PivotField

对于 Sheet1 上的数据透视表 table (pt1),我使用 VBA 使用以下代码更改筛选字段 (filterfield) 的值。假设字段的值可以是 A、B 或 C

Sheets("Sheet1").PivotTables("pt1").PivotFields("filterfield").CurrentPage = "A"

有时,为了这个问题的目的,假设是 randomonly,A、B 或 C 将不是 filterfield 的有效选择。当 VBA 尝试更改字段时,它会抛出 运行 次错误。我想避免这种情况。

在我 运行 上面的代码之前,如何检查我的值是否对 filterfield 有效?我想避免使用 On Error 并且 VBA 没有 try/catch 功能..

您可以遍历 PivotItems 并根据您的测试检查 Name

Sub CheckIfPivotFieldContainsItem()

    Dim pt As PivotTable
    Set pt = Sheet1.PivotTables(1)

    Dim test_val As Variant
    test_val = "59"

    Dim pivot_item As PivotItem
    For Each pivot_item In pt.PivotFields("C").PivotItems
        If pivot_item.Name = test_val Then
            Debug.Print "MATCHES"
        End If
    Next pi

End Sub

相关资料表明应该存在匹配,确实存在returns MATCHES.

如果你想有一个辅助函数并且在不循环值的情况下执行此操作,你可以使用 visual basic OnErrorResumeNext 技巧。

Private Function hasPivotItem(pField As PivotField, value As String) As Boolean
    On Error Resume Next
    hasPivotItem = Not IsNull(pField.PivotItems(value))
    On Error GoTo 0
End Function

' somewhere in your vba program
Debug.Print hasPivotItem(ptTable.PivotFields("Level"), "1")
Debug.Print hasPivotItem(ptTable.PivotFields("Level"), "-123")