| Termin | Definicja |
|---|---|
| InputBox | InputBox to funkcja VBA wyświetlająca okno dialogowe umożliwiające wprowadzenie danych przez użytkownika podczas działania makra. InputBox w VBA — czym jest i do czego służyInputBox jest jednym z prostszych mechanizmów komunikacji między makrem a osobą korzystającą z arkusza lub innego dokumentu obsługiwanego przez VBA. Podczas wykonywania procedury pojawia się okno z komunikatem, polem tekstowym oraz przyciskami pozwalającymi zaakceptować albo anulować wpis. Dzięki temu makro może poprosić o nazwę produktu, numer dokumentu, datę, fragment opisu, symbol urządzenia lub inną informację potrzebną do dalszego działania. W praktyce InputBox przydaje się wtedy, gdy dane nie są jeszcze zapisane w komórkach albo gdy nie ma potrzeby budowania rozbudowanego formularza. Procedura zatrzymuje się na czas oczekiwania, a po zatwierdzeniu wpisu otrzymuje wartość zwróconą przez okno dialogowe. Najczęściej jest ona przechowywana w zmiennej typu String, ponieważ użytkownik może wpisać zarówno litery, jak i cyfry, spacje lub znaki specjalne. Podstawowa postać wywołania może wyglądać następująco:
Pierwszy argument określa treść komunikatu, a drugi tytuł okna. Można również wskazać wartość domyślną, która zostanie umieszczona w polu przed rozpoczęciem wpisywania:
Takie rozwiązanie jest czytelne i szybkie do wdrożenia, ale wymaga świadomego sprawdzania wyniku. Samo wyświetlenie pola nie gwarantuje bowiem, że wpis będzie poprawny, kompletny albo zgodny z oczekiwanym formatem. InputBox a typ danych, walidacja i przebieg makraNajważniejszą cechą klasycznego InputBox w VBA jest zwracanie tekstu. Nawet jeśli oczekiwany jest numer, data lub wartość logiczna, wpis powinien najpierw zostać odebrany jako tekst, a dopiero później sprawdzony i przekształcony. Bez tego makro może próbować wykonać działanie matematyczne na pustym polu albo na ciągu znaków zawierającym litery. Bezpieczniejszy schemat zakłada kilka etapów. Najpierw pobierany jest wpis, następnie usuwane są zbędne spacje, później sprawdzane jest anulowanie lub pozostawienie pustego pola, a dopiero na końcu wykonywana jest konwersja. Przykładowo:
W tym przykładzie funkcja Trim ogranicza ryzyko wynikające ze spacji na początku i na końcu wpisu. IsNumeric pozwala ocenić, czy tekst może zostać potraktowany jako liczba. W zależności od ustawień regionalnych należy także brać pod uwagę sposób zapisu części dziesiętnej oraz daty. W jednym środowisku przecinek może być właściwym separatorem, a w innym oczekiwany będzie zapis z kropką. Z tego powodu warto unikać założeń opartych wyłącznie na komputerze autora makra. InputBox nie jest tym samym co formularz UserForm. Klasyczne okno sprawdza się przy pojedynczym, krótkim pytaniu. UserForm będzie lepszy, gdy wymagane są równocześnie pola tekstowe, listy wyboru, pola wyboru, opis błędu i kontrola kolejności uzupełniania. Dostępna jest również funkcja Application.InputBox, która pozwala określić typ oczekiwanej odpowiedzi, na przykład liczbę, zakres komórek albo wartość logiczną. Wybór właściwego wariantu zależy od tego, czy liczy się prostota, czy ścisła kontrola wprowadzanych danych. InputBox i typowe problemy w codziennym użyciuJednym z częstych błędów jest traktowanie pustego wyniku jako jednoznacznej informacji. W klasycznym InputBox zatwierdzenie pustego pola oraz użycie przycisku Anuluj mogą prowadzić do podobnego rezultatu w zmiennej tekstowej. Jeżeli dla procedury ma znaczenie rozróżnienie tych sytuacji, należy zastosować inny sposób obsługi danych albo użyć Application.InputBox z kontrolą wartości zwracanej przez anulowanie. Problemy pojawiają się również wtedy, gdy wpis jest używany bezpośrednio w adresie komórki, nazwie arkusza, ścieżce pliku lub zapytaniu. Znaki takie jak dwukropek, ukośnik, cudzysłów czy nawias mogą zmienić znaczenie polecenia. Dane z InputBox powinny być traktowane jako niepewne aż do chwili przejścia przez odpowiednią walidację. Dotyczy to także wpisów składających się wyłącznie ze spacji, bardzo długich opisów oraz znaków pochodzących z innego alfabetu. Niepożądanym zjawiskiem jest także wielokrotne wyświetlanie okna bez jasnej informacji, co należy poprawić. Jeżeli wpis jest nieprawidłowy, komunikat powinien wskazać oczekiwany format, na przykład liczbę całkowitą, datę w określonym układzie albo nazwę bez znaków specjalnych. W rozbudowanych procedurach można zastosować pętlę ponawiającą pytanie, ale trzeba przewidzieć możliwość przerwania operacji, aby użytkownik nie został uwięziony w powtarzającym się dialogu. Warto też pamiętać o wpływie InputBox na automatyzację. Okno dialogowe zatrzymuje działanie makra do czasu reakcji, dlatego procedura uruchamiana bez nadzoru może pozostać w stanie oczekiwania. Jeżeli proces ma działać automatycznie, dane lepiej pobierać z przygotowanych komórek, tabeli ustawień albo formularza uruchamianego wcześniej. InputBox pasuje przede wszystkim do krótkich operacji wykonywanych świadomie przez osobę obsługującą plik. InputBox — praktyczne wskazówki projektowe i przykładyTreść komunikatu powinna być konkretna. Zamiast ogólnego pytania „Wprowadź dane” lepiej użyć opisu „Podaj symbol dokumentu, bez spacji na końcu”. Tytuł okna powinien wskazywać etap pracy, na przykład „Filtrowanie raportu” albo „Nazwa arkusza”. Takie nazewnictwo ogranicza liczbę pomyłek i ułatwia późniejsze rozpoznanie miejsca, w którym procedura oczekuje odpowiedzi. Dobrym zwyczajem jest umieszczanie wartości wejściowej w osobnej zmiennej, a nie wstawianie wielu wywołań InputBox bezpośrednio w obliczeniach. Kod staje się wtedy łatwiejszy do testowania i można przeprowadzić walidację przed zmianą dokumentu. Przydatne bywa również ograniczenie długości tekstu, usunięcie niepotrzebnych spacji oraz ujednolicenie wielkości liter, jeżeli wpis służy do porównania z nazwami zapisanymi w tabeli. Przykład procedury pobierającej nazwę arkusza może wyglądać tak:
W takim rozwiązaniu sprawdzenie obiektu jest ważniejsze niż samo pobranie tekstu. Osoba korzystająca z pliku może podać nazwę nieistniejącą, zmienić wielkość liter albo wkleić dodatkową spację. Walidacja zabezpiecza dalszą część makra przed odwołaniem do pustego obiektu. Jeżeli InputBox ma służyć do wyboru komórek, lepszym rozwiązaniem może być Application.InputBox z odpowiednim parametrem Type. Umożliwia to wskazanie zakresu myszą i zmniejsza ryzyko błędu przy ręcznym przepisywaniu adresu. Przy wyborze daty, wartości procentowej lub liczby kontrola formatu powinna być widoczna w komunikacie, a w przypadku błędu powinno zostać podane zrozumiałe wyjaśnienie. InputBox — kiedy potrzebna jest pomoc przy działaniu makraDo samodzielnego zastosowania InputBox wystarczy zwykle znajomość podstaw VBA, zmiennych i instrukcji warunkowych. Warto jednak zgłosić problem do serwisu, gdy okno nie pojawia się, makro przerywa działanie, plik zgłasza błędy po wpisaniu danych albo procedura działa tylko na jednym komputerze. Przyczyną może być nie tylko błąd w kodzie, lecz także wyłączone makra, uszkodzony plik, niezgodna wersja środowiska, blokada dodatku lub problem z samym systemem. Przed przekazaniem sprawy dobrze jest zanotować treść komunikatu, moment pojawienia się błędu oraz informację, jaki wpis został wykonany. Pomocne bywa także sprawdzenie, czy problem występuje w nowym pustym pliku, czy wyłącznie w konkretnym dokumencie. Takie dane ułatwiają odróżnienie błędu procedury od problemu z konfiguracją stanowiska. W Warszawie wsparcie przy takich przypadkach oferuje Warszawskie Pogotowie Komputerowe 24/7. Można zgłosić zarówno kłopot z uruchamianiem makra, jak i szerszy problem z działaniem laptopa, na którym używany jest plik VBA. Przed rozpoczęciem naprawy warto przygotować kopię dokumentu oraz, jeżeli to możliwe, osobną kopię kodu, aby zachować dotychczasowe dane i ustawienia procedury. Najważniejsza zasada pozostaje prosta: InputBox powinien pytać o jedną jasno określoną informację, a każda odpowiedź powinna zostać sprawdzona przed użyciem. Takie podejście zwiększa przewidywalność makra, ogranicza liczbę błędów i pozwala zachować czytelny przebieg pracy nawet wtedy, gdy użytkownik poda pusty, nietypowy albo niepoprawny wpis. |