Wygodniejsza wersja instrukcji InputBox (tylko VBA Excel)

przez | 2024-06-04

Podczas pisania makr gdy robię coś na szybko i potrzebuję pobrać jakąś informację od użytkownika to używam instrukcji InputBox. Oto prosty przykład:

Sub TestInputBoxa()
    Dim Odp As String
    Dim LiczbaDni As Long
    
    Odp = InputBox("Z ilu ostatnich dni mam załadować dane", _
            "Zestawienie sprzedaży", "7")

    If Odp = "" Then
        MsgBox "Anulowano", vbExclamation
        Exit Sub
    End If
    
    If Not IsNumeric(Odp) Then
        MsgBox "Należało wprowadzić liczbę a nie tekst!!", vbExclamation
        Exit Sub
    End If
    
    LiczbaDni = Val(Odp)
    MsgBox "Poniżej wpisz kod generujący raport z " & Odp & " ostatnich dni", vbInformation
End Sub

Niestety, ale owe okienko nie wygląda zbyt okazale

Tutaj mała uwaga: funkcja InputBox zwraca wartość typu String. Jeśli zwróci pusty ciąg znaków, to znaczy, że użytkownik kliknął w przycisk Anuluj (Cancel).

W tym okienku chciałem pobrać od użytkownika liczbę. Niestety, ale złośliwy użytkownik może wpisać jakiś tekst, dlatego warto jest przeprowadzić walidację danych wprowadzonych przez użytkownika (stąd ta instrukcja If Not IsNumeric(Odp) Then)

W Excelu (nie ma tego w Wordzie, ani np. w Accessie) mogę wywołać metodę InputBox z obiektu Application. Ten inny InputBox ma trzy zalety: po pierwsze okienko jest nieco ładniejsze, po drugie przyciski mają polskie nazwy (OK i Anuluj a nie OK i Cancel) oraz mogę ustalić jakiego typu dane (parametr Type) użytkownik ma wprowadzać. Oto prosty kod:

Sub TestInputBoxa2()
    Dim Odp As Variant
        
    Odp = Application.InputBox(Prompt:="Z ilu ostatnich dni mam załadować dane", _
            Title:="Zestawienie sprzedaży", Default:="7", Type:=1)
    
    If Odp = False Then
        MsgBox "Anulowano", vbExclamation
        Exit Sub
    End If
    
    Odp = Int(Odp) 'Zamień na liczbę całkowitą
    MsgBox "Poniżej wpisz kod generujący raport z " & Odp & " ostatnich dni", vbInformation
End Sub

A tak wygląda owe okienko:

Tutaj jest mała różnica. Otóż ta metoda zwraca wartość typu Variant. Jeśli użytkownik kliknie w przycisk Anuluj to zmienna zwróci wartość False. Jeśli parametr Type przyjmuje wartość 1 to metoda zwraca wartość Typu Double, jeśli Type przyjmuje wartość 2 to metoda zwraca wartość typu String. Jeśli zamiast liczby wpiszę tekst to pojawi się standardowy komunikat błędu (nie muszę walidować wprowadzonych danych)

Parametr Type może przyjmować następujące wartości:

Wartość parametru TypeOpis
0Formuła
1Liczba
2Tekst (string)
4Wartość logiczna (True lub False)
8Odwołanie do komórki (obiekt typu Range)
16Wartość błędu #N/A
64Tablica wartości

2 komentarze do „Wygodniejsza wersja instrukcji InputBox (tylko VBA Excel)

  1. LS

    W drugim przykładzie w wywołaniu inputboxa są jakieś dziwne znaki równości z dwukropkiem. Co to za dziwny zapis? Takie dziwactwo było w języku Pascal, ale w VBA pewnie zapis ten oznacza. o innego.

    Odpowiedz

Dodaj komentarz

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

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.