【问题标题】:PivotCache Refresh - Cell formula return #ValuePivotCache 刷新 - 单元格公式返回 #Value
【发布时间】:2013-07-14 04:23:43
【问题描述】:

我有一个从外部数据源(访问)创建的数据透视表,其中包含平均 3 个月的每周每小时的记录数。在这个数据透视表旁边,我创建了一个列来计算一天中每小时的平均数字记录。 (这里的一周只有 5 天 - 周六和周日不算在内)。

为了实现上述目的,我创建了一个 UDF,它根据数据透视数据字段 (Week_Ending) 计算周数。为了确保代码不计算幽灵或不存在的周数,我在 UDF 中使用了 pivotcache 刷新。这完美地工作,除了它现在在我期望每日平均值的单元格中给出#value(公式中使用的值是错误的数据类型)。我发现单元格公式没有问题,如果从“Week_Ending”字段中选择一周而不是全部,则可以正常工作。

我已附上代码和单元格函数以及问题的图像。

单元格 E6 中的单元格公式,与单元格 E29 类似(每小时单元格引用每个单元格加 1)

=IF($E$4=1,GETPIVOTDATA("CountOfCase_Id",$A$4,"HOURLY",A6)/5,GETPIVOTDATA("CountOfCase_Id",$A$4,"HOURLY",A6)/($E$4*5))

Vba UDF 函数

Option Explicit

Function WeekCount(InputVal As Variant) As Integer
Dim book1 As String, PivotName As String

    book1 = ThisWorkbook.Name

    With Workbooks(book1).ActiveSheet
        If InputVal = "(All)" Then
            PivotName = .PivotTables(1).Name
            .PivotTables(PivotName).PivotCache.MissingItemsLimit = xlMissingItemsNone
            .PivotTables(PivotName).PivotCache.Refresh
            WeekCount = .PivotTables(PivotName).PivotFields("WEEK_ENDING").PivotItems.Count

        Else
            WeekCount = 1
        End If
    End With
End Function

感谢您的帮助。 Excel版本是2003。

【问题讨论】:

  • 是的,UDF 是从单元格 E4 (=WeekCount(B2)) 调用的。如果根据您的建议将公式复制下来,则会显示结果。但是,如果将 Week_Ending 更改为单周并返回 ALL,则会显示相同的 #Value 错误。如果您手动输入 13 或选择一周(单元格 E6 中的 UDF 输入 1),我现有的单元格公式有效。
  • WEEK_ENDING 仅包含日期和时间 - 10/02/2013 12:00:00 AM。但是,UDF 除了在字段 Week_Ending 中选择 ALL 项时计算项数之外没有做太多工作。当我为 Pivotcache 刷新添加代码时,问题就开始了。
  • 是的,做到了。我把你建议的方法落实到位,它就像一个魅力。我使用了refreshtable 代码并省略了update 代码。更新代码会带来同样的问题。谢谢。

标签: vba excel excel-formula excel-2003


【解决方案1】:

问题出在

.PivotTables(PivotName).PivotCache.Refresh

在 UDF 中,不使用 Application.Volatile 修复。然而@GSerg 的solution 没有p.update 似乎有效。

【讨论】:

    猜你喜欢
    • 2018-07-09
    • 1970-01-01
    • 2018-10-04
    • 2016-10-16
    • 2017-11-28
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    相关资源
    最近更新 更多