Zrozumienie zmiennych i stałych w makrach Excel

W tym artykule dowiesz się, jakie stałe i zmienne są w makrach, gdzie można ich używać i jaka jest główna różnica między różnymi typami danych. Zostanie również ujawnione, dlaczego potrzebne są stałe, jeśli możesz po prostu napisać zmienną i nigdy jej nie zmieniać.

Podobnie jak inne języki programowania, dane mogą być przechowywane w zmiennych lub stałych (oba często nazywane są kontenerami danych). To jest główna różnica między tymi koncepcjami. To pierwsze może się zmienić w zależności od tego, co dzieje się w programie. Z kolei stałe są ustawiane jednorazowo i nie zmieniają swojej wartości.

Stałe mogą być przydatne, jeśli musisz wielokrotnie użyć tej samej dużej wartości. Zamiast kopiować liczbę, możesz po prostu wpisać nazwę stałej. Na przykład możesz użyć stałej „Pi” do przechowywania Pi, która jest wartością stałą. Jest bardzo duży i za każdym razem dość trudno jest go napisać lub wyszukać i skopiować. I tak wystarczy napisać dwa znaki, a środowisko automatycznie użyje żądanej liczby.

Użytkownik Excela musi zadeklarować zmienne, jeśli od czasu do czasu musi zmienić zapisaną w nich wartość. Na przykład możesz ustawić zmienną o nazwie sVAT_Rate, która będzie przechowywać aktualną stawkę VAT dla produktu. Jeśli się zmieni, możesz to szybko poprawić. Jest to szczególnie przydatne dla osób prowadzących działalność gospodarczą w Stanach Zjednoczonych, gdzie niektóre towary mogą w ogóle nie podlegać opodatkowaniu podatkiem VAT (podatek ten również różni się w zależności od stanu).

Typy danych

Każdy kontener danych może być jednego z kilku typów. Oto tabela opisująca standardowe rodzaje przetwarzanych informacji. Jest ich wiele i początkującemu może się wydawać, że się powtarzają. Ale to iluzoryczne uczucie. Czytaj dalej, aby dowiedzieć się, dlaczego określenie prawidłowego typu danych jest tak ważne.

Nie zaleca się używania typu danych, który zajmuje więcej miejsca w pamięci dla małych liczb. Na przykład dla liczby 1 wystarczy użyć typu Byte. Wpłynie to pozytywnie na wydajność modułu wykonywalnego, zwłaszcza na słabych komputerach. Ale ważne jest, aby nie posuwać się tutaj za daleko. Jeśli używasz typu danych, który jest zbyt kompaktowy, zbyt duża wartość może się w nim nie zmieścić.

Deklarowanie stałych i zmiennych

Korzystanie z kontenera danych bez wcześniejszego zadeklarowania go jest zdecydowanie odradzane. Wtedy może pojawić się szereg problemów, aby uniknąć których należy napisać kilka małych linijek kodu z wyliczeniem zmiennych lub stałych.

Do zadeklarowania zmiennej używana jest instrukcja Dim. Na przykład tak:

Dim nazwa_zmiennej jako liczba całkowita

Nazwa_zmiennej to nazwa zmiennej. Następnie zapisywany jest operator As, wskazujący typ danych. Zamiast ciągów „Variable_Name” i „Integer” możesz wstawić własną nazwę i typ danych.

Można również deklarować stałe, ale najpierw należy określić ich wartość. Jedną z opcji jest:

Stała iMaxCount = 5000

Szczerze mówiąc, w niektórych przypadkach można obejść się bez deklarowania zmiennej, ale w tym przypadku automatycznie zostanie im przypisany typ Wariant. Nie jest to jednak zalecane z następujących powodów:

  1. Wariant przetwarzany jest znacznie wolniej, a jeśli takich zmiennych jest wiele, przetwarzanie informacji może zostać znacznie spowolnione na słabych komputerach. Wydawałoby się, że te sekundy zadecydują? Ale jeśli musisz napisać dużą liczbę wierszy kodu, a następnie uruchomić go na słabych komputerach (które nadal są sprzedawane, biorąc pod uwagę, że nowoczesne pakiety biurowe wymagają dużej ilości pamięci RAM), możesz całkowicie przerwać pracę. Zdarzają się przypadki, gdy nieprzemyślane pisanie makr doprowadziło do zamrożenia smartbooków, które mają niewielką ilość pamięci RAM i nie są przeznaczone do wykonywania skomplikowanych zadań. 
  2. Błędy drukarskie w nazwach są dozwolone, czemu można zapobiec, używając instrukcji Option Explicit, która umożliwia znalezienie niezadeklarowanej zmiennej, jeśli zostanie znaleziona. Jest to łatwy sposób na wykrycie błędów, ponieważ najdrobniejsza literówka powoduje, że interpreter nie może zidentyfikować zmiennej. A jeśli włączysz tryb deklaracji zmiennych, interpreter po prostu nie pozwoli na uruchomienie makra, jeśli zostaną znalezione kontenery danych, które nie zostały zadeklarowane na samym początku modułu.
  3. Unikaj błędów spowodowanych niezgodnością wartości zmiennych z typem danych. Zwykle przypisanie wartości tekstowej do zmiennej całkowitej spowoduje błąd. Tak, z jednej strony typ ogólny jest przypisywany bez deklaracji, ale jeśli są one zadeklarowane z wyprzedzeniem, można uniknąć przypadkowych błędów.

Dlatego mimo wszystko zdecydowanie zaleca się deklarowanie wszystkich zmiennych w makrach Excela.

Jest jeszcze jedna rzecz, o której należy pamiętać podczas deklarowania zmiennych. Możliwe jest, że podczas deklarowania zmiennej nie przypiszemy żadnych wartości, ale w tym przypadku uzyskuje ona wartość domyślną. Na przykład:

  1. Linie są puste.
  2. Liczby przyjmują wartość 0.
  3. Zmienne typu Boolean są początkowo uważane za fałszywe.
  4. Domyślna data to 30 grudnia 1899.

Na przykład nie trzeba przypisywać wartości 0 do zmiennej całkowitej, jeśli wcześniej nie określono żadnej wartości. Ona już zawiera ten numer.

Opcja Wyraźne oświadczenie

Ta instrukcja umożliwia zadeklarowanie wszystkich zmiennych używanych w kodzie VBA i określenie obecności niezadeklarowanych kontenerów przed uruchomieniem kodu. Aby skorzystać z tej funkcji, po prostu napisz wiersz kodu Option Explicit na samej górze kodu makra.

Jeśli musisz za każdym razem umieszczać tę instrukcję w kodzie, możesz to zrobić za pomocą specjalnego ustawienia w edytorze VBA. Aby włączyć tę opcję, musisz:

  1. Przejdź do środowiska programistycznego po ścieżce – Narzędzia > Opcje.
  2. W oknie, które zostanie otwarte po tym, otwórz kartę Edytor.
  3. I na koniec zaznacz pole obok pozycji Wymagaj deklaracji zmiennej.

Po wykonaniu tych kroków kliknij przycisk „OK”. 

To wszystko, teraz podczas pisania każdego nowego makra ta linia zostanie automatycznie wstawiona na górze kodu.

Zakres stałych i zmiennych

Każda zmienna lub stała ma tylko ograniczony zakres. Zależy, gdzie to zadeklarujesz.

Załóżmy, że mamy funkcję Całkowity koszt()i używa zmiennej sVAT_Stawka. W zależności od pozycji w module będzie miał inny zakres:

Opcja Jawna

Dim sVAT_Rate jako pojedynczy

Funkcja Total_Cost() jako Double

.

.

.

End Function

Jeśli zmienna jest zadeklarowana na początku samego modułu, propaguje się w tym module. Oznacza to, że można go odczytać w każdej procedurze.

Co więcej, jeśli jedna z procedur zmieniła wartość zmiennej, to następna również odczyta tę poprawioną wartość. Ale w innych modułach ta zmienna nadal nie będzie odczytywana.

Opcja Jawna

Funkcja Total_Cost() jako Double

Dim sVAT_Rate jako pojedynczy

   .

   .

   .

End Function

W takim przypadku zmienna jest zadeklarowana wewnątrz procedury, a interpreter zgłosi błąd, jeśli zostanie użyta w innej procedurze.

Jeśli chcesz, aby zmienna była odczytywana przez inne moduły, musisz użyć słowa kluczowego Public zamiast słowa kluczowego Dim. Podobnie można ograniczyć zakres zmiennej tylko do bieżącego modułu, używając instrukcji Public, która jest zapisywana zamiast słowa Dim.

W podobny sposób można ustawić zakres stałych, ale słowo kluczowe jest tutaj zapisywane razem z operatorem Const.

Oto tabela z dobrym przykładem tego, jak działa ze stałymi i zmiennymi.

Opcja Jawna

Publiczna stawka sVAT_Rate jako pojedynczy

Stała publiczna iMax_Count = 5000

W tym przykładzie można zobaczyć, jak słowo kluczowe Public jest używane do deklarowania zmiennej i co należy napisać w edytorze Visual Basic, aby zadeklarować stałą publiczną. Zakres tych kontenerów wartości dotyczy wszystkich modułów.
Opcja Jawna

Prywatny sVAT_Rate jako pojedynczy

Prywatny Const iMax_Count = 5000

Tutaj zmienne i stałe są deklarowane za pomocą słowa kluczowego Private. Oznacza to, że można je zobaczyć tylko w bieżącym module, a procedury w innych modułach nie mogą ich używać.

Dlaczego potrzebne są stałe i zmienne

Zastosowanie stałych i zmiennych pozwala zwiększyć stopień zrozumiałości kodu. A jeśli początkujący ogólnie nie mają pytań o to, dlaczego zmienne są potrzebne, to istnieje wiele niejasności dotyczących potrzeby stałych. I to pytanie wydaje się na pierwszy rzut oka całkiem logiczne. W końcu zmienną można zadeklarować raz i nigdy więcej jej nie zmieniać.

Odpowiedź okazuje się być gdzieś na tym samym poziomie, co w przypadku użycia typów danych, które zajmują dużo miejsca w pamięci. Jeśli mamy do czynienia z ogromną ilością zmiennych, możemy przypadkowo zmienić istniejący kontener. Jeśli użytkownik zaleci, że pewna wartość nigdy się nie zmieni, środowisko automatycznie to kontroluje.

Jest to szczególnie ważne, gdy makro jest pisane przez kilku programistów. Można wiedzieć, że jakaś zmienna nie powinna się zmieniać. A drugi nie. Jeśli określisz operator Const, inny deweloper będzie wiedział, że ta wartość się nie zmieni.

Lub, jeśli istnieje stała o jednej nazwie, a zmienna ma inną, ale podobną nazwę. Deweloper może je po prostu pomylić. Na przykład jedna zmienna, której nie trzeba zmieniać, nazywa się Variable11, a inna, którą można edytować, nazywa się Variable1. Osoba może automatycznie, podczas pisania kodu, przypadkowo pominąć dodatkową jednostkę i jej nie zauważyć. W efekcie zmieni się pojemnik na wartości, których nie należy dotykać.

Albo sam programista może zapomnieć, których zmiennych może dotknąć, a których nie. Dzieje się tak często, gdy kod jest pisany przez kilka tygodni, a jego rozmiar staje się duży. W tym czasie bardzo łatwo jest zapomnieć nawet, co oznacza ta lub inna zmienna.

Tak, w tej sytuacji można zrobić z komentarzami, ale czy nie jest łatwiej określić słowo Const?

wnioski

Zmienne są niezbędnym elementem programowania makr, które pozwalają na wykonywanie złożonych operacji, od obliczeń po informowanie użytkownika o określonych zdarzeniach czy określanie konkretnych wartości w komórkach arkusza kalkulacyjnego.

Stałych należy używać, jeśli programista wie na pewno, że zawartość tych kontenerów nie ulegnie zmianie w przyszłości. Zaleca się, aby zamiast tego nie używać zmiennych, ponieważ można przypadkowo popełnić błąd.

Dodaj komentarz