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.
Formularze
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:
1 |
MsgBox prompt,[buttons],[title],[helpfile,context] |
prompt – Jaki tekst ma być wyświetlony w okienku,
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 |
Argument buttons tworzymy poprzez dodawanie odpowiednich stałych. Jeżeli chcemy wyświetlić przyciski Ok, Cancel i symbol informacji wywołam funkcję:
1 |
MsgBox "Moje pytanie", vbOKCancel + vbInformation |
Poniższa funkcja doda jeszcze przycisk pomoc.
1 |
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 |
1 2 3 4 5 6 7 8 |
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
1 |
Variable = InputBox (Prompt, [Title], [Default], [XPos], [YPos], [helpfile,context] ) |
default – Jaki tekst ma być domyślnie wpisany w polu,
XPos, YPos -Położenie okienka na ekranie,
context – Numer odpowiadający części pliku z pomocą.Przykład:
1 2 3 4 5 6 7 8 |
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 liniach
W atrybucie Prompt obu powyższych funkcji możemy napisać tekst zajmujący kilka linii przy pomocy stałej vbNewLine. Np.:
1 2 3 |
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.
Comments 7
Nie mogę namierzyć informacji jak przekazać zawartość komórki do kontrolki Label w formularzu.
Chciałbym, aby formularz odczytywał dane z excella i wyświetlał je w labelu.
Dziękuję za pytanie.
Do kontrolki typu label możemy odnosić się jak do każdej innej zmiennej:
lbl_tytul = Worksheets("Sheet1").Range("A1")
Wypełniam w ten sposób domyślny atrybut kontrolki o nazwie lbl_tytul. W tym przypadku jest to Caption.
lbl_tytul.Caption = Worksheets("Sheet1").Range("A1")
Cześć. Jak zrobić button "Browse" który otworzy okno do wskazania ścieżki do pliku (interaktywne przeglądanie zawartości dysku w celu wskazania folderu i nazwy pliku do zapisu ?
Np. w ten sposób:
Sub GetFile()
Dim fNameAndPath As Variant
fNameAndPath = Application.GetOpenFilename(FileFilter:="Excel Files (*.XLS), *.XLS", Title:="wybierz plik")
If fNameAndPath = False Then Exit Sub
Workbooks.Open Filename:=fNameAndPath
End Sub
Witam , nie mogę znaleźć komendy, która usuwałaby wstawione wcześniej obrazki za pomocą VBA. Cells.clear czyści mi arkusz z tekstu i koloru wypełnienia, ale obrazki zostają.Czy mogę prosić o pomoc?
Witam, W jaki sposób można pracować na nazwie pliku wskazanego poprzez metodę : Application.GetOpenFilename (chciałbym wprowadzić nazwę jako zmienna typu string)
Author
Ta metoda służy do tego, aby użytkownik mógł sam wskazać plik. Jeżeli lokalizacja pliku jest znana to plik można otworzyć tak:
Sub test()
Dim NewWorkbook As Workbook
Set NewWorkbook = Workbooks.Open(„c:\test\book1”)
End Sub