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 - For each, czyli nie widzę błędu

alexandermaly 12 Kwi 2013 22:28 1800 15
  • #1 12 Kwi 2013 22:28
    alexandermaly
    Poziom 7  

    Witam.
    Napisałem makro, którego celem jest następująca akcja:
    VBA - For each, czyli nie widzę błędu

    W zaznaczonej komórce następuje uruchomienie makra, które domyslnie wczytuje z komórki na lewo od aktywnej słowo klucz. To słowo jest wyszukiwane w podawanych zakresach. Gdy w podanym zakresie słowo klucz zostanie odnalezione, to z kolumny na prawo od przeszukiwanej kolumny wyraz zostaje zapisany do łańcucha. Gdy zostaną przeszukane wszystkie zakresy, łańcuch trafia do aktywnej komórki.
    Wynik dla przykładu powinien wynieść 12345678910.
    Niestety z językiem zapoznaje się dopiero teraz, i nie za bardzo rozumiem błędu (chodzi najprawdopodobniej o pętle for each). Pętla napisana na podstawie przykładów z kilku stron.

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Liczę na pomoc!

    0 15
  • #2 13 Kwi 2013 08:16
    adamas_nt
    Moderator Programowanie

    Strasznie to wszystko skomplikowałeś. Najprościej byłoby napisać funkcję użytkownika, którą posługiwałbyś się jak wbudowanymi. Np =KLUCZ(N17).

    Nie rozumiem powodu użycia intputbox'ów oraz tablicy.
    Zakres tabeli z kodami/kluczami powinien być zdefiniowany, albo przynajmniej jej lewy, górny narożnik. Łatwiej byłoby, jeśli to możliwe, gdyby zajmowała dwie kolumny.
    Cały kod, moim zdaniem, nie powinien zająć więcej niż kilkanaście linijek.

    P.S. Jeśli chcesz przypisać adres względny, to posługuj się argumentami (zajrzyj do pomocy). Np adres = ActiveCell.Address(False, False)

    Makra nie analizowałem w działaniu. Czym objawia się błąd? Możesz załączyć ten plik?

    0
  • #3 13 Kwi 2013 09:11
    alexandermaly
    Poziom 7  

    Rzeczywiście, napisanie funkcji to najlepszy pomysł. Rozumiem, że wywołuje się ją jak wbudowaną? Co do adresu- wielkie dzięki, zaoszczędzi mi to wiele pracy. Mam jeszcze pytanie- co do pracy na łańcuchach. Można się odwołać, do znaku leżącego na konkretnym miejscu tak samo prosto, jak na przykład w języku C, czy trzeba używać left, mid i right?

    0
  • #4 13 Kwi 2013 09:29
    adamas_nt
    Moderator Programowanie

    alexandermaly napisał:
    Można się odwołać, do znaku leżącego na konkretnym miejscu tak samo prosto, jak na przykład w języku C, czy trzeba używać left, mid i right?
    Innego (prostego) sposobu nie znam. Funkcja mid ma raptem trzy (w tym jeden opcjonalny), przerażająco logiczne argumenty ;)

    0
  • #5 13 Kwi 2013 09:48
    alexandermaly
    Poziom 7  

    Ok, dziękuje, w razie potrzeby pomocy z funkcją zapytania będe kierować tutaj :)

    0
  • #6 13 Kwi 2013 17:28
    alexandermaly
    Poziom 7  

    Mam funkcje:


    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Niestety w Activecell wywala mi #ARG!
    Pomysł gdzie błąd?

    Kolejne pytanie, jak sprawić, żeby móc przeszukiwać więcej niż jeden zakres? Bo jako argument funkcji mogę przekazać tylko jeden?

    0
  • Pomocny post
    #7 13 Kwi 2013 17:53
    adamas_nt
    Moderator Programowanie

    Masz Waść talent do komplikowania prostych rzeczy :)
    Po wywaleniu wszystkiego, co niepotrzebne, działa:

    VBA - For each, czyli nie widzę błędu

    Małe sprostowanie. Zmieściłem się w 8 linijkach.

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #8 13 Kwi 2013 17:58
    alexandermaly
    Poziom 7  

    Ok, a zrobisz jeszcze, żeby działało dla kilku zakresów?
    Sorry za komplikowanie, ale pisząc w tym języku czuje się, na razie, jakbym nie miał rąk :D

    0
  • #9 13 Kwi 2013 18:18
    adamas_nt
    Moderator Programowanie

    W przykładzie dla od jeden do trzech. Dla więcej dopisz argumenty i warunki.

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    VBA - For each, czyli nie widzę błędu

    0
  • #10 13 Kwi 2013 18:23
    alexandermaly
    Poziom 7  

    Wiem, że to dosyć irytujące, ale jak zrobić dla nieokreślonej z góry ilości zakresów? :/

    0
  • #11 13 Kwi 2013 18:29
    adamas_nt
    Moderator Programowanie

    Takie rzeczy, to tylko w... w każdym razie nie w VBA ;)
    Możesz funkcji użyć w kilku komórkach i połączyć wyniki w jednej (ZŁĄCZ.TEKSTY)...

    0
  • #12 13 Kwi 2013 18:38
    alexandermaly
    Poziom 7  

    Hmmm... znalazłem taki temat, o używaniu ParramArray, to nic nie da? np:

    Kod: vb
    Zaloguj się, aby zobaczyć kod



    Nie działa, ale czegoś na ten wzór nie da rady zrobić? :/

    0
  • Pomocny post
    #13 13 Kwi 2013 19:50
    adamas_nt
    Moderator Programowanie

    No masz rację. Zapomniałem na śmierć o ParamArray. Spróbuj

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #14 13 Kwi 2013 19:57
    alexandermaly
    Poziom 7  

    O to mi właśnie chodziło :D Wielkie dzięki!
    Tak odnośnie dalszej nauki: Możesz polecić jakaś dobrą lekturę?

    0
  • #15 13 Kwi 2013 23:01
    adamas_nt
    Moderator Programowanie

    Z pisanych: Walkenbach
    W Internecie: elektroda.pl :)

    0
  • #16 14 Kwi 2013 07:23
    alexandermaly
    Poziom 7  

    dzięki :D

    0