ComboBox w UserFormie
Pod wpisem dotyczącym kontrolki ComboBox ( https://www.dariuszskorniewski.pl/combobox/ ) Diana napisała komentarz z pytaniem o to jak zrobić dwa takie pola w których jedno jest zależne od drugiego. Podała bardzo czytelny przykład z markami samochodów i ich modelami. Jeżeli w pierwszym polu użytkownik wybierze konkretną markę, to w drugim do wyboru będą modele dla tej właśnie marki.
Żeby dostosować przykład do zadania, które wyznaczyła mi Diana dodałem kolejny ComboBox, który zawierać będzie nazwę miasta reprezentującego oddział firmy.
Nową kontrolkę nazwałem cbxOddzial.
Modyfikacja kodu
Teraz wystarczy że do zdarzenia cbxKraj_Change() dodam warunek sprawdzający jaka wartość pojawiła się w tym właśnie polu. Dla każdego z czterech krajów wprowadziłem tablice, które zawierają listy oddziałów.
Jako ostatni przypadek po Else dodaję polecenie, które czyści kontrolkę. Polecenie czyszczenia zawartości drugiego ComboBox’a sprawi, że po zmianie Kraju nie pozostanie mi stara nazwa oddziału. Ten krok jest niezbędny dlatego, że stara wartość z cała pewnością już nie należy do listy z tego nowo wybranego.
W ostatnim kroku dodaję nową linijkę kodu do eventu cbWstaw_Click(), aby zawartość nowej kontrolki została wprowadzana do arkusza. I jeszcze polecenie wyczyszczenia zawartości ComboBoxa’a po wprowadzeniu danych do arkusza.
Możesz też zobaczyć cały proces na YT:
4 thoughts on “UserForm – wartości w ComboBox zależne od innego ComboBox’a”
Witam
Panie Darku czy jest możliwość ustawienia jeżeli np w polu Oddział będę wpisywał ręcznie aby automatycznie pojawiały się podpowiedzi wpisywanych liczb np po wybraniu Polska mam wiele oddziałów „Kalisz”, „Poznań”, „Koszalin”, „Szczecin”; „Katowice” i wpisując np „KA” pojawią się podpowiedzi Kalisz i Katowice
Cześć Stanisław,
Jest to do zrobienia, chociaż szczerze to nigdy nie próbowałem zrobić tego samodzielnie 🙂 Jedyne rozwiązanie jakie widziałem to rozwiązanie, które pokazuje m.in. Adam z portalu ExceliAdam. Nie mam niestety linku do tego nagrania.
dzień dobry,
mam pytanie jak można by rozbudować kod, żeby w ramach jednego combi utworzonych zostało kilka wierszy w pliku excela? (chodzi mi o sytuację w której zawartość pola 1 w formularzu zaciąga się do wiersza 1, 2 i 3 (powiela się), zawartość pola 2 zaciąga się do wiersza 1, zawartość pola 3 – do wiersza 2, zawartość pola 4 – do wiersza 3.
Pozdrawiam!
Hej Julia,
W takim wypadku trzeba zmienić linijki kodu wstawiające wartości z formantów do kolejnych kolumn tego samego wiersza. W przypadku tego UserForma mamy akurat 3 formanty, więc można by dwukrotnie wstawić wartość z pierwszego formantu do 2 wierszy:
Sheets(„Arkusz1”).Cells(NowyWiersz, 2).Value = tbNazwa
Sheets(„Arkusz1”).Cells(NowyWiersz + 1, 2).Value = tbNazwa
a dalej wartości z pozostalych dwoch formantow:
Sheets(„Arkusz1”).Cells(NowyWiersz, 3).Value = cbxKraj
Sheets(„Arkusz1”).Cells(NowyWiersz +1, 3).Value = cbxOddzial
Mam nadzieję, że o to chodziło.
Pozdrawiam 🙂