Application.Calculation to właściwość obiektowa w makrach VBA sterująca trybem przeliczania formuł w arkuszu kalkulacyjnym.
Application.Calculation jako ustawienie silnika obliczeń Excela
Application.Calculation jest właściwością obiektu Application w języku VBA dla programu Microsoft Excel. Określa sposób, w jaki Excel przelicza formuły znajdujące się w otwartych skoroszytach. Właściwość odnosi się do instancji aplikacji, a nie do pojedynczej komórki, arkusza ani konkretnego skoroszytu. Zmiana jej wartości może więc wpływać na wszystkie skoroszyty otwarte w tej samej instancji Excela.
Wartość właściwości jest typu XlCalculation. Najczęściej stosowane stałe to xlCalculationAutomatic, xlCalculationManual oraz xlCalculationSemiautomatic. Tryb automatyczny powoduje przeliczanie zależnych formuł po zmianie danych. Tryb ręczny ogranicza automatyczne obliczenia, dlatego wynik widoczny w arkuszu może przez pewien czas różnić się od wyniku wynikającego z aktualnych wartości komórek.
Trzy tryby przeliczania formuł w VBA
W trybie xlCalculationAutomatic Excel sam rozpoznaje zmiany w komórkach i aktualizuje formuły zależne od zmienionych danych. Jest to standardowe ustawienie używane podczas zwykłej pracy z arkuszem. Przy dużych skoroszytach, wielu formułach tablicowych, rozbudowanych zależnościach albo funkcjach odwołujących się do dużych zakresów automatyczne przeliczanie może jednak wykonywać się długo po każdej zmianie.
Tryb xlCalculationManual pozwala makru wykonać serię zmian bez uruchamiania pełnego przeliczania po każdej operacji. Po zakończeniu modyfikacji kod może wywołać Application.Calculate, aby przeliczyć formuły wymagające aktualizacji. Można również użyć CalculateFull, gdy potrzebne jest pełne przeliczenie formuł we wszystkich otwartych skoroszytach, albo CalculateFullRebuild, gdy trzeba dodatkowo odbudować zależności obliczeniowe. Tryb xlCalculationSemiautomatic działa podobnie do automatycznego, ale nie przelicza automatycznie formuł w tabelach danych.
Zakres działania i bezpieczne użycie właściwości
Najczęstszy błąd polega na ustawieniu Application.Calculation = xlCalculationManual na początku makra i pominięciu przywrócenia wcześniejszego trybu. Po zakończeniu procedury użytkownik może wtedy otworzyć inny skoroszyt i nie zauważyć, że jego formuły nie są przeliczane automatycznie. Poprawny wzorzec zapisuje bieżącą wartość właściwości do zmiennej, ustawia potrzebny tryb na czas operacji, a następnie przywraca pierwotne ustawienie także w przypadku wystąpienia błędu.
Sama zmiana trybu obliczeń nie modyfikuje formuł ani wartości zapisanych w komórkach. Decyduje wyłącznie o tym, kiedy silnik obliczeniowy ma ponownie wyznaczyć wyniki. W procedurach VBA warto rozdzielić zmianę danych, przeliczenie oraz dalsze odczyty wyników. Jeżeli makro odczytuje wartość komórki zaraz po zmianie danych w trybie ręcznym, może otrzymać wynik nieaktualny, dopóki nie zostanie wykonane odpowiednie polecenie obliczeniowe. Należy też pamiętać, że formuły z funkcjami lotnymi, takimi jak NOW, TODAY lub RAND, mogą zmieniać wynik przy kolejnych przeliczeniach.
Application.Calculation podczas diagnozy arkusza i makr
Nieprawidłowo ustawiony tryb obliczeń często jest przyczyną pozornie błędnych danych w arkuszu. Objawem może być brak zmiany wyniku po edycji komórki, niespójność między arkuszem źródłowym a raportem albo różnica między wartością widoczną po ręcznym przeliczeniu i wartością odczytaną przez makro. Przy analizie należy sprawdzić bieżącą wartość Application.Calculation, sposób wywoływania Calculate oraz zależności między komórkami. Istotne jest także rozróżnienie problemu z przeliczaniem od błędu samej formuły, nieprawidłowego zakresu lub danych wejściowych.
Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów i komputerów PC, w tym diagnostyką problemów z oprogramowaniem biurowym oraz działaniem makr VBA. W przypadku arkusza, który pokazuje nieaktualne wyniki, można sprawdzić ustawienia aplikacji, stan obliczeń, zależności formuł i sposób wykonywania procedur. Taka analiza pozwala ustalić, czy przyczyną jest właściwość Application.Calculation, błąd w kodzie makra, uszkodzenie skoroszytu czy problem z instalacją programu.