1. Budowa aplikacji do wprowadzania danych – Wstawianie pola kombi ComboBox (Formant ActiveX)
Pole kombi to tzw. lista rozwijana, z której możemy skorzystać w Excelu. Należy pamiętać, że nie jest to ten sam rodzaj listy, który możemy wprowadzić w Excel w poprawności danych. Podobnie jak w przypadku pola tekstowego, by wstawić pole kombi ComboBox wchodzimy w zakładkę Developer. Włączamy tryb projektowania, następnie z formantów ActiveX wybieramy Pole kombi.Zgodnie z wymaganiami naszej aplikacji, wstawmy 4 kolejne pola kombi. Jedno pole nad kolumną Region. 3 pola nad kolumną Data urodzenia.
2. Budowa aplikacji do wprowadzania danych – Programowanie pola kombi ComboBox (Formant ActiveX)
Podobnie jak w przypadku pola tektowego, pola kombi powinniśmy odpowiednio zaprogramować. Pola kombi programujemy w następujący sposób:
- Przechodzimy do Edytora VisualBasic i wybieramy z lewej strony obiekt „Ten skoroszyt” lub w zależności od wersji Excela „This Workbook”
- W oknie Code ustawiamy Obiekt „Workbook” i wyzwalacz „Open”. Dzięki temu wartości w polach kombi załadują się nam przy każdorazowym otwieraniu skoroszytu.
- By wprowadzić wartości w listę pola kombi, odnosimy się do odpowiedniego arkusza, oraz pola kombi w następujący sposób Nazwa_arkusza.Nazwa_pola_kombi „Wartość , która powinna pojawić się w polu”. W taki sposób wprowadzamy w kolejnych liniach kodu wszystkie nasze wartości np województwa. W naszym przypadku nazwą pola kombi będzie ComboBox1
- Ważne jest, by po każdorazowej edycji wartości w polu kombi zapisać, zamknąć i ponownie otworzyć plik Excela.
Private Sub Workbook_Open() Arkusz1.ComboBox1.AddItem "dolnośląskie" Arkusz1.ComboBox1.AddItem "kujawsko-pomorskie" Arkusz1.ComboBox1.AddItem "lubelskie" '(...) End Sub
Jeśli korzystasz z formularza UserForm, a nie z kontrolek osadzanych w arkuszu koniecznie przeczytaj jeden z kolejnych rozdziałów kursu VBA na temat wstawiania pola kombi ComboBox w formularzu UserForm.
3. Budowa aplikacji do wprowadzania danych – Programowanie pola kombi ComboBox (Formant ActiveX) – Klauzula With
Jeśli wartości jest dużo, powinniśmy skorzystać z klauzuli With. Odnosimy się w ten sposób do pola kombi i arkusza tylko raz i zaoszczędzamy czas na pisanie naszego kodu
Private Sub Workbook_Open() With Arkusz1.ComboBox1 .AddItem "dolnośląskie" .AddItem "kujawsko-pomorskie" .AddItem "lubelskie" .AddItem "lubuskie" .AddItem "łódzkie" .AddItem "małopolskie" .AddItem "mazowieckie" .AddItem "opolskie" .AddItem "podkarpackie" .AddItem "podlaskie" .AddItem "pomorskie" .AddItem "śląskie" .AddItem "świętokrzyskie" .AddItem "warmińsko-mazurskie" .AddItem "wielkopolskie" .AddItem "zachodniopomorskie" End With End Sub
Kod wprowadzony w powyższy sposób powinniśmy zamknąć przy użyciu wyrażenia End With. Ważne także jest, by po każdorazowej edycji wartości w polu kombi zapisać, zamknąć i ponownie otworzyć plik Excela.
4. Budowa aplikacji do wprowadzania danych – Programowanie pola kombi ComboBox (Formant ActiveX) – użycie pętli
W tym momencie możemy już korzystać z funkcjonalności pola Kombi. Jeśli chcemy zaprogramować kolejne pola odpowiadające kolejno za dzień, miesiąc i rok urodzenia, najłatwiej będzie skorzystać z pętli For…Next. Jeśli chcemy, by w polu ComboBox2 odpowiedzialnym za dzień urodzenia wyświetlały się wartości od 1 do 31 na wzór dni miesiąca, powinniśmy zaprogramować pole kombi w następujący sposób:
With Arkusz1.ComboBox2 Dim intLicznikBox2 As Integer For intLicznikBox2 = 1 To 31 .AddItem intLicznikBox2 Next End With
Pole kombi programujemy tak jak poprzednio w kodzie obiektu „Ten skoroszyt„. Wyświetlanie dni tygodnia w formie liczb od 1 do 31 jest oczywiście uproszczeniem, gdyż nie każdy miesiąc posiada tyle dni. Możemy zaprogramować kod naszej aplikacji w taki sposób, by wyeliminować takie przypadki. By dokończyć wypełnianie wartości w polach kombi 3 i 4 analogicznie programujemy kod odpowiedzialny za miesiąc i rok. Dla odmiany zastosujmy także pętlę While..Wend do utworzenia wartości w naszych polach. Kod naszego programu w obiekcie „Ten skoroszyt” powinien wyglądać następująco:
Private Sub Workbook_Open() With Arkusz1.ComboBox1 .AddItem "dolnośląskie" .AddItem "kujawsko-pomorskie" .AddItem "lubelskie" .AddItem "lubuskie" .AddItem "łódzkie" .AddItem "małopolskie" .AddItem "mazowieckie" .AddItem "opolskie" .AddItem "podkarpackie" .AddItem "podlaskie" .AddItem "pomorskie" .AddItem "śląskie" .AddItem "świętokrzyskie" .AddItem "warmińsko-mazurskie" .AddItem "wielkopolskie" .AddItem "zachodniopomorskie" End With With Arkusz1.ComboBox2 Dim intLicznikBox2 As Integer For intLicznikBox2 = 1 To 31 .AddItem intLicznikBox2 Next End With With Arkusz1.ComboBox3 Dim intLicznikBox3 As Integer intLicznikBox3 = 1 While intLicznikBox3 <= 12 .AddItem intLicznikBox3 intLicznikBox3 = intLicznikBox3 + 1 Wend End With With Arkusz1.ComboBox4 Dim intLicznikBox4 As Integer For intLicznikBox4 = 1980 To 2000 .AddItem intLicznikBox4 Next End With End Sub
A to wynik naszego skryptu:
5. Budowa aplikacji do wprowadzania danych – Programowanie pola kombi ComboBox (Formant ActiveX) – Wprowadzanie wartości z pola Kombi ComboBox
By wprowadzić dane z naszych pól kombi do tabeli powinniśmy w kodzie obiektu Arkusz1 wprowadzić odniesienie do elementów ComboBox kolejno 1,2,3,4. W przypadku pól odpowiedzialnych za dzień, miesiąc, rok powinniśmy skorzystać z funkcji DateSerial(), by utworzyć datę z naszych elementów. Po zmodyfikowaniu kodu możemy go przetestować. Pamiętaj, że tą część kodu edytujemy w obiekcie Arkusz1.
Private Sub CommandButton1_Click() Dim sngId As Single Dim sngWiersz As Single Dim sngLoginLicznik As Single 'WYBIERANIE OSTATNIEGO NIEZAPISANEGO WIERSZA I NADAWANIE ID sngId = 1 + Application.WorksheetFunction.Max(Range("A:A")) sngWiersz = 6 + Application.WorksheetFunction.CountA(Range("A:A")) 'SPRAWDZANIE LOGINU sngLoginLicznik = 7 Do While sngLoginLicznik <= sngWiersz If Cells(sngLoginLicznik, 2) = LCase(TextBox1) Then MsgBox "Ten login znajduje się już w bazie, wprowadź inny", vbCritical GoTo endlabel End If sngLoginLicznik = sngLoginLicznik + 1 Loop 'WPROWADZANIE DANYCH Cells(sngWiersz, 1) = sngId Cells(sngWiersz, 2) = LCase(TextBox1) Cells(sngWiersz, 3) = UCase(Left(TextBox2, 1)) & LCase(Mid(TextBox2, 2)) Cells(sngWiersz, 4) = StrConv(TextBox3, vbProperCase) Cells(sngWiersz, 5) = LCase(TextBox4) Cells(sngWiersz, 6) = ComboBox1 Cells(sngWiersz, 7) = DateSerial(ComboBox4, ComboBox3, ComboBox2) endlabel: End Sub
3 komentarze “Kontrolki ActiveX – Pole kombi ComboBox w Excel VBA”
w jaki sposób osadzić pole kombi w formularzu userform?
Sprawdź w tym artykule: https://tomaszkenig.pl/kurs-excel-vba/formularz-userform-pole-kombi-combobox-w-excel-vba/
Czy da się zaprogramować pole ComboBox w ten sposób, by wybierać więcej niż jedną wartość z listy?