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.

Makro vb porównanie plików z danymi coś w rodzaju wyszukaj pionowo

marcindargiewicz 06 Lip 2011 16:27 3516 14
  • #1 06 Lip 2011 16:27
    marcindargiewicz
    Poziom 10  

    Witam,
    siłuję się z makrem. Piszę różne kody, ale żaden nie działa. Mam trzy pliki:
    1. Makro z formatkami zakładek (zakł.: pełna, skrócona)
    2. Nowe dane
    3. Stare dane
    Wszystkie pliki są otwarte

    Kod miałby się odpalać przyciskiem w pliku Makro i było w nim podpięte.

    Próbuję napisać makro, które sprawdziłoby, które dane z pliku:

    I. Nowe dane występują w pliku Stare dane (porównywalna są wartości z kol.A) Po porównaniu stworzyło by kolejny 1 plik:
    1. Nowe (wg zakł pełna z pliku makra). Plik zawierał by dane z pliku Nowe dane.

    II. Stare dane występują w pliku Nowe dane (porównywalna są wartości z kol.A) Po porównaniu stworzyło by kolejne 2 pliki:
    1. Nieaktywne (wg zakł skrócona z pliku makra). Plik zawierał by dane z pliku Stare dane zmieniając tylko wartość w kolumnie Status z 1 na 0.
    2. Stare (wg zakł skrócona z pliku makra). Plik zawierał by dane z pliku Stare dane zmieniając tylko wartość w kolumnie Koszt (wartość kosztu pobierałby z pliku Nowe dane).

    Próbowałem tego z For Next, If, ale nie do końca rozumiem składnię tych poleceń. Przeszukiwałem różne fora, próbowałem sklejać przerabiać ale wszystko na nic.

    Z góry dziękuję

    0 14
  • #2 10 Lip 2011 12:29
    marcindargiewicz
    Poziom 10  

    czy ktoś jest w stanie co podpowiedzieć. Muszę to coś zastosować w jednym z plików w robocie. Nagrałem coś w rodzaju wyszukaj pionowo pomiędzy dwiema zakładkami. Przerobiłem aby pracowało pomiędzy plikami. Ogólnie działa, ale to nie do końca jest to o co mi chodziło. Wiele temu czemuś jeszcze brakuje i pozatym mam nieodparte wrażenie, że za pomocą VB można napisać coś co będzie działało doskonalej, ale nie wiem jak to zrobić.

    0
  • #3 10 Lip 2011 21:19
    adamas_nt
    Moderator Programowanie

    Wrzuć przykładowy plik z tym co już stworzyłeś, zobaczymy jak to wygląda i może coś wymyślimy...

    0
  • #4 11 Lip 2011 14:28
    marcindargiewicz
    Poziom 10  

    Dzięki za zainteresowania
    Kod ewaluuje.
    W tej chili składa się z 2 części

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Nie jest to, tym czego bym chciał, bo nie rozdziela danych a tylko zwraca wartości. Kod jest do podrasowania.

    Pliki w załączeniu (makro i 2 pliki z danymi)

    0
  • #5 11 Lip 2011 15:34
    marcindargiewicz
    Poziom 10  

    i się zapętliłem.

    Teraz mój kod wygląda tak. Dalej nie spełnia moich założeń a poza tym przestał działać.

    Kod: vb
    Zaloguj się, aby zobaczyć kod



    Moderowany przez And!:

    Proszę używać znacznika syntax,
    zmienione

    0
  • #6 12 Lip 2011 09:23
    adamas_nt
    Moderator Programowanie

    marcindargiewicz napisał:
    i się zapętliłem.
    Oj tak :)

    Jeśli chcesz używać zmiennej obiektowej, to zachowaj kolejność i prawidłową składnię. Czyli
    najpierw: "Set plik1 = Workbooks(Range("G6").Value)"
    Zmienna "plik1" reprezentuje teraz obiekt (z wszystkimi obiektami podrzędnymi oraz własnościami) przypisany wyżej. Czyli zamiast pisać: Workbooks("jakaś nazwa wcale nie tak długa"), piszesz: plik1
    Teraz można się odwołać: "a = plik1.Sheets("Nowe dane").Cells(Alfa_a, 1).End(xlDown).Row"
    Zmienna "plik1" reprezentuje teraz obiekt przypisany wyżej. Czyli zamiast pisać: Workbooks("jakaś nazwa wcale nie tak długa"), piszesz: "plik1"

    P.S. W edytorze VB używaj klawisza F8, szybciej wyłapiesz błędy. F1 też nie gryzie ;)

    0
  • #7 12 Lip 2011 15:15
    marcindargiewicz
    Poziom 10  

    A kwestia część kodu odpowiadające wyszukiwaniu wartości i rozdzielaniu. Jak to przerobić by wykonywało czynności rozdzielania na nowe pliki w zależności od rezultatu wyszukania.

    Bo to co jest w kodzie tylko wyszukuje wartości i przypisuje dane z 2 pliku. Nie jest to to o co mi chodzi. Nie umiem niestety tego przerobić.

    0
  • #8 12 Lip 2011 15:48
    adamas_nt
    Moderator Programowanie

    Nie wiem czy dobrze rozumuję. Wyniki obu porównań można umieścić w odpowiednich arkuszach pliku "makro.xls", skopiować (arkusze wynikowe) do nowych plików, nadać im nazwy i zapisać (zamknąć z zapisem).

    0
  • #9 12 Lip 2011 16:29
    marcindargiewicz
    Poziom 10  

    Rozumiesz doskonale, ale z uwzględnieniem wytycznych z początku tematu.

    0
  • #10 12 Lip 2011 21:22
    adamas_nt
    Moderator Programowanie

    Jak tam postępy? Ja to widzę mniej więcej w ten deseń

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #11 14 Lip 2011 16:48
    marcindargiewicz
    Poziom 10  

    Dzięki.
    Kod działa super. Troszkę go podrasowałem, ale zależałoby mi aby zwracał te pozycje które są w pliku Nowe dane a nie występują w pliku stare dane, tj te niepowtarzające się dane. Próbowałem różnych rzeczy zmieniałem w poleceniu if znak = na <> ale pojawiała się pętla w nieskończoność do końca zakresu danych.

    Super rozwiązanie. Jak będę wiedział jak zrobić by zwracał tylko nowe, niepowtarzające dane to skończę już sam i wkleję całość dla potomnych.

    MD

    0
  • #12 14 Lip 2011 18:41
    adamas_nt
    Moderator Programowanie

    marcindargiewicz napisał:
    Próbowałem różnych rzeczy zmieniałem w poleceniu if znak
    Musisz porównywać każdy z każdym i jeśli wynik porównania po zakończeniu przebiegu wewnętrznej pętli =0 to kopiujesz, jeśli >0 to znaczy, że występuje i nie kopiujesz...

    0
  • #13 14 Lip 2011 21:06
    marcindargiewicz
    Poziom 10  

    Jakiej wewnętrznej pętli. Gdzie zmienić znak?

    0
  • #14 14 Lip 2011 21:18
    adamas_nt
    Moderator Programowanie

    Znaku i de facto pętli nie zmieniasz. Trzeba sprawdzić, czy porównanie chociaż raz spełnia warunek. Można wstawić jakieś liczydło, albo zastosować trick kolegi marcinj12 ze zmienną typu Boolean. Np

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #15 21 Lip 2011 17:15
    marcindargiewicz
    Poziom 10  

    Witam
    poniżej dla potomnych zamieszczam gotowy kod w którego napisaniu pomógł mi niezmiernie adamas_nt i jestem mu za to bbbbbb wdzieczny.

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  Szukaj w 5mln produktów