UserForm – wartości w ComboBox zależne od innego ComboBox’a

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.

nowy Combobox w formularzu

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.

przypisanie listy wartości do ComboBox

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.

wprowadzenie zawartości ComboBox do arkusza

Możesz też zobaczyć cały proces na YT:

Spodobał Ci się artykuł ? Udostępnij go znajomym.

Share on facebook
Share on linkedin
Share on twitter

4 thoughts on “UserForm – wartości w ComboBox zależne od innego ComboBox’a”

  1. 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

    1. Dariusz Skórniewski

      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.

  2. 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!

    1. Dariusz Skórniewski

      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 🙂

Leave a Comment

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