Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Excel - Formularz z listą rozwijaną

kecajs 13 Jan 2015 17:22 2445 18
  • #1
    kecajs
    Level 17  
    Witam,
    próbuję stworzyć formularz w Excelu, w którym będę mógł wybierać z listy rozwijanej jedną wartość, a reszta będzie się uzupełniać?
    W załączeniu przykładowy plik i na jego przykładzie opiszę, o co mi chodzi.
    Wyszukiwanie odbywa się na podstawie pól "Nr rys" i "Część na rys". Dlatego w formularzu najpierw muszę wybierać pole "Nr rys", a potem "Część na rys". Pozostałe pola (poza "Lp") powinny się kopiować z formularza "Dane". Pole "Lp" z kolei powinno się samo wypełniać w miarę zapełniania poszczególnych wierszy.
    Podpowiedzcie, jak to ugryźć...
    Pozdrawiam,
    Jacek
  • Helpful post
    #2
    adamas_nt
    Moderator of Programming
    Wpisz w C9
    Code: text
    Log in, to see the code
    i zatwierdź Ctrl+Shift+Enter (tablicowa)
    Resztę kolumn powinno załatwić zwykłe WYSZUKAJ.PIONOWO

    dodano po chwili

    A nie, "nazwa_ósma" - zdaje się, że wszędzie potrzebujesz "tablicówek".
  • #3
    kecajs
    Level 17  
    A wracając do tego wątku. W jaki sposób mogę dołożyć zakresu przeszukiwania w postaci innych arkuszy z tego samego skoroszytu? Mam skoroszyt, w którym jest kilka arkuszy. Potrzebuję przeszukać je wg powyższego schematu (tj, że podaję Nr rys i Część na rys, zaś reszta treści kopiuje się z właściwych arkuszy).
  • #4
    adamas_nt
    Moderator of Programming
    Najprościej wrzucić wszystko do jednego arkusza "Bazy". Można zrobić to formułami, patrz kolumna A i C w "Dane" + dynamiczna nazwa, patrz "Część_rys".
    Jeśli tych arkuszy jest więcej (niż powiedzmy 5), sugeruję napisać makro.
  • #5
    kecajs
    Level 17  
    Fajnie to wygląda, ale arkuszy jest 11 i nie mają tego samego układu kolumn. A nie mogę nic zmieniać, bo to są arkusze, z których korzystają też inne osoby. Myślałem, że jest prosty sposób i że mogę w Formularzu w formule tablicowej po prostu jakoś "dołożyć" sprawdzanie także w innych arkuszach.

    
    {=JEŻELI(D9<>"";INDEKS(Dane!B$2:B$11;PODAJ.POZYCJĘ(2;(Dane!C$2:C$11=D9)+(Dane!D$2:D$11=E9);0));"")}
    
  • #6
    adamas_nt
    Moderator of Programming
    kecajs wrote:
    Fajnie to wygląda, ale arkuszy jest 11 i nie mają tego samego układu kolumn.
    To "ciut" komplikuje, ale jeśli kolumny mają identyczne nagłówki, to coś dałoby się zrobić. INDEKS oraz PODAJ.POZYCJĘ "działają" również w poziomie. Załącz jakiś, w miarę podobny do oryginału, przykład.
  • Helpful post
    #8
    adamas_nt
    Moderator of Programming
    Najwygodniej byłoby zrobić UserForm z dwoma ComboBox'ami, gdzie na podstawie wyboru pierwszego (nazwa arkusza) wypełniało by się drugi danymi z dwóch kolumn. Bardzo uprościłoby ujednolicenie nagłówków.

    Oczywiście jest to do zrobienia w obecnej postaci, ale nie we wszystkich arkuszach występują obie poszukiwane kolumny. Co w takim przypadku?

    Excel - Formularz z listą rozwijaną
  • #9
    kecajs
    Level 17  
    Pomysł uważam niezły. Co do braku jednej z kolumn, to mogę dołożyć kolumnę pustą, którą sobie ukryję i tyle. W kolumnie nie będzie żadnych wartości lub będą wartości np. "0". Powinno rozwiązać to sprawę, prawda?
    A jak ten formularz zrobić?
  • Helpful post
    #10
    adamas_nt
    Moderator of Programming
    Przykład (schemat działania) w załączniku. Sposób odwołania do arkuszy (pobieranie danych) w przypisaniach Masgbox'a.
    Aktywne tylko dwie pierwsze pozycje, resztę trzeba doklepać.
    Można wstawić TextBox z ilością i odejmować ze stanu.
  • #11
    kecajs
    Level 17  
    Dopisałem już brakujące arkusze, ale co muszę jeszcze zmienić, aby w liście rozwijanej była widoczna druga linia, tj. po wyborze arkusza nie mam nic w liście z nr rys i pozycją na rys. Są tylko te dwie pierwsze, które Ty wpisałeś.
    A jak mogę to teraz przenieść do formularza, aby po kliknięciu na OK pojawiały się te dane w formularzu, tak jak to było w pierwszym formularzu?
  • #12
    adamas_nt
    Moderator of Programming
    Ad.1 Linię opatrzoną komentarzem (tymczasowe...do wyrzucenia) należy usunąć
    Ad.2 Sposób odwołania masz w trzeciej linijce tekstu komentarza
    Znaleźć ostatni wiersz w zakresie (docelowym) chyba potrafisz? Ostatecznie "wygoogluj" funkcję LastRow i przypisz.

    P.S. W drugim Combo formularza możesz umieścić dane z dowolnych kolumn (bez przesady oczywiście) i w dowolnej kolejności. Widziałbym tu symbol z kolumny "element" na przykład (dla lepszej orientacji).
  • #13
    kecajs
    Level 17  
    Usunąłem linię do wyrzucenia.
    Co do reszty, to możesz trochę bardziej sprecyzować, o jaki komentarz chodzi i trochę szerzej powiedzieć co mam zmienić w kwestii widoczności wszystkich pozycji w drugim polu Combo.
    Uporządkowałem już nagłówki.
    A jak te informacje pojawiające się w MsgBox przenieść do formularza? No i jak w MessageBox zrobić enter, aby każda wywoływana linia była wyswietlana w osobnym wierszu, a nie ciągiem?
    W załączeniu podsyłam plik z moimi zmianami.
    Dzięki wielkie za pomoc i cierpliwość do początkującego :)
  • #15
    kecajs
    Level 17  
    Super, wielkie dzięki za pomoc!
    A mam jeszcze pytanie odnośnie przycisku wywołującego MessageBox'a - jak go przesunąć lub zmienić wygląd etc. PPM nie działa :(
  • #16
    adamas_nt
    Moderator of Programming
    kecajs wrote:
    jak go przesunąć lub zmienić wygląd etc. PPM nie działa
    Karta "Deweloper" > Tryb projektowania

    P.S. Jest to przycisk AciveX, wywołujący UserForm ;)
  • #17
    kecajs
    Level 17  
    A jeszcze jedno - mam nadzieję ostatnie pytanie :)
    W jaki sposób ograniczyć ilość wierszy? Bo formularz będzie miał określoną liczbę wierszy i pod spodem muszę jeszcze coś dopisać. Kiedy dopisuję coś pod tabelą, to kolejne wiersze z MsgBox'a wstawiane są poniżej tego tekstu, a nie w kolejności w tabeli.
  • #18
    adamas_nt
    Moderator of Programming
    Zmień przypisanie na
    ostWrs = .Range("B35").End(xlUp).Row + 1

    gdzie B35 to ostatnia komórka tabeli. Przydałoby się być może zabezpieczenie przed przekroczeniem, ale to "wyjdzie w praniu".
  • #19
    kecajs
    Level 17  
    Wielkie dzięki za pomoc :) Ile mogłem, tyle "kciuków w górę" kliknąłem. Temat zamykam.