【发布时间】: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