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 - makra - usuwanie pustych wierszy - runtime error 13

tomciopaluch34 21 Lis 2014 16:53 1728 10
  • #1 21 Lis 2014 16:53
    tomciopaluch34
    Poziom 5  

    cześć,

    podczas uruchamiania poższego makra, pojawia się bład "ru-time error "13"

    czy może ktoś pomóc?

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0 10
  • #3 21 Lis 2014 19:11
    tomciopaluch34
    Poziom 5  

    hej,

    makro, którego używam:
    działa poprawnie, ale tylko dla arkusza danego. Chodzi mi o makro, które będzie usuwać wszystkie wiersze w całym skoroszycie.

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #4 21 Lis 2014 19:32
    clubs
    Poziom 29  

    tomciopaluch34 napisał:
    hej,

    makro, którego używam:
    działa poprawnie, ale tylko dla arkusza danego. Chodzi mi o makro, które będzie usuwać wszystkie wiersze w całym skoroszycie.


    makro umieść w module a nie w arkuszu

    0
  • #6 21 Lis 2014 21:43
    clubs
    Poziom 29  

    a którego kodu używasz bo się pogubiłem?

    jeżeli ten drugi to zrób tak

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #7 21 Lis 2014 22:27
    tomciopaluch34
    Poziom 5  

    hej,

    zrobiłem test i pojawił się błąd:

    run-time error "13"

    z góry dzięuję za pomoc!!

    0
  • #9 21 Lis 2014 23:35
    tomciopaluch34
    Poziom 5  

    hej,

    hmm nie mogę załączyć pliku xls :( - nieprawidłowe rozszerzenie:(.

    może na maila prześle?

    dziękuję !

    0
  • #10 21 Lis 2014 23:37
    clubs
    Poziom 29  

    jeżeli masz xlsm to spakuj np. zipem

    0
  • #11 21 Lis 2014 23:43
    bobo
    Poziom 28  

    Tak myślę że kolega nie wie co oznacza błąd 13.
    Ale do rzeczy. Rozumiem że kolega chce za jednym zamachem usunąć wszystkie puste wiersze we wszystkich otwartych arkuszach skoroszytu. Jeżeli tak to, skad procedura ma wiedzieć ile arkuszy jest otwarte w danej sesji? Jeżeli używam zmienne to trzeba , dla przyzwoitości je zadeklarować, a jak już to trzeba wiedzieć czy mają zasięg lokalny czy globalny i oczywiście wiedzieć jakiego typu.
    Napisaną procedurę powinno cechować, prostota i szybkie działanie w wyniku. Łatwo jest określić zakres ilość wierszy używanych przez zakres, po co tracić czas na przeliczanie całych arkuszy? Mamy od strzała do tego właściwość UsedRange obiektu Worksheet. W całej zabawie jest trochę mieszania związanego z liczeniem wierszy , przecież wiersz w dowolnym arkuszu wcale nie musi się zaczynać od wiersza nr 1, ale to jest łatwe do przejścia. Procedura aby zadziałała , korzysta z gotowej funkcji COUNTA, w skrócie , jeżeli wiersz jest pusty to zwraca wartość 0. I na koniec ciekawostka, procedura "chodzi" po wierszach od dołu do góry, dlaczego? myślę że to już kolega wyrozumuje. A tak na marginesie , dlatego w swoim pierwszym poście skierowałem kolegę do linka związanego z podobnym tematem, myślałem że kolega załapie o co biega, no ale życie ma różne warianty rozwiązania. Poniżej zamieszczam kod takiej procedury, jest ona najprostsza z możliwych działajacych, bez patrzenia na zasady i poprawności, można ją rozwijać dowolnie wg. uznania.
    Pozdrówka

    Code:
    Sub DeleteEmptyRows()
    
    Dim lastrow As Long
    Dim a As Long
    Dim s As Long
    s = Sheets.Count
    For x = 1 To s
    Worksheets(x).Activate
         lastrow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
         For a = lastrow To 1 Step -1
        If Application.CountA(Rows(a)) = 0 Then Rows(a).Delete
         Next a
    Next x
     End Sub

    0