我有一个从外部数据源(访问)创建的数据透视表,其中包含每周每小时的记录数,平均为3个月。在此数据透视表旁边,我创建了一个列,用于计算一天中每小时的平均数记录。 (这里一周只有5天 - 坐着和太阳不计算在内。)
为了实现上述目标,我创建了一个UDF,它计算透视数据字段(Week_Ending)中的周数。为了确保代码不计算ghost或不存在的周数,我在UDF中使用了pivotcache刷新。这很有效,除了它现在给出了我期望每日平均值的单元格中的#value(公式中使用的值是错误的数据类型)。我发现单元格公式没有问题,如果从“Week_Ending”字段中选择一周而不是ALL,则可以使用。
我附上了代码和单元格功能以及问题的图像。
细胞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年。
答案 0 :(得分:0)
问题原来是
UDF中的.PivotTables(PivotName).PivotCache.Refresh
,而不是Application.Volatile
。但是,没有p.update
的@ GSerg的solution似乎有效。