logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak użyć pętli For Each do iteracji do ostatniego rekordu w VBA?

kodzku 13 Wrz 2011 08:38 1418 8
REKLAMA
  • #1 9921983
    kodzku
    Poziom 9  
    Posty: 11
    Ocena: 1
    Witam.
    Mam napisany kod, w którym jest pętla działająca w danym zakresie.
    Jednakże zakres często się zmienia i raz jest 30 wierszy a raz 500.
    Proszę o pomoc jak uwzględnić w moim kodzie pętlę, która działała by tylko do ostatniego rekordu (myślę, że chodzi to o pętle for each lecz nie wiem dokładnie jak ją zastosować)

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Proszę pamiętać o używaniu znaczników syntax. Opcja Listing kodu. - arnoldziq
  • REKLAMA
  • #2 9922022
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    Jeżeli wiesz że wierszy będzie mniej niż 65536 (kompatybilne z Excelem 2003), to wstaw przed pętlą fragment:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    gdzie A65536 - ustala ostatni wiersz w kolumnie A.
    Potem w pętli użyj For i = 1 To ost_wiersz ...
  • #3 9922074
    kodzku
    Poziom 9  
    Posty: 11
    Ocena: 1
    rozumiem, że ost_wiersz to zmienna range?
    Czy możesz bardziej rozwinąć
    Potem w pętli użyj For i = 1 To ost_wiersz ...
    nie bardzo łapię(nie wiem jak to zastosować u mnie)
  • REKLAMA
  • #4 9922087
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    Po wstawieniu tego przed pętlę w zmiennej ost_wiersz będziesz miał numer ostatniego niepustego wiersza w wybranej kolumnie.
    Masz w kodzie dwie pętle, a nie napisałeś w której z nich "zakres często się zmienia i raz jest 30 wierszy a raz 500", stąd nie wiem co rozwijać.
    Generalnie:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #5 9922118
    kodzku
    Poziom 9  
    Posty: 11
    Ocena: 1
    faktycznie moje niedopatrzenie:D, chodzi mi o pierwszą pętle. Ale czy można to też zastosować również dla drugiej pętli. (chodzi o to że są to dwie listy(za każdym razem inne) które po spełnieniu warunku uzupełniają dane.
  • REKLAMA
  • #6 9922149
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    Można, czemu nie?
    Dodaj drugą zmienną, ost_wiersz2 czy coś w tym stylu, podaj nazwę tego drugiego arkusza w którym ma szukać wiersza, a w drugiej pętli For użyj - analogicznie - zmiennej ost_wiersz2 zamiast ost_wiersz.

    PS. Jeżeli masz przypisane arkusze do zmiennych ENERGADR i RBH, to możesz użyć:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    i
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #7 9922196
    kodzku
    Poziom 9  
    Posty: 11
    Ocena: 1
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Wprowadziłem tak jak mi napisałeś ( zamieniłem "A65536" na "B65536" ale debuger ciągle wyrzuca mi błąd w kodzie
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #8 9922291
    marcinj12
    Poziom 40  
    Posty: 3404
    Pomógł: 1024
    Ocena: 250
    Kod jest dobry i powinien działać. Trzy rzeczy:
    1. Jak deklarujesz zmienną ENERGADR? Czy jest tak arkusz?
    2. Wstawiłeś ten kod po tym, jak zmienna ENERGADR została przypisana?
    3. Możliwe że masz włączone automatyczne sprawdzanie czy zmienna została zdefiniowana, spróbuj tak zadeklarować (jeżeli wierszy będzie mniej niż 32767, a przeciwnym wypadku zamiast Integer użyj Long):
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Jeżeli to żaden z tych to najlepiej jakbyś wstawił plik albo wyślij go do mnie na PW.
  • #9 9922317
    kodzku
    Poziom 9  
    Posty: 11
    Ocena: 1
    sprawdziłem i działa. Zle określiłem zmienną i to był powód. Dzięki za pomoc.[/tex]

Podsumowanie tematu

✨ W dyskusji poruszono problem użycia pętli For Each w VBA do iteracji do ostatniego rekordu w arkuszu Excela, gdzie zakres danych jest zmienny. Użytkownik zapytał, jak dostosować kod, aby pętla działała do ostatniego niepustego wiersza. Odpowiedzi sugerowały użycie zmiennej `ost_wiersz`, która określa ostatni wiersz w kolumnie, co można osiągnąć za pomocą `Worksheets("NazwaArkusza").Range("A65536").End(xlUp).Row`. Użytkownik został poinstruowany, aby zastosować tę zmienną w pętli For, co pozwoli na dynamiczne dostosowanie zakresu iteracji. Dodatkowo, zasugerowano użycie drugiej zmiennej `ost_wiersz2` dla drugiej pętli, aby iterować po danych z innego arkusza. Po wprowadzeniu poprawek użytkownik potwierdził, że kod działa poprawnie.
Wygenerowane przez model językowy.
REKLAMA