Vba PivotCache刷新-单元格公式返回#值
我有一个从外部数据源(access)创建的数据透视表,它包含平均3个月内每周每小时的记录数。在这个数据透视表旁边,我创建了一个列,用于计算一天中每小时的平均数字记录。(这里一周只有5天——周六和周日不算在内) 为了实现上述目标,我创建了一个UDF,它从pivot数据字段(Week_Ending)计算周数。为了确保代码不计算重影或不存在的周数,我在UDF中使用了pivotcache刷新。这非常有效,但现在它在单元格中给出了#值(公式中使用的值是错误的数据类型),而我期望的是日平均值。我发现单元格公式没有问题,如果从字段“week_Ending”而不是“ALL”中选择一周,则该公式有效 我已经附上了代码和细胞功能和一个问题的图像 单元格E6中的单元格公式与单元格E29类似(每个单元格的每小时单元格参考值增加1) Vba自定义函数Vba PivotCache刷新-单元格公式返回#值,vba,excel,excel-formula,excel-2003,Vba,Excel,Excel Formula,Excel 2003,我有一个从外部数据源(access)创建的数据透视表,它包含平均3个月内每周每小时的记录数。在这个数据透视表旁边,我创建了一个列,用于计算一天中每小时的平均数字记录。(这里一周只有5天——周六和周日不算在内) 为了实现上述目标,我创建了一个UDF,它从pivot数据字段(Week_Ending)计算周数。为了确保代码不计算重影或不存在的周数,我在UDF中使用了pivotcache刷新。这非常有效,但现在它在单元格中给出了#值(公式中使用的值是错误的数据类型),而我期望的是日平均值。我发现单元格公
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 问题出在 .PivotTables(PivotName).PivotCache.Refresh
在UDF中,不使用
应用程序进行修复。Volatile
。然而,@GSerg's withoutp.update
似乎起了作用。是的,UDF是从单元格E4(=WeekCount(B2))
调用的。如果按照您的建议复制了公式,则会显示结果。但是,如果将结束的一周更改为一周并返回到全部,则会显示相同的#值错误。如果您手动输入13或选择一周(自定义项在单元格E6中输入1),则我的现有单元格公式有效。周末仅包含日期和时间-10/02/2013 12:00:00 AM
。但是,UDF除了在“Week_Ending”字段中选择所有项目时计算项目数之外,没有做很多工作。问题是从我为数据透视缓存刷新添加代码时开始的。是的,就是这样。我把你建议的方法放在适当的位置上,效果很好。我使用了刷新表
代码,并省略了更新
代码。更新代码返回相同的问题。谢谢
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