1. Budowa aplikacji do wprowadzania danych – Wstawianie pola listy ListBox (Formant ActiveX)
Pole listy w odróżnieniu od pola kombi umożliwia nam zaznaczenie więcej niż jednej opcji wyboru jednocześnie. Jak wstawić pole listy ListBox? Podobnie jak w przypadku poprzednich kontrolek, wchodzimy w kartę Developer. Spośród formantów ActiveX wybieramy pole listy. Osadzamy je nad kolumną „Rodzaj kontaktu”. Pole listy w Edytorze VBA obsługujemy bardzo podobnie jak pole kombi. Pole możemy zaprogramować także w sposób, by użytkownik mógł zaznaczyć tylko jedną opcję wyboru.
2. Budowa aplikacji do wprowadzania danych – Programowanie pola listy ListBox (Formant ActiveX) – pojedyncze zaznaczenie
Nasza tabela posiada już pole listy. Pole listy domyślnie ustawione jest w sposób, by można było zaznaczyć tylko jedną opcję wyboru. Samego programowania pola dokonujemy w Edytorze VBA w obiekcie „Ten_skoroszyt„. W naszym przypadku chcielibyśmy, by w polu listy pojawiły się do wyboru wartości dotyczące kontaktu: osobisty, telefoniczny, mailowy. Zapisujemy to w następujący sposób:
With Arkusz1.ListBox1 .AddItem "Osobisty" .AddItem "Telefoniczny" .AddItem "Mailowy" End With
3. Jak pobrać wartości z pola listy ListBox VBA?
W tej chwili możemy już wybrać dowolną jedną wartość z pola listy. By połączyć pole listy z naszą aplikacją do wprowadzania danych postępujemy analogicznie jak w poprzednich rozdziałach. Obiekt „Arkusz1” aktualizujemy o następującą linię kodu:
'WPROWADZANIE DANYCH Cells(sngWiersz, 8) = ListBox1

Kod naszego programu w obiekcie Ten_skoroszyt wygląda teraz 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 With Arkusz1.ListBox1 .AddItem "Osobisty" .AddItem "Telefoniczny" .AddItem "Mailowy" End With End Sub
2 komentarze “Kontrolki ActiveX – Pole listy ListBox w Excel VBA”
A wybór wielokrotny też możesz opisać? Dzięki, bardzo fajny kurs.
Ulepszyłam nieco kod o walidację, czy wszystkie pola zostały wprowadzone, zatem wrzucam 🙂
Private Sub CommandButton1_Click() Dim ID As Single Dim Wiersz As Single Dim LoginLicznik As Single 'WYBIERANIE OSTATNIEGO NIEZAPISANEGO WIERSZA I NADAWANIE ID ID = 1 + Application.WorksheetFunction.Max(Range("A:A")) Wiersz = 6 + Application.WorksheetFunction.CountA(Range("A:A")) 'SPRAWDZANIE LOGINU LoginLicznik = 7 Do While LoginLicznik <= Wiersz If Cells(LoginLicznik, 2) = LCase(TextBox1) Then MsgBox "Ten login znajduje się już w bazie, wprowadź inny", vbCritical GoTo endlabel End If LoginLicznik = LoginLicznik + 1 Loop 'WPROWADZANIE DANYCH If TextBox1 = "" Or TextBox2 = "" Or TextBox3 = "" Or TextBox4 = "" Or ComboBox1 = "" _ Or ComboBox2 = "" Or ComboBox3 = "" Or ComboBox4 = "" Or IsNull(ListBox1) = True _ Or OptionButton1 = False And OptionButton2 = False Then MsgBox "Wprowadź wszystkie dane" Exit Sub End If Cells(Wiersz, 1) = ID Cells(Wiersz, 2) = LCase(TextBox1) Cells(Wiersz, 3) = UCase(Left(TextBox2, 1)) & LCase(Mid(TextBox2, 2)) Cells(Wiersz, 4) = StrConv(TextBox3, vbProperCase) Cells(Wiersz, 5) = LCase(TextBox4) Cells(Wiersz, 6) = ComboBox1 Cells(Wiersz, 7) = DateSerial(ComboBox2, ComboBox3, ComboBox4) Cells(Wiersz, 8) = ListBox1 If OptionButton1 = True Then Cells(Wiersz, 9) = "Kobieta" ElseIf OptionButton2 = True Then Cells(Wiersz, 9) = "Mężczyzna" Else: Cells(Wiersz, 9) = "" End If If CheckBox1 = True Then Cells(Wiersz, 10) = "Tak" Else: Cells(Wiersz, 10) = "Nie" End If Cells(Wiersz, 11) = Date MsgBox "Dane zostały wprowadzone" TextBox1 = "" TextBox2 = "" TextBox3 = "" TextBox4 = "" ComboBox1 = "" ComboBox2 = "" ComboBox3 = "" ComboBox4 = "" ListBox1 = "" OptionButton1 = False OptionButton2 = False CheckBox1 = False endlabel: End Sub Private Sub CommandButton2_Click() TextBox1 = "" TextBox2 = "" TextBox3 = "" TextBox4 = "" ComboBox1 = "" ComboBox2 = "" ComboBox3 = "" ComboBox4 = "" ListBox1 = "" OptionButton1 = False OptionButton2 = False CheckBox1 = False End Sub Private Sub SpinButton1_SpinUp() ActiveWindow.SmallScroll up:=1 End Sub Private Sub SpinButton1_SpinDown() ActiveWindow.SmallScroll down:=1 End Sub