Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba PivotCache刷新-单元格公式返回#值_Vba_Excel_Excel Formula_Excel 2003 - Fatal编程技术网

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

Vba PivotCache刷新-单元格公式返回#值,vba,excel,excel-formula,excel-2003,Vba,Excel,Excel Formula,Excel 2003,我有一个从外部数据源(access)创建的数据透视表,它包含平均3个月内每周每小时的记录数。在这个数据透视表旁边,我创建了一个列,用于计算一天中每小时的平均数字记录。(这里一周只有5天——周六和周日不算在内) 为了实现上述目标,我创建了一个UDF,它从pivot数据字段(Week_Ending)计算周数。为了确保代码不计算重影或不存在的周数,我在UDF中使用了pivotcache刷新。这非常有效,但现在它在单元格中给出了#值(公式中使用的值是错误的数据类型),而我期望的是日平均值。我发现单元格公

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

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

我已经附上了代码和细胞功能和一个问题的图像

单元格E6中的单元格公式与单元格E29类似(每个单元格的每小时单元格参考值增加1)

Vba自定义函数

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 without
p.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