2014-09-05 2 views
0
Private Sub Worksheet_Activate() 

    If Worksheets("Input").Range("S5").Value = "Yes" Then 
     MsgBox "Please make sure you've completed the historical deductible amounts for EL" 
    End If 

    Worksheets("Input").Calculate 
    Worksheets("EL").Calculate 
    Worksheets("PPL").Calculate 
    Worksheets("Auto").Calculate 
    Worksheets("AL").Calculate 
    Worksheets("APD").Calculate 
    Worksheets("Loss Layering").Calculate 
    Worksheets("Sheet2").Calculate 
    Worksheets("Premium").Calculate 

End Sub 

매우 큰 통합 문서의 속도를 높이기 위해 자동 계산을 사용하지 않도록 설정하고 이동시 시트를 계산하는 계층을 만들었습니다 내 통합 문서. 내 문제는 sumif 또는 섬광 제품과 같은 중장비 공식의 경우 값이 활성 시트 내에서 계산되지 않고 0으로 유지된다는 것입니다. 내가 application.calculate 시도하고 CalculateFull,이 두 가지 작동하지만 그들은 너무 많은 시간을 소요 찾으십시오. 나는 가능한 한 빨리, 간단하고 사용자 친화적 인 템플릿을 유지하면서이 작업을 수행하는 방법을 찾고 있습니다. 어떤 제안?Excel VBA - worksheet.calculate가 모든 수식을 계산하지 않습니다

답변

5

어떤 워크 시트가 활성 시트이고이 코드가 포함되어 있는지 분명하지 않지만 문제에 대한 2 가지 이유를 생각해 볼 수 있습니다.

1) 활성 시트에서 worksheet.calculate를 호출하지 않았습니다.
2) worksheet.calculate는 다른 워크 시트의 종속성을 무시하므로 사용중인 계산 순서는 시트의 수식이 항상 이미 계산 된 다른 시트를 참조하는 경우에만 작동합니다. 즉 시트 계산 시퀀스는 시트 간 참조 시퀀스와 정확하게 일치해야하며 정의 된 이름 등을 포함하여 앞으로 시트 간 참조가 없어야합니다. 나는 그것이되었습니다 것을 알고

+0

그 모호한 점에 대해 사과드립니다. 이 시트는 "프리미엄"입니다. 계산 순서를 두 번 확인했는데 모두 정확합니다. 귀하의 일반적인 포인트에 관해서는, 나는 worksheet.calculate가 application.calculate보다 상당히 빠릅니다 - 특히 11 초 지역의 어딘가에 –

+0

그래서 무거운 2 개의 시트를 끄십시오. worksheet.enablecalculation = false를 사용하여 시트를 만든 다음 Application.calculate를 사용합니다. –

+0

사실, 종속 시트 중 하나가 누락되었습니다. 이름이 포함 된 계산에 숨겨져 있기 때문에 즉시 명백하지 않았습니다. 많은 시간이 내 통합 문서를 통해 트롤링하고 발견했습니다. 많은 감사합니다 !! –

0

(I 그것은 빠를 것이다 때때로 확신하지만) 나는 보통 빠른 Application.Calculate를 사용하는 것보다 것이다 전체 통합 문서를 계산하는 worksheet.calculate를 사용하여 기대하지 않을 것이다 일반적인 지점으로

그러나 잠시 동안 나를 괴롭 히고 있었고 방금 해결 방법이 나왔습니다. 범위에서 계산을 강제로 수행하려고 할 때 호출하는 하위를 만들었습니다.

Sub forceRngCalc(rng As Range) 

For Each c In rng 

    formulaToCopy = c.Formula 
    c.ClearContents 
    c.Value = formulaToCopy 

Next 

End Sub 

이것은 수식을 다시 입력하는 것과 같습니다. 따라서 다시 계산해야합니다. 별로 멋지지 않지만 작동합니다.

관련 문제