Obliczanie VBA - teraz, skoroszyt, arkusz roboczy lub zakres

Ten samouczek nauczy Cię wszystkich różnych opcji obliczania w VBA.

Domyślnie program Excel oblicza wszystkie otwarte skoroszyty za każdym razem, gdy wprowadzana jest zmiana w skoroszycie. Robi to, podążając za drzewem obliczeniowym, w którym jeśli zmieni się komórka A1, aktualizuje wszystkie komórki, które opierają się na komórce A1 i tak dalej. Może to jednak spowodować uruchomienie kodu VBA bardzo powoli, ponieważ za każdym razem, gdy zmienia się komórka, program Excel musi ponownie obliczyć.

Aby zwiększyć szybkość VBA, często będziesz chciał wyłączyć automatyczne obliczenia na początku swoich procedur:

1 Aplikacja.Obliczenia = xlPodręcznik

i ponownie włącz na końcu:

1 Aplikacja.Calculation = xlAutomatic

Co jednak zrobić, jeśli chcesz obliczyć całość (lub część) swoich skoroszytów w ramach swojej procedury? Reszta tego samouczka nauczy Cię, co robić.

Oblicz teraz

Możesz użyć polecenia Oblicz, aby ponownie obliczyć wszystko (we wszystkich otwartych skoroszytach):

1 Oblicz

Zwykle jest to najlepsza metoda. Możesz jednak również wykonać bardziej zawężone obliczenia, aby zwiększyć szybkość.

Tylko arkusz kalkulacyjny

Możesz także powiedzieć VBA, aby obliczył tylko określony arkusz.

Ten kod ponownie obliczy aktywny arkusz:

1 Aktywny arkusz.Oblicz

Ten kod ponownie obliczy Arkusz1:

1 Arkusze("Arkusz1").Oblicz

Oblicz zakres

Jeśli potrzebujesz węższego obliczenia, możesz powiedzieć VBA, aby obliczył tylko zakres komórek:

1 Arkusze("Arkusz1").Range("a1:a10").Oblicz

Oblicz formułę indywidualną

Ten kod obliczy tylko formułę pojedynczej komórki:

1 Zakres("a1").Oblicz

Oblicz skoroszyt

Nie ma opcji VBA, aby obliczyć tylko cały skoroszyt. Jeśli chcesz obliczyć cały skoroszyt, najlepszą opcją jest użycie polecenia Oblicz:

1 Oblicz

Spowoduje to obliczenie wszystkich otwartych skoroszytów. Jeśli naprawdę zależy Ci na szybkości i chcesz obliczyć cały skoroszyt, możesz bardziej wybiórczo określić, które skoroszyty są otwarte jednocześnie.

Oblicz skoroszyt - metody, które nie działają

Istnieje kilka metod, których możesz chcieć użyć, aby zmusić VBA do obliczania tylko skoroszytu, jednak żadna z nich nie będzie działać poprawnie.

Ten kod przejdzie przez każdy arkusz w skoroszycie i ponownie obliczy arkusze pojedynczo:

1234567 Sub Przelicz_skoroszyt()Dim ws As WorksheetDla każdego ws w arkuszach roboczychws.ObliczNastępnyNapis końcowy

Ten kod będzie działał dobrze, jeśli wszystkie twoje arkusze są „samodzielne”, co oznacza, że ​​żaden z twoich arkuszy nie zawiera obliczeń, które odnoszą się do innych arkuszy.

Jeśli jednak arkusze robocze odwołują się do innych arkuszy, obliczenia mogą nie zostać poprawnie zaktualizowane. Na przykład, jeśli obliczysz Arkusz1 przed Arkusz2, ale formuły Arkusza1 opierają się na obliczeniach wykonanych w Arkuszu2, wtedy Twoje formuły nie będą zawierać najbardziej aktualnych wartości.

Możesz także spróbować wybrać wszystkie arkusze naraz i obliczyć aktywny arkusz:

12 ThisWorkbook.Sheets.SelectAktywny arkusz.Oblicz

Spowoduje to jednak ten sam problem.

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave