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.

[VBa] Excel wyszukiwarka slow

17 Gru 2008 23:22 10789 3
  • Poziom 2  
    Witam, mam maly problem, otoz mam w exceu mala baze danych aktow prawnych i problem w tym ze chcialbym napisac makro ktore wyszukuje mi dany artykul, praraf lub cokolwiek tam

    Mialoby wygladac to tak ze np w komorce A1 wpisujemy "artykul 21" i idzie do komorki w ktorej jest taki zapis

    Generalnie z tym nie ma problemu, problem pojawia sie w przypadku gdy oporocz nazwy artykul jest wpisana dodatkowa informacja, ktorej ty nie wpisales w A1. Przykladowo jezeli wpiszemy w A1 "artykul 21" a w caly arkuszu wystepuja nazwy typu artyku 21 par. to nic mi nie znajduje a chcialbym aby makro wyszukiwalo tez dla nie pelnej nazy aktu prawnego ktory podales


    ktos wie jak to zapisac w vBa?
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
  • Moderator Programowanie
    Chodzi o to (ostatni post)?
    https://www.elektroda.pl/rtvforum/topic1164823.html
    W miejsce komentarza Twoje makro wystarczy wpisać np:
    Worksheets("Arkusz1").Range("A2:A5").Find("*artykul 21*").Select
    Lub przypisać do zmiennej wartość komórki A1.
    strSzukana = "*" & CStr(Cells(1, 1)) & "*"
    i wprowadzić poprawkę:
    (...).Find(strSzukana).Select

    p.s. Excel ma wbudowane całkiem niezłe narzędzie wyszukiwania.
  • Poziom 2  
    dzieki, tyle ze twoj kod ma pewna wade ktoa dla mnie jest istotna czyli znajduje 1 podobny rekord i dalej nic....

    Faktycznie wciaskajac w ecelu ctr+F mamy niezle narzedzie....co na kod VBa przeklada sie nastepujaco

    wart = Range("A1")

    Cells.Find(What:=wart, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, _
    SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False _
    , SearchFormat:=False).Activate


    tyle tylko ze on szuka w calym arkuszu a mi potrzebne tylko np w pierwszej kolumnie,,..... probowalem Range (xxx).Select a potem With.Selcetion ale to nie dziala. Probowalem tez w petli for dla kazjdej komorki z z zakresy ale to i tak szuka w calym arkuszu...

    wiec pytanie jak zminic ta excelowsa funkcje aby szulalo tylko w przez mnie zdefiniowanym zakresie (przykadowo A2:A50)

    Pytanie brzmi, jak poprawić ten post tak aby był napisany po polsku. Proszę poprawić błędy przed napisaniem następnego postu, inaczej wyciągnę konsekwencje regulaminowe - krzychoocpp.
  • Moderator Programowanie
    Można przypisać dowolną kombinację klawiszy do makro wyszukiwania (żeby łatwo było je uruchomić) np. takiego:
    Code:
    Cells.Find(What:=Cells(1, 1), After:=ActiveCell, SearchOrder:=xlByColumns).Select
    Jeszcze lepiej zastosować przypisanie opisane w moim poprzednim poście (...)What:=strSzukana(...).

    Do szukania tylko w 1 kolumnie można użyć prostego "wybiegu".
    W komórce np. P1 wpisujesz: $A$65536 (maksymalny adres w kolumnie A)
    Komórkę np. P2 zostawiasz dla zapisywania przez makro adresu ostatniego wyniku wyszukiwania. Teraz tylko kod na porównanie adresów i warunkowy skok do ostatniej "zapamiętanej" przez makro komórki, jeżeli wyszukiwanie wyjdzie poza kolumnę (w moim przykładzie) A.
    Code:
    If ActiveCell.Address > Cells(1, 16) Then
    
        Range(Cells(2, 16).Value).Select
    End If
    Cells(2, 16) = ActiveCell.Address

    Pewnie jest na to lepszy sposób, ale ten jest dość uniwersalny. Można ograniczyć działanie wyszukiwania do np. 3 kolumn. Po drugie: wystarczy jeszcze kilka linijek kodu aby móc zawsze powrócić do ostatnio znalezionej komórki (nawet po zamknięciu i ponownym otwarciu arkusza).
    Należałoby jeszcze uzupełnić całość w zabezpieczenie na wypadek braku szukanego tekstu (On Error) i wyświetlenie stosownego komunikatu.