Jak uzyskać dane arkusza kalkulacyjnego w programie Excel, aby ponownie obliczyć wartość z poziomu VBA, bez konieczności zmiany wartości komórki?W jaki sposób program Excel odświeża dane na arkuszu z poziomu VBA?
Odpowiedz
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ć.
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
zobacz komentarz do mojej odpowiedzi –
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.)
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.
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
Faktycznie, istnieje .Calculate() i .CalculateFull() metody do tego, na różnych poziomach. – GSerg
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. –
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