Kontrolki ActiveX – Pole kombi ComboBox w Excel VBA

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.

Kurs Excel VBA - Pole Kombi ComboBox
Kurs Excel VBA – Pole Kombi ComboBox

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
Kurs Excel VBA - Pole Kombi ComboBox
Kurs Excel VBA – Pole Kombi ComboBox
Kurs Excel VBA - Pole Kombi ComboBox
Kurs Excel VBA – Pole Kombi ComboBox

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.

Kurs Excel VBA - Pole Kombi ComboBox
Kurs Excel VBA – Pole Kombi ComboBox

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:

Kurs Excel VBA - Pole Kombi ComboBox
Kurs Excel VBA – Pole Kombi ComboBox

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

Dodaj komentarz

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

3 komentarze “Kontrolki ActiveX – Pole kombi ComboBox w Excel VBA”