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

VBA - wyszukiwanie tekstu w arkuszu Excela podanej w TextBox

oreczka12 15 Lip 2012 20:07 14563 37
  • #1 15 Lip 2012 20:07
    oreczka12
    Poziom 9  

    Witam.

    Mam problem i nie wiem jak się do tego zabrać. Otóż jak napisać program który będzie wyszukiwał z arkusza "form" wartość wpisaną do ComboBox i TextBox? Nigdzie na forum nie mogę znaleźć takiego przykładu.

    Z góry dziękuje za pomoc.
    Ania

    0 29
  • #2 15 Lip 2012 20:25
    adamas_nt
    Moderator Programowanie

    oreczka12 napisał:
    Nigdzie na forum nie mogę znaleźć takiego przykładu.
    Stwórz go sama. Nagraj makro wyszukiwania i pod argument 'What:=' podstaw nazwę pola...

    Odnośnie wyszukiwarki forum:
    1. "excel vba combobox" - 28 wyników
    2. "excel vba wyszukiwanie " - 27 wyników

    Jest więc w czym przebierać.

    0
  • #3 15 Lip 2012 20:48
    oreczka12
    Poziom 9  

    A czy te pole należy wcześniej zdefiniować i przypisać, bo próbowałam nagrać makro i nie działa.

    -1
  • #4 15 Lip 2012 22:34
    adamas_nt
    Moderator Programowanie

    1. Wstaw pole kombi (w przykładzie ActiveX) do arkusza.

    VBA - wyszukiwanie tekstu w arkuszu Excela podanej w TextBox

    2. Nagraj makro wyszukiwania dowolnego ciągu. Np

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    3. Podstaw nazwę pola, uporządkuj makro i wklej w kod przycisku.
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    W zależności jakiej właściwości obiektu Range użyjesz, otrzymasz oczekiwany wynik... Tu zaznaczenie.

    0
  • #5 15 Lip 2012 22:54
    oreczka12
    Poziom 9  

    Tylko, że ja używam dwóch pól, ComboBox do wskazania kolumny i TextBox do wskazania szukanej wartości. Tutaj robi się problem :( Nie działa mi jak podstawiam do nagranego makra pole TextBox

    0
  • #7 15 Lip 2012 23:34
    oreczka12
    Poziom 9  

    A jak chciałabym wyszukać z innego arkusza niż formularz się w nim znajduje, a więc wskazałam jak poniżej

    ThisWorkbook.Sheets(1).Columns(Val(TextBox1.Text)).Find(What:=ComboBox1.Text, LookAt:=xlWhole).Select

    i nie działa, pojawia mi się komunikat Object required (Error 424)

    W załączeniu plik z formularzem.

    0
  • #8 16 Lip 2012 08:54
    adamas_nt
    Moderator Programowanie

    A gdzie to makro?

    0
  • #9 16 Lip 2012 09:09
    oreczka12
    Poziom 9  

    Kod jak poniżej, nie działa dla załączonego formularza

    ThisWorkbook.Sheets(1).Columns(Val(TextBox1.Text)).Find(What:=ComboBox1.Text, LookAt:=xlWhole).Select

    Teraz nie mam dostępu do pliku

    0
  • #10 16 Lip 2012 09:48
    adamas_nt
    Moderator Programowanie

    Po układzie arkuszy wnioskuję, że chodzi Ci o coś innego... Nie o pojedyncze wyszukanie, ale o listę wyników. Najprościej byłoby filtrem zaawansowanym w arkuszu "form". Skoro jednak ma być VBA...

    0
  • #11 16 Lip 2012 09:51
    marcinj12
    Poziom 40  

    Cytat:
    i nie działa, pojawia mi się komunikat Object required (Error 424)

    Może dlatego, że w tym formularzu nie masz ComboBoxa do którego się odwołujesz? :) Poza tym co chcesz zrobić z tymi wartościami które znajdziesz, zaznaczyć?

    Składnia funkcji Find nieco się komplikuje, kiedy trzeba wyszukać więcej niż jedną wartość (czytaj: wszystkie). Sam zawsze podpieram się takim przykładem jak poniżej (swoją akcję wstawiasz tam, gdzie komentarz):

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #12 16 Lip 2012 19:22
    oreczka12
    Poziom 9  

    Efekt ma być taki, że za pomocą formularza po określeniu warunków max 4, czyli można rozwinąć do 4 ComboBox (określa kolumnę) i do 4 TextBox (określa wartość w danej kolumnie), po wyszukaniu tych wartości w arkuszu "form" wyświetla mi całe wiersze z tymi danymi w nowym arkuszu. Zatem jeśli użytkownik zaznaczy dwa warunki lub więcej a także znacznik "oraz" czy "lub" wyszuka mi wówczas jedną lub więcej niż jedną pozycję i wyświetlą się one w nowym arkuszu. Dziękuję za pomoc :)

    0
  • #13 17 Lip 2012 20:33
    oreczka12
    Poziom 9  

    Do tego zadania dodałam opcję dodawania max. 4 TextBox-ów oczywiście widoczne po zaznaczeniu OptionButton-a
    Kod poniżej

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Jeżeli jednak chcę odznaczyć OptionButton1, klikając w zaznaczenie, aby zniknęły pola rozwinięte, to jak powinnam zapisać dany kod? Próbowałam na kilka sposobów ale nie udaję się.
    Z góry dziękuję za pomoc

    0
  • #14 17 Lip 2012 22:05
    adamas_nt
    Moderator Programowanie

    Nie wiem, czy dobrze zrozumiałem. Jeśli chodzi o zmianę stanu pola opcji, to najpierw należałoby sprawdzić wartość, następnie nadać odwrotną. Najprościej w instrukcji If-Else-End If.

    0
  • #15 17 Lip 2012 22:29
    oreczka12
    Poziom 9  

    Próbowałam,

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Ale nie znikają mi pola dodane poprzez zaznaczenie, czyli ComboBox i TextBox

    0
  • #16 17 Lip 2012 22:33
    adamas_nt
    Moderator Programowanie

    Skoro nadajesz wartość 'Visible =False', to... znikają.

    Wrzuć może ten formularz w przykładowym pliku jako załącznik.

    0
  • #18 17 Lip 2012 22:48
    adamas_nt
    Moderator Programowanie

    Aaa, to przyciski w ramce. Oprogramuj osobno.

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #19 17 Lip 2012 22:58
    oreczka12
    Poziom 9  

    A czy da się to zrobić nie używając przycisku Optionbutton2, czy można zaznaczyć OptionButton1 i klikając w ten przycisk odchaczyć, co sprawi że rozwinięte pola znikną?
    Bo te dwa przyciski "oraz" i "lub" służą do tego aby wyszukiwało sumę lub iloczyn podanych wartości.

    Dodano po 2 [minuty]:

    I w tym momencie nie zadziała mi to, ponieważ klikając na 'lub" nie rozwiną mi się kolejne pola ComboBox i TextBox

    0
  • #21 17 Lip 2012 23:18
    oreczka12
    Poziom 9  

    Ok, z CheckBox'em udało się. Dzięki. Pozostało jeszcze podpiąć wyszukiwanie :)

    0
  • #22 21 Lip 2012 18:57
    oreczka12
    Poziom 9  

    Witam,
    A czy ktoś może mi pomóc w kodzie w załączeniu. Jest to wyszukiwarka jak wyżej i przy zaznaczeniu optionbutton Oraz albo Lub będzie odpowiednio wyszukiwać wartości i kopiować do nowego pliku. Chodzi o to aby po wyborze odpowiednio guzika wyszukiwało i pokazywało odpowiednie wiersze dla Oraz wartości(max 4) znajdują się w jednym wierszu, a dla Lub (wartości max.4) wszystkie wiersze które zawierają co najmniej jedną z tych wartości. Dziękuję za pomoc

    0
  • #23 22 Lip 2012 19:58
    adamas_nt
    Moderator Programowanie

    1. Coś tam nabroiła, że plik ma >2MB? Przekopiowałem do nowego i... wyszło 50KB.

    2. Dobrym nawykiem jest nadawanie nazw kontrolkom. Trudno coś powiedzieć o 'CommandButton9' lub 'CommandButton13'. Coś można wydedukować z "cmdClose" lub 'cmdSzukaj', prawda?

    3. Naliczyłem 15 kombinacji dla 6-ciu przycisków opcji. Trzeba sprawdzić, czy gdzieś się nie "kopnąłem", następnie dopisać kopiowanie. Zapraszam do testowania :)

    0
  • #24 22 Lip 2012 21:19
    oreczka12
    Poziom 9  

    Hej, dzięki za pomoc, a czy podpowiesz jeszcze w którym miejscu dodawać te kopiowanie?

    0
  • #25 22 Lip 2012 22:22
    adamas_nt
    Moderator Programowanie

    Można kombinować z opcjami w pętli za Select, ale bez komplikowania życia łatwiej będzie wstawić pętlę w miejsce każdego "a=cośtam" z odpowiednią instrukcją warunkową If. Tu nie jest jeszcze jasne (przynajmniej dla mnie) co ma być kopiowane w przypadku Np: to / oraz to / lub to / oraz to ;)

    Dodano po chwili

    1. Zdaje się, że 'Lub" powinno odnosić się do kolumny z "górnego" ComboBox'a, czyli pod ramką powinien być ukryty, a widoczny tylko w przypadku "Oraz"... Np
    nazwisko: "Kowalska" >oraz>
    miasto: "Warszawa" >lub (widoczny tylko TextBox) > "Kraków" >oraz>
    zawód: "księgowa"
    2. Dla dat przydałoby się wyszukiwanie w zakresie od-do. Np
    Data: 2003-01-01 (w momencie wybrania "Data" zmieniasz Caption na (do/oraz) i reszta jak w pkt.1

    0
  • #26 22 Lip 2012 23:16
    oreczka12
    Poziom 9  

    "Oraz" i "Lub" służy do wyszukiwania wartości, działa to jako koniunkcja i alterantywa tych wyrażeń

    0
  • #27 22 Lip 2012 23:23
    adamas_nt
    Moderator Programowanie

    Proszę mi odpowiedzieć, co w takim razie:
    nazwisko: "Puk" >oraz>
    nazwisko: "Bąk" >lub>
    nazwisko: "Hak" >oraz>
    nazwisko: "Gaj"

    Bo taki wybór jest możliwy...
    Szukamy "Puków", "Bąków" lub "Haków" oraz "Gajów"?
    To jest to samo co /oraz/oraz/oraz albo lub/lub/lub przecież :)

    0
  • #28 22 Lip 2012 23:28
    oreczka12
    Poziom 9  

    Wszystkie wiersze dla Bąk i Hak

    0
  • #29 22 Lip 2012 23:33
    adamas_nt
    Moderator Programowanie

    oreczka12 napisał:
    Wszystkie wiersze dla Bąk i Hak
    To ja poddaję. Dla mnie to
    nazwisko: "Bąk" >lub> "Hak" (bez drugiego ComboBox'a)

    0
  • #30 22 Lip 2012 23:45
    oreczka12
    Poziom 9  

    Tutaj chodzi bardziej o to, żeby wybierać wartości różne i np. kiedy wybiorę Nazwisko Bąk i Zawód Nauczyciel, to w zależności o wyboru "Oraz" pojawi mi się wiersz dla Bąk który jest nauczycielem, a dla "Lub", wszystkie Bąki i Nauczyciele

    Dodano po 8 [minuty]:

    W załączeniu kod.

    0
  Szukaj w 5mln produktów