如何检测空白PivotItem的可见性

时间:2016-04-23 09:35:28

标签: excel vba excel-vba pivot-table

我在Excel工作表上有一个数据透视表。它有一个名为" Season"的字段,它是一个包含多个选择和一些空白值的报告字段。 我想看看是否在过滤器中选择了空白值(即可见),并使用以下代码。

Sub ShowVisbilityOfBlankItem()

    Dim PivotField As PivotField
    Set PivotField = ActiveSheet.PivotTables(1).PivotFields("Season")

    Dim PivotItem As PivotItem
    Set PivotItem = PivotField.PivotItems("(blank)")

    Debug.Print PivotItem.Visible ' Runtime Error 13: Type mismatch

End Sub

但是,最后一行会导致运行时错误13:类型不匹配。其他PivotItem不会发生这种情况。这是Excel(2010)或我的代码中的错误吗?还有另一种方法可以确定空白是否可见?

可以设置空白PivotItem的可见性。此外,本地窗口显示True的值PivotItem.Visible,无论它是否可见。

2 个答案:

答案 0 :(得分:1)

在谷歌搜索并获得相同的错误后,我在另一个问题中遇到了这个回复: https://stackoverflow.com/a/39107082/1626443

我认为问题与Excel语言版本有关,只有在字面值为(blank)时才能处理。我使用的是德语版本,之前它是(leer)并且它不起作用。

这为我删除了错误:

sStore = pi.Value
pi.Value = sStore
If pi.Visible Then 'no more error

注意,从技术上讲,您只需要执行一次,我认为以下代码也可以正常运行:

If pi.Value = "(BLANK_IN_YOUR_LANGUAGE)" Then pi.Value = "(blank)"

甚至可能是这个:

If pi.Value = "(BLANK_IN_YOUR_LANGUAGE)" Then pi.Value = pi.Value

说实话,这是一个非常奇怪和令人沮丧的错误。

我知道这是一年前的事情,但也许它仍然可以帮助你或其他人完成PivotItems的旅程。

答案 1 :(得分:0)

我使用法语遇到了同样的错误。不幸的是,这不仅与(空白)价值有关,而且与每个具有语言解释的价值有关。

我遇到了PivotItem.value的值,该值来自我的数据源中的双精度类型值。可以肯定的是,由于十进制分隔符是,但法语。用英语。

应用PivotItem.value=PivotItem.value使.visible再次起作用,但是请注意,它会更改在Excel中打开过滤器时有效显示的值:123,456最初显示为123.456

这可能会使您的最终用户在使用数据透视表时感到困惑。 这也可能会更改过滤功能,因为新值虽然事先是双精度的,但似乎仍被视为字符串。因此,例如>或<过滤器将给出不同的结果。

这显然是一个错误,但是到目前为止,我还没有找到µsoft的修复程序。我使用的是excel2007,可能应该更新...没有任何保险,因为它已在最新版本中修复