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/Excel - usuwanie wierszy w pliku na podstawie danych w innym pliku

Tomek0105 16 Lut 2013 22:53 4170 10
  • #1 16 Lut 2013 22:53
    Tomek0105
    Poziom 6  

    Witam.
    Potrzebuję makro, które usunie mi cały wiersz z pliku na podstawie danych zawartych w innym pliku. Oto mały opis jak wygląda sytuacja:

    W pliku nr 1 mam trzy kolumny z danymi A, B, C. Potrzebuję, żeby makro na podstawie wartości z kolumny C przeszukiwało kolumnę C w pliku nr 2 i jeżeli danej wartości nie znajdzie, w pliku nr 2 kasowało wiersz zawierający tą wartość w pliku nr 1.

    Dziękuje za szybką pomoc.

    0 10
  • #2 17 Lut 2013 08:02
    adamas_nt
    Moderator Programowanie

    Tomek0105 napisał:
    Potrzebuję makro, które usunie mi cały wiersz
    Co stoi na przeszkodzie, aby kolega napisał sobie takie makro?

    Przykładów różnych pętli jest na naszym forum pod dostatkiem, usuwanie wiersza można nagrać rejestratorem, kod wstawić do pętli i podstawić zmienne.

    Metoda do wyboru: porównywanie każdej z każdą, lub wyszukiwanie (Find)
    W razie problemów z działaniem, proszę pisać śmiało. Ktoś pomoże.

    P.S. Posty proszę pisać zgodnie z zasadami j.polskiego. Błędy (tym razem) poprawiłem. [mod]

    0
  • #3 17 Lut 2013 10:47
    Tomek0105
    Poziom 6  

    niestety nie udało mi się znaleźć nic co mógłbym wykorzystać w moim pliku.
    umiem napisać makro, które usunie mi cały wiersz ale pod warunkiem że, podam wartość, która ma być szukana. ale nie umiem napisać takiego makro, które usunie mi wiersz w na podstawie danych z innego pliku.

    pozdrawiam

    0
  • #4 17 Lut 2013 17:24
    adamas_nt
    Moderator Programowanie

    Wrzuć to makro, uzupełnimy...

    0
  • #5 17 Lut 2013 18:38
    Tomek0105
    Poziom 6  

    w załączniku są trzy pliki (właśnie na tych plikach chce pracować).
    w pliku "test1.xlsm" znajduje się dwa kody, pierwsze makro "pobieranie danych" działa prawidłowo. nie mogę sobie poradzić z tym drugim.
    w plikach "already late.xlsx" i "test.xlsx" znajdują się dane na, których chce pracować.

    0
  • #6 17 Lut 2013 18:48
    Tomek0105
    Poziom 6  

    Przepraszam poprzednio nie opisałem dokładnie co bym chciał osiągnąć.
    po wciśnięciu przycisku nr 2 w pliku "test1.xlsm" chciałbym żeby makro wyszukiwało wartości znajdujące się w pliku "test.xlsx" w kolumnie "D" i szukał ich w pliku"already late.xlsx" w kolumnie "C". I w przypadku gdy nie znajdzie danej wartości, żeby skasowało wiersze w pliku "test.xlsx" z tą daną wartością.

    mam nadzieje, że w miarę prosto to opisałem.

    dziękuje za pomoc

    0
  • #7 17 Lut 2013 22:10
    adamas_nt
    Moderator Programowanie

    Zrobiłbym to tak:

    Zastosowałbym pętlę Do While, gdzie warunkiem będzie niepusta komórka w kolumnie D arkusza "Raport" w pliku "test". Obszukujemy kolumnę C w pliku "alredy..."

    Metoda Find wygeneruje błąd jeśli nie znajdzie szukanej frazy. Czyli jeśli błędu nie ma - pracownik jest. Jeśli błąd - pracownik zwolniony, można usunąć wiersz wg schematu (oczywiście obsługa błędów wyłączona /On Error Resume Next/):

    If Err then
       usuwamy wiersz, bo pracownika nie ma
       musimy tu zmniejszyć Nr wiersza o 1 (przesuną się w górę po usunięciu)
    Else
       tu ew. kod jeśli pracownik jest
    End if

    0
  • #8 18 Lut 2013 06:11
    Tomek0105
    Poziom 6  

    ok. a czy mógłbyś mi dopisać ten kawałek kodu? Ponieważ mi coś nie wychodzi.
    będę bardzo wdzięczny.

    pozdrawiam

    0
  • #9 18 Lut 2013 21:17
    Tomek0105
    Poziom 6  

    Napisałem coś takiego:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    ale zamiast usuwać wiersz z konkretną wartością to usuwa zawsze pierwszy wiersz.
    Bardzo proszę o pomoc

    0
  • #10 19 Lut 2013 08:45
    adamas_nt
    Moderator Programowanie

    Jeśli dane są już wpisane do tablicy, to przeszukuj wg niej.
    Nie analizowałem specjalnie, wstawiłem tylko pętlę z metodą Find, o której wcześniej pisałem.
    Sprawdź działanie, może okazać się że powinno być odwrotnie... Dla pewności masz wybór w oknie komunikatu ;)

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #11 19 Lut 2013 11:38
    Tomek0105
    Poziom 6  

    tak powinno być odwrotnie. ale może uda mi się to przerobić.

    dziękuje bardzo za pomoc

    0