2012-09-28 2 views
2

보고서 데이터 용 워크 시트와 피벗 테이블 용 워크 시트가 포함 된 Excel 템플릿 (.xlt)이 있습니다.VBA에서 지시 할 때까지 Excel에서 피벗 테이블 새로 고침을 방지합니다.

보고 시스템에서 보고서를 생성하고 템플릿을 적용 할 때 피벗 테이블에서 참조하는 일부 필드가 존재하지 않습니다. 매크로가 실행되어보고 시스템의 프로세스의 일부로 생성되기 때문입니다.

그러나이 필드는 존재하지 않으므로 Excel에서 오류가 발생합니다 (구성 요소 속성/메서드에 액세스하는 동안 오류가 발생했습니다 : REFRESH. 참조가 유효하지 않습니다.). 이를 방지하기 위해 모든 피벗 테이블에 대한 옵션을 Refresh data when opening the file에 대해 설정을 해제했습니다.

나는 피벗 테이블을 VBA를 사용하여 새로 고칠 수 있다는 것을 알고 있지만 피벗 테이블이 documnet을 열 때 themsleves를 새로 고치지 않고 대신 새 필드를 만든 후 VBA를 통해 새로 고칠 수 없도록하는 방법이 있습니까? 감사.

Function UpdatePivots() 
    ActiveWorkbook.Sheets("DJG Marketing - Client List by ").PivotTables("PivotTable1").PivotCache.Refresh 
    ActiveWorkbook.Sheets("DJG Marketing - Client List by ").PivotTables("PivotTable2").PivotCache.Refresh 
    ActiveWorkbook.Sheets("DJG Marketing - Client List by ").PivotTables("PivotTable3").PivotCache.Refresh 
    ActiveWorkbook.Sheets("DJG Marketing - Client List by ").PivotTables("PivotTable4").PivotCache.Refresh 
End Function 

답변

0

:

' Disable automatic calculation 
Application.Calculation = xlCalculationManual 
' do regular operation here 
' Force a calculation 
Application.Calculate 
' Then remember to run automatic calculations back on 
Application.Calculation = xlCalculationAutomatic 

가에서 가져온. 다음 코드 (또는 이와 유사한)는 많은 Excel VBA 프로그램에 있습니다.

Sub MyExample() 

with Excel.Application 
    .ScreenUpdating =False 
    .EnableEvents =False 
    .Calculation = Excel.xlCalculationManual 
end with 

on error goto ErrorFoundResetApplication: 

    '>>>>>>>>>>>> 
    'code in here 

    call UpdatePivots 
    '<<<<<<<<<<< 


ErrorFoundResetApplication: 
    with Excel.Application 
     .ScreenUpdating = true 
     .EnableEvents =true 
     .Calculation = Excel.xlCalculationAutomatic 
    end with 

end sub 
Function UpdatePivots()  
    ActiveWorkbook.RefreshAll '<<<refresh them all in one go 
End Function 
관련 문제