Elektroda.pl
Elektroda.pl
X
SterControl
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[EXCEL, VBA] - Usuwanie odpowiedniej ilości wierszy

bartolak6 15 Gru 2015 16:04 936 4
  • #1 15 Gru 2015 16:04
    bartolak6
    Poziom 2  

    Dzień dobry,
    Proszę o pomoc przy pisaniu makra, gdyż w jednym miejscu zaciąłem się na dobre. Nie znam dobrze VBA, uczę się powolutku na swój sposób, dlatego proszę o wyrozumiałośc jesli kod jest niepotrzebnie długi, a komendy bardzo prymitywne :)

    Co potrzebuję zrobić:

    W jednym arkuszu xls mam wzór faktury do wystawienia, wypełniam odpowiednie pola (zajmują komórki bez żadnej konkretnej kolejności), po kliknieciu przycisku import stosowne dane zaciągane są do innego arkusza "Raport Zbiorczy", wiersz po wierszu. Przykladowy fragment kodu:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    W takim wypadku wszystko działa mi tak jak chcę. Zdarza się jednak, że w fakturze wprowadzone są zmiany, dochodzą lub zostają odejmowane nastepne linie (wg tzw. kodów APA na fakturze) i wtedy Raport Zbiorczy.xls powinien się aktualizować. Napisałem działający kod dodający puste wiersze w raporcie, które są zapełniany danymi, gdy kolejne kody APA we wzorcu faktury >0.

    Potrzebuję jednak podpowiedzi, jakiej komendy użyć (czy pętli, czy czegoś innego, nie mam żadnego pomysłu) gdy w nowej wersji faktury zmniejszana jest liczba linii przy aktualizacji raportu.

    Wymyślilem coś takiego:
    Kod: text
    Zaloguj się, aby zobaczyć kod



    Taki kod nie działa, bo gdy powiedzmy w Raporcie Zbiorczym mam fakturę 015/11/2015 zajmującą trzy wiersze, poniżej fakturę 016/11/2015 zajmujacą cztery wiersze, i pragnę odjąć z faktury 015/11/2015 dwie linie, to jako że APY 2,3 i 4 nie są większe od zera, makro czyści 3 linie, usuwając tym samym z Raportu pierwszy wiersz faktury 016/11/2015.

    Przepraszam za długośc pytania, trudno wytłumaczyć o co mi chodzi, proszę o pomoc i jestem otwarty na sugestię/krytykę.

    Dodano po 5 [godziny] 41 [minuty]:

    Czy mógłby odpisać ktoś, czy pytanie jest niejasne/bezsensowne/nieprawidłowo zadane? Bardzo zależy mi na odpowiedzi, męczę się z tym :p

    0 4
  • SterControl
  • Pomocny post
    #2 15 Gru 2015 16:49
    marcinj12
    Poziom 40  

    Piszesz, że dane są kopiowane z faktury do arkusza "Raport zbiorczy" ale z kodu wynika, że operujesz cały czas na jednym arkuszu - odwołujesz się do Range niepoprzedzonego innymi nazwami arkuszy... Najpierw przypisujesz jakieś wartości komórek do zmiennych, a potem te zmienne wypisujesz na inne komórki - nigdzie tu nie widać zmiany arkusza. To jak to jest?

    Jeśli chodzi o sam problem aktualizacji to myślę, że najprościej będzie najpierw usunąć "stare" wiersze z danymi (pętla For szukająca numeru faktury), a potem dodać całą fakturę na końcu od nowa. Ewentualnie po takim zabiegu posortować całość po czym tam potrzebujesz...

    0
  • SterControl
  • #3 16 Gru 2015 13:34
    bartolak6
    Poziom 2  

    Dziekuję bardzo za odpowiedź! Faktycznie, przeklejałem fragment kodu by dać pojęcie co robię, mój problem występuje później, powinienem był podesłać również etap odpowiedzialny za otwieranie arkusza. Na tę chwilę nie jestem jeszcze pewny czy wyjdzie mi pętla usuwająca wszystkie takie same numery, ale dzięki ogromne za pomysł i na pewno będzie działał jeśli prawidłowo napiszę komendy :)

    0
  • Pomocny post
    #4 16 Gru 2015 14:08
    marcinj12
    Poziom 40  

    W takiej pętli najlepiej usuwać wiersze od końca, coś takiego:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #5 16 Gru 2015 15:19
    bartolak6
    Poziom 2  

    Dzięki ogromne raz jeszcze :) Mam masę innej pracy i wypróbuję jutro rano, ale z tego co ogarniam to właśnie to czego potrzebuję :)

    0