0

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

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

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

屏幕截图 #value 错误

单元格 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。

4

1 回答 1

0

问题出在

.PivotTables(PivotName).PivotCache.Refresh

在 UDF 中而不是用Application.Volatile. 但是@GSerg 的解决方案p.update似乎没有奏效。

于 2013-07-18T10:46:27.883 回答