2013-07-16 40 views
0

我有一個從外部數據源(訪問)創建的數據透視表,其中包含每週每小時的記錄數,平均期限爲3個月。就在這個數據透視表旁邊,我創建了一個列來計算一天中每個小時的平均數量記錄。 (這裏的一週只是5天 - 坐在&太陽不算)。PivotCache刷新 - 單元格公式返回#值I2

爲了達到上述目的,我創建了一個UDF來計算來自透視數據字段(Week_Ending)的星期數。爲了確保代碼不會計算重影或不存在的星期,我已經在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

+0

如果你在'E4'(我認爲它是= WEEKCOUNT是?)和'= B6 /($ E $ 4 * 5)'在'E6'中說13然後複製下去會發生什麼? – pnuts

+0

是的,從單元格'E4(= WeekCount(B2))'調用UDF。如果根據您的建議的公式被複制下來,則會顯示結果。但是,如果將Week_Ending更改爲一週並返回ALL,則會顯示相同的#值錯誤。如果您手動輸入13或選擇一個星期(單元格E6中的UDF輸入1),我現有的單元格公式將起作用。 – user2000380

+0

所以我認爲'證明'問題在於你的UDF,儘管我們看不到WEEK_ENDING字段的例子,這可能是問題所在。 – pnuts

回答

0

問題被證明是與

.PivotTables(PivotName).PivotCache.Refresh

在UDF和不固定Application.Volatile。然而@ GSerg的solution沒有p.update似乎工作。