Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 64055 Skopiuj do schowka Szukający ComboBox wyrzuca wyłącznie więcej wyników niż 1
Autor Wiadomość
Karol Kot
świeżak


Posty: 6
Wysłany: 06-02-2019, 15:07   Szukający ComboBox wyrzuca wyłącznie więcej wyników niż 1

Mam problem z kodem ComboBox'a - służy do wyszukiwania konkretnych produktów/indeksów produktów, podczas wpisywania na bieżąco filtruje listę i pokazuje wyniki. Kłopot polega na tym, że wszystko działa pięknie do momentu kiedy wprowadzimy dokładną nazwę lub indeks produktu - wtedy Combo powinien znaleźć właśnie tę pozycję ale potrafi pokazać ilość wyników wyłącznie większych niż jeden. Jak mniemam jest to wina pętli. Czy wiecie jak rozwiązać ten problem aby COmbo pokazywał również jeden, konkretny wynik?

Kod:

Private Sub ComboBox1_Change()
   
    Dim r As Range
    Dim strr As Range
    Dim icombo As Integer, i As Integer
    Dim listvalue As String
   
   
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    ActiveSheet.DisplayPageBreaks = False
   
    If Me.EnableEvents = False Then Exit Sub
   
    Me.EnableEvents = False
   
    CommandButton2.SetFocus
    ComboBox1.SetFocus
   
    listvalue = ComboBox1.Value
    icombo = ComboBox1.ListCount
    For i = 0 To icombo - 1
        ComboBox1.RemoveItem (0)
    Next i
    icombo = ComboBox1.ListCount
    Lista.Range("AktualnaWartośćComboBox") = listvalue
   
    On Error Resume Next

    ComboBox1.List = Range("ListaRozwijanaWyszukiwanaFiltrowana").Value

    On Error GoTo 0
   
    Me.EnableEvents = True
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    ComboBox1.DropDown
   
   
End Sub
ID posta: 362074 Skopiuj do schowka
 
 
umiejead 
Excel Expert


Pomógł: 242 razy
Posty: 1325
Wysłany: 06-02-2019, 15:27   

Witamy na Forum.

Załącz przykładowy plik.
_________________
.
Jak poprawnie opisać problem: http://www.excelforum.pl/...ika-vt59262.htm
I dbajmy - proszę - o poprawną polszczyznę.
ID posta: 362077 Skopiuj do schowka
 
 
Karol Kot
świeżak


Posty: 6
Wysłany: 10-02-2019, 17:00   

Cześć Wszystkim! Fakt, jestem tu nowy więc wypadałoby się przywitać :)

Załączam zatem plik testowy, przepraszam, że tak późno ale byłem w podróży :)

Wyjaśniając dokładnie problem:
W pierwszym arkuszu tworzymy ofertę - po dwukliku w zakresie C14:C53 otwiera Nam się UserForm, w którym zawarte są 2 ComboBoxy, jeden do przeszukiwania po nazwie, drugi po indeksie. Problem polega na tym, że istotna jest możliwość znalezienia konkretnego wyniku tymczasem combo wyrzuca wyłącznie więcej wyników niż jeden.

Samo wyszukiwanie odbywa się w drugim arkuszu "Cennik"
Wyszukiwanie po indeksach odbywa się dokładnie w ten sam sposób co po nazwach tylko konwertuje wynik do nazwy.

Przykład:
W ComboBox 1 (wyszkuiwanie po nazwie) wpisujemy: "Kot" - wyrzuca 5 zgodnych wyników ale jeżeli wpiszemy "Kot 1" niestety combo wyrzuca 0 wyników. Na bardziej rozbudowanej liście jest to niezmiernie kłopotliwe szczególnie w przypadku szukania po indeksie.

Byłbym bardzo zobowiązany za pomoc w rozwiązaniu tego problemu tak aby combo potrafiło wyrzucić również konkretny wynik.

TESTOWY.xlsm
Pobierz Plik ściągnięto 17 raz(y) 539.5 KB

ID posta: 362314 Skopiuj do schowka
 
 
Karol Kot
świeżak


Posty: 6
Wysłany: 17-02-2019, 17:59   

Podbijam.

Macie jakiś pomysł?
ID posta: 362775 Skopiuj do schowka
 
 
Tajan


Pomógł: 4258 razy
Posty: 9475
Wysłany: 17-02-2019, 19:01   

Jeżeli zakres przypisywany do listy kombo zawiera tylko jedną komórkę to jego wartość Value nie jest tablicą i tym samym nie może być przypisana bezpośrednio do właściwości List kontrolki.
W takim przypadku należy użyć metody AddItem lub samodzielnie umieścić zwracaną wartość w tablicy. Przykładowo, zmień linię:
Kod:
ComboBox1.List = Range("ListaRozwijanaWyszukiwanaFiltrowana").Value
na:
Kod:
    With Range("ListaRozwijanaWyszukiwanaFiltrowana")
         Select Case .Count
                Case Is > 1: ComboBox1.List = .Value
                Case Is = 1: ComboBox1.List = Array(.Value)
         End Select
    End With
I taka uwaga. Nie używaj "On Error Resume Next" aby ukryć zgłaszane błędy ale staraj się eliminować przyczynę ich powstawania.
ID posta: 362777 Skopiuj do schowka
 
 
nunus67 
ExcelSpec


Pomógł: 171 razy
Posty: 496
Wysłany: 17-02-2019, 19:14   

według mnie strasznie komplikujesz sobie życie, podmień Twój kod np. na taki:
Kod:
Private Sub ComboBox1_Change()
Dim lista As Variant
Dim lista2 As Variant
   ' pobieram do tablicy listę z arkusza.
   lista = ThisWorkbook.Sheets("CENNIK").Range("A4:A33").Value
   'potrzebujemy listę jednowymiarową
   lista2 = Application.Transpose(lista)
   'filtruję jednowymiarowa listę
   lista2 = Filter(lista2, Me.ComboBox1, True, vbTextCompare)
   ' wstawiam przefiltrowaną listę do Listboxa
   Me.ComboBox1.List = lista2
   Me.ComboBox1.DropDown
End Sub

czy działa tak jak chciałeś?
_________________
Nunus67
ID posta: 362778 Skopiuj do schowka
 
 
Karol Kot
świeżak


Posty: 6
Wysłany: 17-02-2019, 20:17   

Panowie,

Ogromne dzięki, oba kody działają.

@Tajan Twój kod rozwiązuje problem od ręki.

@nunus67 Twój kod jest zdecydowanie lepszy ode mojego nawet z poprawką od Tajana. W prawdziwej liście jaką wyszukuje pojawiają się czasem dwie różne nazwy, które mają ten sam indeks - mój kod działał tak, że tak czy inaczej przypisywał jedną wartość (pierwszą znalezioną) do wyszukiwanej wartości - Twój wyrzuca wszystkie możliwości. Ponadto jest według mnie zauważanie szybszy.

W związku z tym chciałbym go wykorzystać, zaimplementowałem go również do ComboBox2, tylko jego istotą jest aby wyszukiwaną wartość "Indeks" konwertował do "Nazwa" inaczej nieprawidłowo przypisze wartości w reszcie komórek. Będę walczył z tematem ale nie rozumiem Twojego kodu póki co :P

Pewnie musiałbym dopisać jakiś "If" znaleziona wartość z komórki "A" to przypisz wartość value "B"

Jeżeli miałbyś chwilę coś podpowiedzieć byłbym niezmiernie wdzięczny.
ID posta: 362780 Skopiuj do schowka
 
 
nunus67 
ExcelSpec


Pomógł: 171 razy
Posty: 496
Wysłany: 18-02-2019, 08:24   

Karol Kot napisał/a:
tylko jego istotą jest aby wyszukiwaną wartość "Indeks" konwertował do "Nazwa"

spróbuj coś w ten deseń:
Kod:
Private Sub ComboBox2_Change()
Dim lista() As Variant
Dim lista2() As Variant
Dim i As Long, j As Long
    ' pobieram do tablicy listę z arkusza.
    lista = ThisWorkbook.Sheets("CENNIK").Range("A4:B33").Value
   
    With Me.ComboBox2
        If Me.ComboBox2 <> "" Then
            'potrzebujemy listę jednowymiarową
            For i = 1 To UBound(lista, 1)
                If LCase(lista(i, 2)) Like "*" & LCase(Me.ComboBox2) & "*" Then
                    j = j + 1
                    ReDim Preserve lista2(1 To j)
                    lista2(j) = lista(i, 1)
                End If
            Next i
            If j > 0 Then
                'wstawiam listę2
                .List = lista2
                .DropDown
            End If
        Else
            .List = ThisWorkbook.Sheets("CENNIK").Range("B4:B33").Value
        End If
    End With
End Sub
_________________
Nunus67
Ostatnio zmieniony przez nunus67 18-02-2019, 08:50, w całości zmieniany 1 raz  
ID posta: 362794 Skopiuj do schowka
 
 
Karol Kot
świeżak


Posty: 6
Wysłany: 18-02-2019, 08:43   

Dziękuję, wyszukiwanie działa perfekcyjnie ale nie mogę potwierdzić wyboru aby przypisać go komórki a przecież jest:

Kod:

.List = ThisWorkbook.Sheets("CENNIK").Range("B2:B4726").Value


i

Kod:

Private Sub CommandButton3_Click()

    ActiveCell = ComboBox2.Value
    UserForm1.Hide
   
End Sub
  
ID posta: 362796 Skopiuj do schowka
 
 
nunus67 
ExcelSpec


Pomógł: 171 razy
Posty: 496
Wysłany: 18-02-2019, 09:17   

zobacz w załączniku

Edit:
podmieniam załącznik

TESTOWY(n67).xlsm
Pobierz Plik ściągnięto 0 raz(y) 532.53 KB

_________________
Nunus67
  
ID posta: 362799 Skopiuj do schowka
 
 
Karol Kot
świeżak


Posty: 6
Wysłany: 18-02-2019, 09:33   

Cóż tu napisać... Rewelacja! Ogromne dzięki za pomoc, jestem Ci winien co najmniej czteropaczek. Sam z tym walczyłem chyba z 2 tygodnie w wolnych chwilach...

Jeszcze raz wielkie dzięki :)

Edit: Zefirek
Proszę nie cytować całego posta bezpośrednio pod nim wiadomo że do niego się odnosisz.
  
ID posta: 362802 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe