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.

Makro VBA: sprawdzanie czy komórka pusta i kopiowanie ...

PanPiotrAdamus 09 Cze 2009 20:30 21075 3
  • #1 09 Cze 2009 20:30
    PanPiotrAdamus
    Poziom 2  

    Witam,

    to mój pierwszy post na forum elektroda.

    Dopiero zaczynam z VBA i mam mały problem.

    Problem do rozwiązania wygląda tak:

    Code:

                   Kolumna
    Wiersza   
        1           aaa
        2           aaa
        3           aaa
        4
        5            bbb
        6            bbb
        7            bbb
        8
        9            c
        n+1



    W arkuszu mam taką serię w kolumnie A. Wartość każdej komórki nie ma żadnego znaczenia.
    Chciałbym aby makro sprawdzało czy komórka jest pusta i jeśli jest pusta to kopiowało do pustej komórki wartość poprzedniej.

    Jak dotąd napisałem takie makro ale nie działa (dostaję błąd 400).

    Code:


    Sub Macro ()

    FinalRow = Cells(Rows.Count, 1).End(x1Up).Row

    i=1
    For i=1 To FinalRow
          If Cells(i,1).Value<> 0 Then
              If Cells(i,1).Value=0 Then
                  Cells(i-1,1).Select
                      Selection.Copy
                         ActiveSheet.Paste
                End If
             End  If
     Next 1
    End For

    End Sub



    Niestety ale powyższy kod zwraca błąd. Czy ktoś z forumowiczów mógłby dać mi radę jak rozwiązać powyższy problem?

    Dzięki !

    Piotr.

    0 3
  • #2 09 Cze 2009 21:32
    adamas_nt
    Moderator Programowanie

    Nie sprawdzałem działania, ale:
    Błąd 1: nieprawidłowa instrukcja Rows.Count (x1Up, powinno być XLUP). Lepiej:

    Code:
    FinalRow = Cells(Rows.Count, 1).End(xlUp) 
    Lub
    Code:
    FinalRow = ActiveSheet.UsedRange.Rows.Count

    Błąd 2: Pętla For. Jeżeli przypisujesz wartości zmiennej i, to:
    Code:
    Next i
    lub (również prawidłowo) samo Next bez jawnego nazwania zmiennej.
    Błąd 3: End For - a to zupełnie niepotrzebne. Wyjście z pętli (zazwyczaj warunkowe) realizuje się poleceniem Exit For wewnątrz pętli. Tu niepotrzebne.

    Edit:
    A dopiero teraz przyjrzałem się ciału pętli. Warunki wzajemnie się wykluczają. Myślę, że sprawdzanie należy rozpocząć od drugiego wiersza (pierwsza możliwa "dziura" przy 3 niepustym) i postawimy dodatkowy warunek, żeby makro nie powodowało błędu jeśli wierszy jest mniej niż 3.
    Code:
    Sub Macro1()
    
    FinalRow = ActiveSheet.UsedRange.Rows.Count
    'FinalRow = Range("A65536").End(xlUp).Row 'jezeli tylko kolumna
    If FinalRow < 3 Then Exit Sub

    For i = 2 To FinalRow
        If Cells(i, 1).Value = "" Then
            Cells(i, 1) = Cells(i - 1, 1)
        End If
    Next

    End Sub

    1
  • #3 14 Cze 2009 20:03
    PanPiotrAdamus
    Poziom 2  

    Witaj,

    dzięki. Macro działa. Ten błąd z

    Code:
    FinalRow = Cells(Rows.Count, 1).End(xlUp)
    to literówka- chyba muszę zacząć nosić okulary.


    BTW,

    znasz jakąś stronę ze szczegółowym ujęciem funkcji VBA?

    Dzięki i pozdrawiam,

    Piotr.

    1
  • #4 15 Cze 2009 11:51
    adamas_nt
    Moderator Programowanie

    PanPiotrAdamus napisał:
    chyba muszę zacząć nosić okulary
    :) Ja mam to samo z "-" i "="

    Godne polecenia:
    Link1
    Link2
    Link3
    i wiele innych. Pozdrawiam.

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