Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Excel- Kody VBA i długie zakresy

JaroFon 22 Sty 2012 19:44 1500 7
  • #1 22 Sty 2012 19:44
    JaroFon
    Poziom 23  

    Witam wszystkich.
    Mam pytanie związane z zakresami. W pliku mam zawarty poniższy kod:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Kod działa poprawnie. Jak widać w kodzie jest tam w Range bardzo długi zakres, z gór zaznaczę że jest to maksymalny zakres jaki mogę wpisać w kodzie aby działał poprawnie. Problem jest w tym że ja potrzebuję aby ten zakres był o wiele dłuższy ale niestety jak dodam do zakresu chociaż jeszcze jedną komórkę to wywala błąd. Pomyślałem o innym rozwiązaniu, po prostu zaznaczyłem interesujące mnie komórki i nazwałem je jako dajmy na to "zakres1" (jednak minus takiego sposobu jest taki że taki zakres działa tylko dla arkuszu w jakim został nazwany zakres a dla moich potrzeb ten zakres musi działać dla pięciu różnych arkuszy) i w kodzie zamiast tego długiego zakresu dałem:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    ale to też wywala błąd, w takim zakresie też nie mogę zapisać więcej jak to co w powyższym kodzie. Czy jest jakieś inne rozwiązanie aby dodać wiele dłuższy zakres?

    Dodano po 4 [godziny] 48 [minuty]:

    Rozwiązałem problem w ten sposób że cały zakres który chciałem, podzieliłem na parę części tak żeby poprawnie działało, jednak kod zrobił się potężny. W sumie to liczy się efekt i to że poprawnie działa, ale może jednak ktoś ma pomysł na to jak ten kod trochę zmniejszyć?
    Poniżej kod jak obecnie wygląda:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0 7
  • Pomocny post
    #2 22 Sty 2012 19:52
    marek003
    Poziom 40  

    "Złap" zależność i zamknij to w pętli/pętlach "For" z wykorzystaniem
    Range(cells(x,y),cells(m,n))

    Np tak

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #3 22 Sty 2012 20:07
    adamas_nt
    Moderator Programowanie

    Jeśli tego samego zakresu używasz w wielu arkuszach, zadeklaruj zmienną globalną i przypisz zakres. W arkuszach możesz używać tylko nazwy zmiennej.
    Przypisanie w pętli (wg. marek003) możesz zrealizować przy Workbook_Open.

    0
  • #4 22 Sty 2012 20:25
    JaroFon
    Poziom 23  

    marek003 napisał:
    "Złap" zależność i zamknij to w pętli/pętlach "For" z wykorzystaniem
    Range(cells(x,y),cells(m,n))

    Np tak

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Dzięki bardzo, ten sposób działa rewelacyjnie, chociaż trochę dłużej myśli zanim wszystko sformatuje, w moim sposobie wszystko robi się natychmiast. A jak w Twoim kodzie wykluczyć dwa wiersze 45 i 46?

    Dodano po 1 [minuty]:

    adamas_nt napisał:
    Jeśli tego samego zakresu używasz w wielu arkuszach, zadeklaruj zmienną globalną i przypisz zakres. W arkuszach możesz używać tylko nazwy zmiennej.
    Przypisanie w pętli (wg. marek003) możesz zrealizować przy Workbook_Open.

    Czyli jak cały ten kod dam do Workbook_Open to już nie trzeba dodatkowego działania w arkuszach tego kodu?

    0
  • Pomocny post
    #5 22 Sty 2012 21:09
    marek003
    Poziom 40  

    JaroFon napisał:
    ... chociaż trochę dłużej myśli zanim wszystko sformatuje...


    Niestety pętle muszą mieć czas na obrót. Ewentualnie wyłącz na chwilę odświeżanie - może to trochę przyśpieszy: zamknij kod w
    Application.ScreenUpdating = False
    ...
    Application.ScreenUpdating = True


    JaroFon napisał:
    ... A jak w Twoim kodzie wykluczyć dwa wiersze 45 i 46 ...


    Np. tak
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #6 22 Sty 2012 21:34
    JaroFon
    Poziom 23  

    Dzięki bardzo. Problem rozwiązany więc temat zamyka.

    Dodano po 18 [minuty]:

    Chociaż zanim zamknę temat to zapytam jeszcze o jedną rzecz której nie rozumiem.
    W kodzie dałem taką linijkę (dałem ją metodą prób i błędów do momentu aż zaczęło formatować poprawnie):

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    W kodzie zostało zapodane że dla górnego indeksu format ma działać na formule "=D4+D5=0"
    a proszę zerknąć na screena co tak naprawdę kod zrobił
    Excel- Kody VBA i długie zakresy
    a dla indeksu dolnego kod wygląda tak:
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    a zrobił to:
    Excel- Kody VBA i długie zakresy
    Zaznaczę że to co pokazują screeny jest prawidłowe ale musiałem w kodzie zapodać formuły metodą prób i błędów. Dlaczego są takie różnice?

    0
  • Pomocny post
    #7 22 Sty 2012 22:51
    marek003
    Poziom 40  

    JaroFon napisał:
    a proszę zerknąć na screena co tak naprawdę kod zrobił


    Myślałem że to zamierzone (bo nie znam całego kodu) - choć jak się teraz okazuje nieświadomie.
    (więcej szczęścia :) )

    Użyłeś odwołań względnych - poza tym formatowanie warunkowe ma pewne mankamenty jeżeli chodzi o adresowanie bo odwołuje się do zaznaczonej wcześniej komórki (a w makro nie ma żadnego "select").

    Chcesz sprawadzić?
    Zaznacz komórkę A1 i uruchom ten kod. Sprawdź odwołania w formatowaniu.
    I zrób to samo zaznaczając inną komórkę np D8 i uruchom kod. Sprawdź formatowanie.

    To jest plus i minus formatowania warunkowego - jeżeli tak można powiedzieć. Czasami pomaga czasami "szkodzi". Najważniejsze by wiedzieć co się chce zrobić i jak dana funkcja/moduł excela działa.

    Zwróć też uwagę że jak w danym arkuszu uruchomisz to makro drugi raz ale inna będzie komórka zaznaczona przed uruchomieniem doda się nowy warunek.

    Więc jeżeli nie byłeś pewien działania swojego kodu przemyśl to jeszcze raz. (może wystarczy w makro zaznaczać zawsze tą samą komórkę przed wykonaniem kodu)

    0
  • #8 23 Sty 2012 18:02
    JaroFon
    Poziom 23  

    marek003 kurcze, chyba już byłem zmęczony jak pisałem ostatni post, przecież to jest jasne co piszesz, w sumie to sam nie wiem dlaczego zauważyłem anomalie skoro wszystko jest OK.
    Tak to było zamierzone i działa tak jak ma działać. Jeszcze raz dzięki za pomoc.
    Zamykam.

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo