Strony

  • Strona główna
  • Kurs Excel
  • Kurs VBA
  • Moje narzędzia
  • Ciekawe Strony

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

MsgBox prompt,[buttons],[title],[helpfile,context]

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
vbOKOnly0Klawisz Ok.
vbOKCancel1Klawisze Ok i Anuluj
vbAbortRetryIgnore2Przerwij, Ponów próbę, Ignoruj
vbYesNoCancel3Klawisze Tak, Nie, Anuluj
vbYesNo4Klawisze Tak i Nie
vbRetryCancel5Klawisze Ponów Próbę i Anuluj
vbCritical16Ikona krytyczna informacja
vbQuestion32Ikona pytanie
vbExclamation48Ikona Ostrzeżenie
vbInformation64Ikona Informacja
vbDefaultButton10Pierwszy klawisz wybrany
vbDefaultButton2256Drugi klawisz wybrany.
vbDefaultButton3512Trzeci klawisz wybrany
vbDefaultButton4768Czwarty klawisz wybrany
vbApplicationModal0Okno modalne w ramach apllikacji, użytkownik nic nie zrobi  w Excelu dopóki nie zamknie okna, może pracować na innych aplikacjach,
vbSystemModal4096Okno modalne w ramach systemu, użytkownik nie może pracować na żadnej aplikacji, dopóki nie zamknie okna, rzadko działa
vbMsgBoxHelpButton16384Umieść dodatkowy przycisk Pomoc
vbMsgBoxRight524288Tekst 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ę:

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
vbOK1OK
vbCancel2Anuluj
vbAbort3Przerwij
vbRetry4Ponów próbę
vbIgnore5Ignoruj
vbYes6Tak
vbNo7Nie

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,
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 liniach

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.