【问题标题】:Looping VBA code for dynamic pivot table update用于动态数据透视表更新的循环 VBA 代码
【发布时间】:2019-09-09 12:06:04
【问题描述】:

我找到了一种从 Excel 单元格动态调整数据透视表过滤器的解决方案,效果很好;见这里:

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As 
    Range)
    'This line stops the worksheet updating on every change, it only 
    updates when cell
    'D1 or D2 is touched
    If Intersect(Target, Worksheets("test").Range("D1:D2")) Is Nothing 
    Then Exit Sub

    'Set the Variables to be used
    Dim pt As PivotTable
    Dim Field As PivotField
    Dim NewCat As String

    'Here you amend to suit your data
    Set pt = Worksheets("test").PivotTables("PivotTable2")
    Set Field = pt.PivotFields("Name")
    NewCat = Worksheets("test").Range("D1").Value

    'This updates and refreshes the PIVOT table
    With pt
    Field.ClearAllFilters
    Field.CurrentPage = NewCat
    pt.RefreshTable
    End With

    End Sub

我试图弄清楚如何循环这个例如定义的次数(即 60 次)来控制大量的数据透视表都引用不同的单元格。

计划是有一个员工列表,每个数据透视表将显示与该员工相关的数据,但员工列表将是动态的。

编辑: 请查看我要实现的目标的图像;

最终目标是设置分页符并快速刷新和打印个人技能水平以供员工评估。

【问题讨论】:

  • 数据透视表是否在不同的工作表上?
  • 如果您创建了一个minimal reproducible example,说明您是如何尝试实现目标的以及哪些是无效的,我们可以更轻松地为您提供帮助。现在,您要求我们为您编写循环代码,并且仅提供模糊的规范,我们不可能知道您的工作簿的详细信息
  • 你有没有想过用切片机解决你的任务?见 [contexturesblog.com/archives/2011/03/07/…
  • 您是否考虑过使用 2 个数组,一个是 Cells(Array("D1:D2", "F1:F2", "G1,G7"),等等),另一个是对应的 PivotTables(Array("PivotTable2", "PivotTable3", "Copy of PivotTable1"),等等)?
  • 这是我在逻辑上苦苦挣扎的问题,我的代码适用于一个数据透视表,但我什至不知道如何像通常的 Dim i As Integer For i = 1 To 3 一样开始实现循环Cells(i, 1).Value = 100 接下来我似乎不合适

标签: excel vba


【解决方案1】:

看你的图片,这似乎是XY Problem

您需要一份用户列表及其技能。您已决定这需要多个数据透视表。我建议使用多列数据透视表,在用户之间使用空白行:

除了关闭“名称”的小计外,还需要“在每个项目标签后插入空行”和“在组顶部显示小计”:

(顺便说一句 - 在使用多个数据透视表时,尤其是使用相同数据透视表的数据透视表时,the PivotTable.ManualUpdate property 对于减少冗余重新计算非常有用!)

【讨论】:

  • 这会很理想,但是我希望将每个员工分成自己的页面,这样所有 60 人都可以在一张纸上打印到单独的页面上
  • 更新:我刚刚注意到“在每个项目后插入分页符”复选框.. 绝对比我做的简单得多!
  • @DeanCohen 您可能还会发现自定义数字格式(例如[=4]"Trained";[=2]"Training in Progress";[=0]"Untrained")对于显示文本值而不是数字很有用 - 试一试,然后(如果需要)发布一个新问题?
  • 感谢您提供的小提示!从来不知道这是可能的.. 超级有用,谢谢你的帮助:)
猜你喜欢
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多