【问题标题】:If Then to Loop through Pivot ItemsIf Then 循环遍历枢轴项
【发布时间】:2015-01-20 00:00:29
【问题描述】:

我被困在这个问题上,无法弄清楚我做错了什么。我正在编写一个宏来遍历数据透视表中的可见字段,在这些字段中找到被过滤的项目,然后将这些过滤器应用于源数据表。我遇到的特定问题是处理一个循环,该循环应该在一个字段中查找,找到可见的枢轴项,然后将这些项存储为变量。如果所有枢轴项目都可见,我一直在尝试终止循环。以下是我目前所拥有的:

Sub PivotTest2()
Dim pi As PivotItem
Dim count As Integer
Dim available As Integer
Dim row As Integer


available = ActiveSheet.PivotTables("Cities").PivotFields("City").PivotItems.count
row = 2 'This is your starting row for display


    For Each pi In ActiveSheet.PivotTables("Cities").PivotFields("City").PivotItems
        If pi.Visible Then
        count = count + 1
        End If
        If count = available Then
            MsgBox ("All Pivot Items Are Selected")
        End If
        If count <> available Then
            row = row + 1
        Range("'Sheet4'!G" & row) = pi.Name
        End If
    Next pi
End Sub

因此,每当我对一个城市或一组城市进行过滤时,宏都会将它们粘贴到电子表格中的某个范围内。最终,我想将它们存储为变量,但现在我只是为了处理代码而粘贴它们。您还可以看到,当可见项的数量等于该字段中枢轴项的总数时,我将返回一个消息框。最终,该消息框将消失,并由告诉它开始查看下一个可见字段中的枢轴项的代码替换。

我意识到这可能是不必要的,因为将所有可见项目作为过滤器应用于源数据字段将导致显示所有项目,这完成了同样的事情。但是,我现在更好奇我做错了什么。代码将所有项目粘贴到范围内,无论是否有过滤器。但是,消息框仅在未应用过滤器时才会返回,因此它似乎工作正常。

我们将不胜感激任何输入/反馈。谢谢。

【问题讨论】:

    标签: vba excel pivot-table


    【解决方案1】:

    您的部分检查似乎应该在您的循环之外,这决定了可见 PivotItems 的数量。

    首先,我建议将Next pi 移到第一个If-End If 块之后。然后,您的 count 变量应包含可见项目的数量。如果所有项目都可见,则应出现您的消息框。但是,对于第二部分(复制可见项),您需要再次循环。

    为避免第二次循环,您可能希望将pi.Name 值复制到一个临时范围,并且仅在应用了过滤器时将此范围复制到最终范围。

    【讨论】:

      【解决方案2】:

      试试这个:

      For Each pi In ActiveSheet.PivotTables("Cities").PivotFields("City").PivotItems
          If pi.Visible Then
              count = count + 1
              Range("'Sheet4'!G" & row) = pi.Name
              row = row + 1
          End If
      Next pi
      If count = available Then
          MsgBox ("All Pivot Items Are Selected")
      End If
      

      您的代码在粘贴之前不会检查城市是否可见,这就是为什么它总是粘贴每个城市名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-05
        • 1970-01-01
        • 1970-01-01
        • 2017-07-24
        • 1970-01-01
        • 2010-11-22
        • 1970-01-01
        • 2021-11-17
        相关资源
        最近更新 更多