PivotCache刷新 - 单元格公式返回#Value

时间:2013-07-16 05:46:49

标签: excel vba excel-vba excel-formula excel-2003

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

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

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

Screen Capture #value error

细胞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年。

1 个答案:

答案 0 :(得分:0)

问题原来是

  

.PivotTables(PivotName).PivotCache.Refresh

UDF中的

,而不是Application.Volatile。但是,没有p.update的@ GSerg的solution似乎有效。