Kurs VBA – cz. 12 – Podstawowe wejście i wyjście

 

 

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:

prompt – Jaki tekst ma być wyświetlony w okienku,

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

Argument buttons tworzymy poprzez dodawanie odpowiednich stałych. Jeżeli chcemy wyświetlić przyciski Ok, Cancel i symbol informacji wywołam funkcję:

 

Poniższa funkcja doda jeszcze przycisk pomoc.

 

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.
 

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

 

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,
helpfile – Ścieżka do pliku z pomocą otwieranego przyciskiem F1,

context – Numer odpowiadający części pliku z pomocą.Przykład:

 

 

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.:

 

 

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.

Comments 7

  1. 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.

    1. 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")

  2. 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

  3. 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?

  4. Witam, W jaki sposób można pracować na nazwie pliku wskazanego poprzez metodę : Application.GetOpenFilename (chciałbym wprowadzić nazwę jako zmienna typu string)

    1. Post
      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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *