Dec 14 2009

Wtorki z VBA cz. 9 – Wprowadzanie wartości do arkusza

Posted by Marcin

Wprowadzanie wartości do komórek Excela można zrealizować w VBA na wiele sposobów, np. w zależności od źródła danych (baza danych, plik tekstowy, inny arkusz czy użytkownik). W tym poście opiszę jak pobrać dane od użytkownika i wstawić do komórki arkusza.

Do pobrania danych od użytkownika zastosujemy funkcję VBA InputBox. Składnia tej funkcji jest następująca:

 
InputBox(komunikat[, tytul][, wart_domyslna][, wsp_x]
[, wsp_y][, plik_pomocy, kontekst]
 
  • komunikat (argument wymagany) - tekst wyświetlany w oknie wprowadzania danych;
  • tytul (argument opcjonalny) - tytuł okna wprowadzania danych;
  • wart_domyslna (argument opcjonalny) - domyślna wartość wyświetlana w oknie dialogowym;
  • wsp_x, wsp_y (argument opcjonalny) - współrzędne pozycji górnego, lewego narożnika okna;
  • plik_pomocy, kontekst (argument opcjonalny) - plik i temat pomocy.

Podkreślam, że jest to funkcja, a zatem zwraca ona wartość, która musi zostać przypisana do zmiennej lub komórki arkusza. Warto pamiętać, że funkcja ta zwraca zawsze łańcuch tekstowy, zatem jeśli oczekujemy liczb, to musimy ten łańcuch poddać konwersji (np. funkcją Val(łańcuch)). Wywołana funkcja wygląda następująco:

Okno funkcji InputBox

Najprostszy sposób pobrania od użytkownika wartości i wstawienie jej do komórki A1 to użycie następującej procedury:

 
Sub PodajWartosc()
 
    Range("A1").Value = InputBox("Wprowadź dane")
 
End Sub
 

Problem jednak pojawia się wtedy, że jeśli użytkownik kliknie przycisk Anuluj to procedura ta usunie bieżącą zawartość komórki A1. Aby temu zapobiec wyposażymy naszą funkcję w mechanizm sprawdzania czy przycisk Anuluj został naciśnięty i w takim wypadku nie usuniemy bieżącej zawartości komórki:

 
Sub PodajWartosc()
 
Dim WartoscUzytkownika As String
 
    WartoscUzytkownika = InputBox("Wprowadź dane")
    If WartoscUzytkownika <> "" Then
        Range("A1").Value = WartoscUzytkownika
    End If
 
End Sub
 

Podane wyżej przykłady są bardzo proste; przede wszystkim wpisują wartości na "sztywno" do tej samej komórki (A1), nie sprawdzają poprawności danych ani nie konwertują łańcucha zwracanego przez funkcję InputBox na liczby (w przypadku jeśli to konieczne). Proponuję małe ćwiczenie: napisanie procedury, która pobierze dane od użytkownika (np. jego wiek), przekształci je w liczbę oraz wpisze do następnego wolnego wiersza w arkuszu. Wskazówki możecie znaleźć w poście: Wtorki z VBA cz. 8 – Identyfikacja zakresów.

Powiązane artykuły:

Leave a Reply