2008-09-30 15 views

Odpowiedz

49

następujące linie rade:

ActiveSheet.EnableCalculation = False 
ActiveSheet.EnableCalculation = True 

Edycja: Metoda .Calculate() nie będzie działać dla wszystkich funkcji, ja testowałem to na kartce z Add-in funkcji tablicowych. Arkusz produkcyjny, którego używam, jest na tyle złożony, że nie chcę testować metody .CalculateFull(), więc może działać.

+1

Faktycznie, istnieje .Calculate() i .CalculateFull() metody do tego, na różnych poziomach. – GSerg

+1

Testowałem obliczenia na arkuszu i nie wszystkie funkcje w przeliczeniu komórek. Możesz to również zrobić, przełączając "brudny" bit, ale uznałem to za najłatwiejsze rozwiązanie. –

+0

Korzystanie z właściwości "EnableCalculation" to niezły pomysł, ponieważ pozwala na ponowne obliczenie pojedynczego arkusza na poziomie arkusza roboczego. Natomiast "Application.CalculateFull" wymusza pełne obliczenie wszystkich danych, nie tylko w pojedynczym arkuszu roboczym lub skoroszycie, ale w ** wszystkich otwartych skoroszytach **! Może to być poważna przesada, zwłaszcza że użytkownik może mieć kilka niezwiązanych, potencjalnie skomplikowanych, otwartych skoroszytów. – ricovox

14

To powinno załatwić sprawę ...

'recalculate all open workbooks 
Application.Calculate 

'recalculate a specific worksheet 
Worksheets(1).Calculate 

' recalculate a specific range 
Worksheets(1).Columns(1).Calculate 
+1

zobacz komentarz do mojej odpowiedzi –

3

Można także spróbować

Application.CalculateFull 

lub

Application.CalculateFullRebuild 

jeśli nie masz nic przeciwko przebudowie wszystkie otwarte skoroszyty, raczej niż tylko aktywny arkusz roboczy. (CalculateFullRebuild odbudowuje także zależności.)

6

Czasami program Excel może czknąć i wymaga ponownego uruchomienia, aby ponownie zastosować równanie. Dzieje się tak w niektórych przypadkach, gdy używasz niestandardowych formuł.

Upewnij się, że masz następujące skrypt

ActiveSheet.EnableCalculation = True 

Ponowne równanie wyboru.

Cells(RowA,ColB).Formula = Cells(RowA,ColB).Formula 

To może być zapętlone w razie potrzeby.

2

Wystąpił problem z wyłączeniem obrazu tła (PROJEKTU znak wodny) w języku VBA. Moja zmiana nie pojawiła się (co zostało wykonane przy użyciu metody Sheets(1).PageSetup.CenterHeader = "") - więc potrzebowałem sposobu na odświeżenie. Podejście ActiveSheet.EnableCalculation częściowo rozwiązało problem, ale nie obejmowało nieużywanych komórek.

W końcu znalazłem to, co potrzebne z jednej wkładki, które złożyły Vanish obrazu, gdy nie został ustalony: -

Application.ScreenUpdating = True