W poprzednich częściach kursu nauczyliśmy się o zmiennych, jak na nich operować i jak przypisywać im wartości. Siłą jakiegokolwiek programu komputerowego jest możliwość interakcji z użytkownikiem i sterowania programem w zależności od otrzymanych danych. Już niedługo pokażę jak sterować programem przy pomocy różnych instrukcji warunkowych. Dzisiaj omówimy sobie podstawowe metody odbierania danych od użytkownika.
![]() |
Na pewno najbardziej elegancką i potężną metodą komunikacji z użytkownikiem są formularze. Mogą zawierać przeróżne kontrolki, od przycisków, poprzez suwaki, wykresy, obrazki itp. Tworzenie formularzy nie jest specjalnie trudne jednak jest to temat na osobną cześć kursu.
Tworząc program VBA oparty na formularzach możemy nawet całkowicie ukryć skoroszyty tworząc profesjonalnie wyglądające aplikacje.
Zawartość arkuszy
Znaną już nam metodą jest komunkacja poprzez zawartość arkuszy. Użytkownik wpisuje coś do arkusza po czym uruchamia nasze makro, które używa obiektu Range. Jest to zdecydowanie najpopularniejsza metoda.
MsgBox
Funkcji MsgBox już używaliśmy, omówimy ją sobie tutaj dokładniej. Służy ona do wyświetlania małego okienka "pop-up". Użytkownik nie będzie mógł zrobić niczego w Excelu póki nie zamknie okienka jednym z umieszczonym na nim przycisków. Naciśnięcie jakiegokolwiek przycisku zamyka okno.Poprzez argumenty funkcji MsgBox możemy sterować zawartością okienka oraz ilością i rodzajem przycisków. Funkcja zwraca nam jaki przycisk został naciśnięty.
Funkcja przyjmuje następujące argumenty:
MsgBox prompt,[buttons],[title],[helpfile,context]
buttons - Jakie przyciski mają się znajdować na oknie,
title - Tekst wyświetlany a górnym pasku okna,
helpfile - Ścieżka do pliku z pomocą otwieranego przyciskiem F1,
context - Numer odpowiadający części pliku z pomocą.
Do ustawiania atrybutu buttons służy zestaw stałych.
Stała
| Wartość |
Opis
|
|---|---|---|
| vbOKOnly | 0 | Klawisz Ok. |
| vbOKCancel | 1 | Klawisze Ok i Anuluj |
| vbAbortRetryIgnore | 2 | Przerwij, Ponów próbę, Ignoruj |
| vbYesNoCancel | 3 | Klawisze Tak, Nie, Anuluj |
| vbYesNo | 4 | Klawisze Tak i Nie |
| vbRetryCancel | 5 | Klawisze Ponów Próbę i Anuluj |
| vbCritical | 16 | Ikona krytyczna informacja |
| vbQuestion | 32 | Ikona pytanie |
| vbExclamation | 48 | Ikona Ostrzeżenie |
| vbInformation | 64 | Ikona Informacja |
| vbDefaultButton1 | 0 | Pierwszy klawisz wybrany |
| vbDefaultButton2 | 256 | Drugi klawisz wybrany. |
| vbDefaultButton3 | 512 | Trzeci klawisz wybrany |
| vbDefaultButton4 | 768 | Czwarty klawisz wybrany |
| vbApplicationModal | 0 | Okno modalne w ramach apllikacji, użytkownik nic nie zrobi w Excelu dopóki nie zamknie okna, może pracować na innych aplikacjach, |
| vbSystemModal | 4096 | Okno modalne w ramach systemu, użytkownik nie może pracować na żadnej aplikacji, dopóki nie zamknie okna, rzadko działa |
| vbMsgBoxHelpButton | 16384 | Umieść dodatkowy przycisk Pomoc |
| vbMsgBoxRight | 524288 | Tekst justowany do prawej krawędzi |
MsgBox "Moje pytanie", vbOKCancel + vbInformation
Poniższa funkcja doda jeszcze przycisk pomoc.
MsgBox "Moje pytanie", vbOKCancel + vbInformation + vbMsgBoxHelpButton
MsgBox jest funkcją, zwraca więc jakąś wartość. Jest to przycisk naciśnięty przez użytkownika, czyli to co nas najbardziej interesuje w tej części kursu. Zwracana jest liczba całkowita w zakresie 1-7, którą możemy przypisać do zmiennej typu Byte. Dla przejrzystości kodu możemy ją później porównać z jedną ze stałych wbudowanych:
Stała
| Wartość |
Opis
|
|---|---|---|
| vbOK | 1 | OK |
| vbCancel | 2 | Anuluj |
| vbAbort | 3 | Przerwij |
| vbRetry | 4 | Ponów próbę |
| vbIgnore | 5 | Ignoruj |
| vbYes | 6 | Tak |
| vbNo | 7 | Nie |
Trzeba pamiętać, że przypisując wartość funkcji do zmiennej argumenty muszą być wpisane w nawiasach.
Dim odpowiedz As Byte
odpowiedz = MsgBox("Czy wyszyścić komórkę A1?", _
vbYesNo Or vbQuestion Or vbDefaultButton1, Application.Name)
If odpowiedz = vbYes Then
Range("A1").ClearContents
End If
InputBox
Inną możliwość pobierania informacji od użytkownika udostępnia nam funkcja InputBox. Dzięki niej możemy pobrać ciąg znaków i zapisać go w zmiennej typu string.Funkcja przyjmuje poniższe argumenty
Variable = InputBox (Prompt, [Title], [Default], [XPos], [YPos], [helpfile,context] )
prompt - Jaki tekst ma być wyświetlony w okienku,
title - Tekst wyświetlany a górnym pasku okna,
default - Jaki tekst ma być domyślnie wpisany w polu,
XPos, YPos -Położenie okienka na ekranie,
default - Jaki tekst ma być domyślnie wpisany w polu,
XPos, YPos -Położenie okienka na ekranie,
helpfile - Ścieżka do pliku z pomocą otwieranego przyciskiem F1,
context - Numer odpowiadający części pliku z pomocą.
Przykład:
Dim odpowiedz As String
odpowiedz = InputBox("Co wpisać w komórkę A1?")
Range("A1") = odpowiedz
lub nawet prościej
Range("A1") = InputBox("Co wpisać w komórkę A1?")
Tekst w kilku liniachPrzykład:
Dim odpowiedz As String
odpowiedz = InputBox("Co wpisać w komórkę A1?")
Range("A1") = odpowiedz
lub nawet prościej
Range("A1") = InputBox("Co wpisać w komórkę A1?")
W atrybucie Prompt obu powyższych funkcji możemy napisać tekst zajmujący kilka linii przy pomocy stałej vbNewLine. Np.:
Odpowiedz = InputBox("Podaj swoje imię." & vbNewLine & _
"Zostanie zapisane w komórce A1" & vbNewLine & _
"Naciśnij Cancel aby anulować.")
Dla czytelności instrukcja została napisana w kilku liniach, ale oczywiście nie było to konieczne.
Obszerną pomoc na temat powyższych funkcji można też uzyskać w pomocy do programu. Wystarczy nacisnąć F1 kiedy kursor znajduje się na nazwie funkcji.
Subskrybuj RSS, lub polub blog na Facebooku aby otrzymywać najnowsze informacje o rozwoju kursu.
Zachęcam do zadawania pytań w komentarzach.


