Adresy komórek w kodzie VBA

Ostatnio kilka razy zdarzyło mi się korygować kod VBA w skoroszytach użytkowników, w których nagle coś przestawało działać.  Przyczyna błędu była prozaiczna, choć niekiedy bywa trudna do zlokalizowania. O co chodzi? O adresy komórek w kodzie VBA. 

Załóżmy, że mamy prostą tabelkę:

kliknij, aby powiększyć

W kolumnie D jest prosta formuła sumująca wartości z komórek
B i C tego samego wiersza. Kolumna E to też suma tych komórek, ale wprowadzona jako wartość kodem VBA:

Public Sub Suma()
With Worksheets(„Arkusz8”)
.Range(„E2”) = .Range(„B2”) + .Range(„C2”)
.Range(„E3”) = .Range(„B3”) + .Range(„C3”)
.Range(„E4”) = .Range(„B4”) + .Range(„C4”)
.Range(„E5”) = .Range(„B5”) + .Range(„C5”)
.Range(„E6”) = .Range(„B6”) + .Range(„C6”)
End With
End Sub

Problem zaczyna się wtedy, gdy użytkownik końcowy zmieni układ arkusza  np. wstawi kolumny lub wiersze. Wszystkie formuły odwołujące się do komórek (także w innych arkuszach) – bez problemu same się zaktualizują, nawet gdy są wpisane jako adresy bezwzględne. 

kliknij, aby powiększyć

W kodzie VBA jednak nic się nie zmieniło, odwołania do poszczególnych komórek zostały takie same. Po wykonaniu makra efekt wygląda tak:

Procedura nadał wpisuje obliczone kodem wartości i wstawia je w kolumnę E, likwidując znajdującą się tam po przesunięciu formułę. W dodatku są tam dziwne wartości – sumowana jest liczba początkowa LP oraz wartość X. 
Problem może się pojawić także przy zmianie nazwy arkusza – w kodzie będzie zapisana stara nazwa i przy uruchomienie procedury pojawi się błąd wykonania 9.
Niestety, w takim przypadku trzeba ręcznie przerobić odwołania w kodzie VBA, dostosowując go do nowego układu danych. 

Ten przykład jest prosty, w bardziej skomplikowanych projektach znalezienie i   poprawienie takiego błędu może być zdecydowanie bardziej skomplikowane. 
Jak zabezpieczyć się przed nieprzewidzianą ingerencją użytkownika? 
Najprostsze sposoby to:

    • włączenie ochrony arkusza
      uniemożliwiające wstawienie wierszy/kolumn;
    • zastosowanie w kodzie VBA odwołań do nazw kodowych arkuszy
      uniezależniające odwołania do konkretnych arkuszy;


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela

 

Funkcja USUŃ.ZBĘDNE.ODSTĘPY()

Funkcja USUŃ.ZBĘDNE.ODSTĘPY() to jedna z funkcji tekstowych Excela. Zwraca wartość tekstową z usuniętymi niepotrzebnymi spacjami (na początku, na końcu i podwójne spacje w środku).

Funkcja ma jeden argument:

    • Tekst – zmienna typu tekstowego

Odpowiednikiem funkcji w VBA jest funkcja arkuszowa Trim(). 
W ograniczonym zakresie – w VBA funkcjonuje także funkcja
VBA Trim().


Kurs Excel dla HR

 

Poprawność danych

Poprawność danych to kolejne, bardzo przydatne narzędzie Excela. Zabezpiecza przed wstawieniem błędnych wartości w komórce, w wyniku których pojawią się błędy w formułach. Najczęściej jest wykorzystywane tam, gdzie powinna być data, a nie tekst przypominający datę czy wartości z określonego zakresu liczb. Umożliwia także wstawienie list rozwijalnych bezpośrednio w komórce. 

Poprawność danych znajduje się na karcie Dane w grupie opcji Narzędzia danych

kliknij, aby powiększyć

Zaznaczamy komórkę lub zakres komórek, klikamy w przycisk
i wybieramy regułę poprawności:

kliknij, aby powiększyć

Jest tu kilka możliwości ustawienia kryterium:

    • dowolna wartość 
      – brak kryterium, można wpisać dowolną wartość czy to liczbową czy tekstową
    • pełna liczba
      możliwe do wstawienia tylko liczby całkowite z zadeklarowanego zakresu:
kliknij, aby powiększyć

Konieczne jest także ustawienie zakresu precyzującego zakres, w którym muszą się mieścić liczby:

kliknij, aby powiększyć

Mogą być tu nie tylko liczby, ale także odwołania do adresów komórek z liczbami

      • dziesiętne
        zasady jak w przypadku liczb całkowitych, ale możliwe wstawianie również ułamków
      • Lista
        kliknij, aby powiększyć

        Jako źródło danych można wpisać konkretne wartości oddzielone średnikami np.
        kliknij, aby powiększyć

        zakres komórek lub zdefiniowaną w menedżerze nazw listę:
        kliknij, aby powiększyć

        Efekt końcowy wygląda tak:
        kliknij, aby powiększyć

        Bardzo przydatne rozwiązanie, często stosuję.
      • Data
        kliknij, aby powiększyć

        Podobnie jak w przypadku liczb – konieczne jest wstawienie zakresu dat.
        Biorąc pod uwagę, że różni użytkownicy mają różne pomysły do zapisywania dat (co później skutkuje błędami w formułach) – warto wprowadzić to zabezpieczenie, jest naprawdę przydatne
      • Godzina
        – zasada działania jak w przypadku daty
      • Długość tekstu
        kliknij, aby powiększyć

        W tym przypadku sprawdzana jest ilość znaków wprowadzona do komórki
      • Niestandardowe

        kliknij, aby powiększyć

        tu możemy wpisać własną regułę – opartą na formule

Niezależnie od rodzaju wprowadzonej reguły, Poprawność danych ma też 2 dodatkowe zakładki:

      • Komunikat wejściowy
        kliknij, aby powiększyć

        tu możemy zdefiniować komunikat wyświetlany po wejściu do komórki. Nie ma tu znaczenia, jaka reguła poprawności jest ustawiona, działa także przy dowolnej wartości

      • Alert o błędzie

        kliknij, aby powiększyć

        Ta akcja jest widoczna jeżeli wartość w komórce nie spełnia zasady wprowadzonej do niej reguły poprawności. Warto tu wpisać treść komunikatu informującego jakie wartości są tu dopuszczalne. 

        Możliwe są tu 3 warianty: 

        • Stop (domyślny)
          kliknij, aby powiększyć

          Wprowadzanie danych zostaje zatrzymane, użytkownik musi wpisać prawidłową wartość. 

        • Ostrzeżenie
          kliknij, aby powiększyć

          Wyświetla się ostrzeżenie, choć jeżeli naciśniemy przycisk Tak – Excel pozwoli zostawić w komórce błędną wartość.

        • Informacje
          kliknij, aby powiększyć

          Działanie podobne jak w przypadku Ostrzeżeń

Zarówno Ostrzeżenia jak i Informacje pozwalają na wprowadzenie wartości niezgodnych  w regułą poprawności. Chcąc sprawdzić, gdzie taka sytuacja występuje – wystarczy zaznaczyć opcję:


Błędne dane są zaznaczone. W tym miejscu można też usunąć zakreślenia błędnych danych. 
Choć oczywiście te zaznaczenia znikają również po wprowadzeniu prawidłowych danych.

Często korzystam z tego narzędzia Excela – naprawdę warto jet stosować. 


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela

Menedżer nazw

Menedżer nazw to jedno z narzędzi Excela, bardzo przydatne w codziennej pracy. Służy głównie do nadawania własnych nazw wyznaczonym zakresom komórek, obiektom, wartościom czy formułom. 

Menedżer nazw znajduje się na karcie Formuły w grupie opcji Nazwy zdefiniowane

kliknij, aby powiększyć

Najszybszym i najprostszym sposobem na zdefiniowanie zakresu jest zaznaczenie obszaru, naciśnięcie przycisku Utwórz z zaznaczenia

Nadana w ten sposób nazwa jest widoczna na liście nazw Menedżera nazw.

kliknij, aby powiększyć

Na screenie widoczna jest także nazwa Tabela1 – wszystkie obiekty tabel od razu też są tu widoczne, automatycznie wstawiane przez Excela.  
Zadeklarowana nazwa Kurs_Euro jest dostępna w każdym arkuszu tego skoroszytu i może być wykorzystana w każdej formule np.: =A2*Kurs_Euro

Można też przypisać nazwę do dynamicznego zakresu poprzez funkcję np. 
=PRZESUNIĘCIE($E$2;;;ILE.NIEPUSTYCH($E$2:$E$100);1)

kliknij, aby powiększyć

W tym przypadku wysokość zakresu jest uzależniona od ilości niepustych komórek w zakresie. Idealnie nadaje się do tworzenia list w Poprawności danych

kliknij, aby powiększyć

Przy tworzeniu nazw warto zwrócić uwagę na to, że dana nazwa może obowiązywać zarówno w całym skoroszycie jak i pojedynczym arkuszu. Domyślnym ustawieniem jest Skoroszyt:

kliknij, aby powiększyć

Wszystkie nazwy muszą zaczynać się od znaku _ lub litery. Nie mogą też zawierać spacji ani niedozwolonych znaków. No i oczywiście – muszą być unikalne, nie mogą być takie same jak inne nazwy (np.oznaczenia komórek typu A1, b10 itp.) 

Zdefiniowane w Excelu nazwy są też dostępne w edytorze VBA:
Range(„Kurs_Euro”) 
lub
[Kurs_Euro]


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela

Skróty klawiaturowe makr

Każde makro (również to nagrane) czy zdefiniowaną w kodzie VBA procedurę publiczną możemy uruchomić na kilka sposobów. 
Najczęściej stosowane metody to:

      • wybranie makra z listy makr na karcie Developer
kliknij, aby powiększyć

i dalej:

Wybieramy makro/procedurę i naciskamy przycisk Uruchom.

      • przypisanie makra/procedury do kliknięcia w przycisk lub kształt

Po przypisaniu makra – potem wystarczy kliknąć w kształt i makro zostanie uruchomione.

      • skrót klawiaturowy
        czyli kombinacja klawiszy uruchamiająca dane makro.
        W praktyce chyba coraz rzadziej używany, choć chyba niesłusznie. Przydaje się, gdy np. mamy skoroszyt z dużą ilością arkuszy, przeglądamy któryś z końcowych i chcemy wrócić szybko do pierwszego arkusza – w takim przypadku akurat skrót klawiaturowy sprawdzi się jako najszybsze rozwiązanie. 

Chcąc przypisać skrót klawiaturowy do własnego makra zaznaczamy je na liście makr i przechodzimy do Opcji

kliknij, aby powiększyć

W nowym oknie przypisujemy skrót

kliknij, aby powiększyć

Wielkość liter (mała/wielka) nie ma znaczenia, ale należy się poważnie zastanowić nad tym, czy nie nadpiszemy w ten sposób jakiegoś standardowego skrótu Excela. Tu niestety nie ma żadnych zabezpieczeń ani ostrzeżeń i w efekcie możemy stracić jakąś wbudowaną przydatną procedurę. 

W VBA skrót klawiaturowy możemy przypisać za pomocą metody: Aplication.OnKey

Standardowe, najczęściej używane skróty klawiaturowe Excela to:

CTRL + N nowy skoroszyt
CTRL + O otwórz plik
CTRL + S zapisz
CTRL + P drukuj
CTRL + W / CTRL + F4 zamknij skoroszyt
CTRL + Z cofnięcie ostatniej operacji
CTRL + Y ponowienie operacji
CTRL + A zaznacz wszystko
CTRL + Strzałka przejście do końca danych w kolumnie/wierszu
CTRL + Home przejście do komórki A1
CTRL + End przejście do ostatniej używanej komórki
CTRL + C kopiuj
CTRL + X wytnij
CTRL + V wklej
CTRL + D wypełnij w dół
CTRL + R wypełnij w prawo
CTRL + F znajdź
CTRL + H zamień
CTRL + T utwórz tabelę
CTRL + K wstaw hiperłącze
CTRL + ; wstaw dzisiejszą datę
CTRL + SHIFT + : wstaw aktualną godzinę
CTRL + SHIFT + L włącz/wyłącz filtry
CTRL + Page Up / Page Down przełączanie między arkuszami
CTRL + Tab przełączanie między otwartymi skoroszytami

Tych skrótów lepiej jednak nie używać do własnych procedur.


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela