Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Excel VBA - Combobox - wypełnianie listy dla szukanej wartości

07 Lip 2013 23:14 8040 5
  • Poziom 8  
    Witam serdecznie,

    Z VBA dopiero zaczynam przygodę więc proszę forumowiczów o pomoc.
    Stworzyłem programik (załącznik) w którym:

    UserForm1
    - Wprowadzasz dane firmy do bazy w arkuszu1 – UserForm1_1
    - Wybierasz firmę z bazy danych
    UserForm2
    - Wprowadzasz dane miernika do bazy w arkuszu2 – UserForm2_1
    - Wybierasz miernik z bazy danych
    UWAGA!
    W bazie arkusz2 może znajdować się kilka różnych mierników należących do jednej firmy (NAZWA_FIRMY)
    UserForm3
    Sprawdzenie poprawności wyboru

    Problem
    Nie potrafię stworzyć pętli / warunku w UserForm2 – ComboBox1 - WYBÓR w którym:
    Jeżeli Label5 = UserForm1.Textbox1 (czyli jakaś nazwa firmy) to
    ComboBox1 = wyświetl/rozwiń wszystkie mierniki należące do tej firmy i wyświetl dane tego miernika w TextBox1÷3

    Czytałem że trzeba ustawić jakieś autofiltry ale za nic w świecie mi nie wychodzi.

    Dziękuję z góry i Pozdrawiam
  • Poziom 29  
    Wypełnianie kontrolki ComboBox danymi:
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Wypełnianie okienka tekstowego, danymi z ComboBox:
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    b

    Mniemam że, jak kolega będzie tworzył tyle formatek na ekranie , to zgubi się lada moment z kodem. Do wyświetlania lub pobierania danych można stosować wiele zawartych w VBA formatek np. TabStrip. zaletą takiego działania jet operowanie w jednym UserForm i panowanie na kodem. Podobnie sprawa ma się zesprawdzaniem poprawności danych, można to robić w tle a na ekran wyświetlać tylko komunikat o błędzie ( MsgBox ). Zawsze problemem staje się, wprowadzanie danych do arkusza. Stosując okienko tekstowe do wprowadzania danych trzeba operować oknem Properties Window. Bez znajomości parametrów zawartych w tym oknie można zginąć lub zakopać się paskudnie w kodzie VBA. Również trzeba wiedzieć że, opcje, tego okna, są inne w zależności od stosowanej kontrolki.
    Pozdrówka
  • Pomocny post
    Moderator Programowanie
    A nie byłoby prościej utworzyć listę przy Initialize na podstawie wartości z combo UserrForm1 ?

    Podmień procedurę w UserForm2 na
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    P.S. Dlaczego wyniki wyboru umieszczasz w TexBox'ach, a nie w Label'ach?
  • Poziom 8  
    Bardzo dziękuje koledzy za pomoc.
    W programiku wykorzystałem propozycję adamasa która działa bardzo dobrze.

    Bobo - dopiero raczkuję w VBA i metodami prób i błędów tworze małe programiki jak na razie na oddzielnych formatkach aby mieć dostęp do różnych kodów. W dalszej nauce będę się starał operować tylko w jednym UserForm.

    adamas - wyniki wyboru umieściłem w Textbox'ach a nie w Label'ach ponieważ na początku chciałem, aby można było w UserForm1 oprócz wyświetlania danych również je wprowadzać zamiast oddzielnego okna (UserForm1_2), ale odszedłem od tego a zapomniałem zmienić.

    Prosiłbym jeszcze o podpowiedź jak wypełnić pola textbox'ów (lub label'ów bo pewnie zmienię) gdyż mój kod z pierwszego wypełniania nie działa tz.

    With Me
    .TextBox1 = Arkusz1.Cells(.ComboBox1.ListIndex + 1, 1)
    End With

    Domyślam się że błędny jest ComboBox1.ListIndex ale nie wiem na co zmienić.

    Dziękuje i pozdrawiam
  • Pomocny post
    Moderator Programowanie
    ListIndex w combo UserForm2 nie ma zastosowania w taki sposób, ponieważ lista jest wynikiem filtrowania.

    Rozwiązań jest jak zwykle kilka:
    1. Wielokolumnowy Combobox, gdzie wyświetlana jest tylko jedna kolumna. Po wybraniu wartości, w Label'ach umieszczamy zawartość pozostałych kolumn.

    2. Klasycznie - z wykorzystaniem tablicy, tu ListIndex jak najbardziej. Wskazane, jeśli pracujemy z dużą ilość danych (działa bardzo szybko).

    3. Skoro jednak mamy do czynienia z VBA Excela, najprościej będzie wykorzystać funkcję arkuszową WYSZUKAJ.PIONOWO i tak zrobiłem w przykładzie.
  • Poziom 8  
    Jeszcze raz bardzo dziękuje Ci za rozwiązanie.
    Zadanie zostało rozwiązane.
    A ja dalej będę pogłębiał wiedzę VBA bo warto :)

    Pozdrawiam serdecznie