2013-07-16 2 views
0

평균주기 3 개월 동안 매주 한 시간마다 레코드 수를 포함하는 외부 데이터 원본 (액세스)에서 만든 피벗 테이블이 있습니다. 이 피벗 테이블 옆에 하루 동안의 매시간 평균 레코드를 계산하는 열을 만들었습니다. (여기 일주일은 단지 5 일입니다 - 앉아서 &).피벗 캐시 새로 고침 - 셀 수식 반환 # 값

위의 내용을 달성하기 위해 피벗 데이터 필드 (Week_Ending)에서 주 수를 계산하는 UDF를 만들었습니다. 코드가 고스트 또는 존재하지 않는 주를 계산하지 않도록 UDF에서 피벗 캐시 새로 고침을 사용했습니다. 이것은 일일 평균을 예상하는 셀에서 #value (수식에 사용 된 값이 잘못된 데이터 유형 임)를주는 것을 제외하면 완벽하게 작동합니다. 셀 수식에 아무런 문제가 없으며 ALL 대신 Week_Ending 필드에서 일주일을 선택하면 작동합니다.

코드 및 셀 기능과 문제 이미지를 첨부했습니다.

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 버전이 문제는 UDF에서

.PivotTables (PivotName) .PivotCache.Refresh

로 밝혀졌다과 Application.Volatile 고정되지 2003

+0

'E4'에 13을 넣고'E6'에서'= B6/($ E $ 4 * 5)'라고 쓰고 복사하면 어떻게 될까요? – pnuts

+0

예, UDF는 셀'E4 (= WeekCount (B2))'에서 호출됩니다. 제안에 따른 수식이 복사되면 결과가 표시됩니다. 그러나 Week_Ending을 1 주일로 변경하고 ALL로 돌아 가면 동일한 #Value 오류가 표시됩니다. 수동으로 13을 입력하거나 일주일을 선택하면 기존 셀 수식이 작동합니다 (셀 E6의 UDF 입력 1). – user2000380

+0

그래서 문제가 UEEK_ENDING 필드의 예를 볼 수는 없지만 UDF에 문제가 있다는 것을 '증명합니다'라고 생각합니다. – pnuts

답변

0

입니다. 그러나 @ GSerg의 solution 없이는 p.update이 효과가있는 것 같습니다.