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

[VBA] Excel, makro dla pliku

06 Maj 2020 15:11 495 23
  • Poziom 3  
    Witajcie,
    mam ogromną prośbę o pomoc w stworzeniu makra dla pliku. Męczę się z tym już kilkanaście godzin i niestety brakuje mi zwyczajnie wiedzy programowania VBA. Czy ktoś z Was mógłby mi pomóc stworzyć marko? Wkrokach opiszę co chciałbym, aby makro robiło.
    1.Po naciśnięciu przycisku ( wiem jak przypisac marko do przycisku) odblokuj aktualny skoroszyt.
    2. Jeżeli pojawiła się nowa pozycja w zakresie A5:170 to wpisz w kolumnie J(w tym samym wierszu) bieżącą datę. - [Nie zmieniaj daty poprzednich pozycji, które zostały wpisane wcześniej]
    3. Jeżeli uzupełniono w tym samym wierszu kolumnę A,B,D,E,F to chciałbym polecenie w makro, aby wymusiło wypełnienie kolumny M w tym samym wierszu, jeśli tego nie zrobiono to wyświetli się komunikat " Wpisz swój podpis", jeśli kolumna M jest nie uzupełniona to niech marko nic nie robi. Jeżeli została uzupełniona to...
    4. Jeżeli w kolumnie L w arkuszu "Spis" znajduje się pozycja "ZŁOM" to skopiuj WARTOŚĆ z tego wiersza z kolumny od A,B i wklej do skoroszytu "Zezłomowane" w kolumnę B,C w najbliższy pusty wiersz. Po operacji usuń wartości z arkusza"Spis"
    5. Skopiuj WARTOŚĆ z arkusza "Spis" kolumna D,E,F,G,H,I,J,K,L,M,N i wklej do arkusza "Zezłomowane" w kolumnę E,F,G,H,I,J,K,L,M,N,O.Po operacji usuń wartości z arkusza"Spis"
    6. Wpisz w pozycji L w arkuszu "Zezłomowane" "Za mała ilość" dla tych wartości
    7. Skopiuj z arkusza "Zezłomowane" wcześniej wklejone NOWE WARTOŚCI zakres B,C,E,F,G,H,I,J,K,L i wklej do arkusza "Raport złomowania" w pierwsze wolne wiersze od 13 do 35 wiersza w kolumanch A,B,D,G,I,J,K *. oraz jeśli zostały zapełnione to w pierwsze wolne wiersze od 49 do 71.

    *Arkusza ma ukryte kolumny dlatego przy kopiowaniu ręcznym wkleja się wsystko poprawnie

    Po wykonaniu wszystkich operacji chciałbym, aby makro przeniosło mnie do arkusza Spis i pokazało wszystkie pozycje znajdujące się w tym arkuszu.
    Na koniec zablokowało wiersz 1,2,3,4 oraz kolumny G,H,I,K,L.

    Z góry dziękuję za wszelką pomoc. Oczywiście sam nadal z tym walczę.
    Pozdrawiam
  • Poziom 38  
    Można zobaczyć, co Ci się udało napisać?
    Potrzebujesz pomocy, czy gotowego rozwiązania?
  • Poziom 3  
    Hej, oczywiście. Jutro wyśle kod, który napisałem wspólnie z kolegą. Niestety nie działa on tak jakbym chciał, a im bardziej w nim grzebie, tym dziwniejsze rzeczy się dzieją z danymi. 😉
  • Poziom 3  
    Hej, poniżej kod, który mam do tej pory. Niestety nie działa tak jakbym chciał, nie bardzo wiem jak go nawet skorygować i odpowiednio wkleić komendy. To jest zrobione poprzez nagrywanie, także amatorka...
    Kod: VBA
    Zaloguj się, aby zobaczyć kod

    Chciałbym, żeby makro kopiowało wszystko co zostało przefiltrowane w "Spis końcówek lotów" jako ZŁOM
    Wklejało w wolne wiersze w arkuszu "Zezłomowane" - najpierw A,B("spis końcówek lotów"), potem D-N("spis końcówek lotów")
    Wpisywało w pojawiające się pozycje "Za mała ilość" w arkuszu "Zezłomowane" w kolumnie L
    Kopiowało nowe pozycje z arkusza "Zezłomowane" (kolumny B-L) do arkusza Raport złomowania (Przy kopiowaniu 1:1 jest OK, bo w raporcie są zrobione specjalnie ukryte kolumny żeby tak się wklejało)w pierwszy wolny wiersz od 13 do 35, a jeśli ten jest zapełniony to od 49 do 71.
    Następnie, uwuwa pozycje ZŁOM z arkusza "spis końcówek lotów" i pokazuje wszystkie inne pozycje, które w nim się znajdują.
    Zablokowywuje w akruszu "Spis końcówek lotów" wiersz 1-4 (z możliwością sortowania, filtrowania,formatowania) oraz kolumnę G-I, K-L.

    Tak to wygląda ;/

    Pozdrawiam
  • Poziom 38  
    Bez pliku ciężko pisać kod.

    Cytat:
    w "Spis końcówek lotów" jako ZŁOM


    Domyślam się, że 'spis końcówek...', to nazwa arkusza. Ale co to 'złom', to nie mam pojęcia.
  • Poziom 3  
    Hej, no tak.
    Może będzie prościej i dołącze plik, ale na forum nie mogę wrzucić rozszerzenia xlsm
  • Poziom 3  
    Dziękuję.
    Niestety nie działa jeszcze tak jak potrzebuję ;/
    Pozmieniałem trochę zakresy danych, ale jest kilka rzeczy do zrobienia.
    1. Podczas kopiowania z "Spis końcówek lotów" do "Złomowanie" makro wkleja dane tak jak leci, a powinno wpisywać w pierwszy wolny wiersz od B3 do nieskończoności tak na prawdę tylko ZŁOM. W tej chwili usuwa mi również dane, które były już wcześniej w tym arkuszu "Zezłomowane".
    2. Raport złomowania się nie generuje tzn. dane nie kopiują się do raportu. Wyskakuje błąd jak w załączniku. Do raportu powinny trafić pozycje TYLKO najświeższe czyli te, które w tym makro były kopiowane ze "Spis końcówek lotów"
    [VBA] Excel, makro dla pliku
    3. W arkuszu "Spis końcówek lotów" makro zostawia filtrowanie na "ZŁOM" w kolumnie L, a powinien włączyć filtrowanie na "Zaznacz wszystko", tak aby pokazał wszystkie znajdujące się w nim pozycje.
    4. Z arkusza "Spis końcówek lotów" powinien usunąć wcześniej skopiowane pozycje ZŁOM
    5. Marko powinno ponownie zablokować arkusz "Spis końcówek lotów" o kolumny G,H,I,K,L oraz wiersz 1,2,3,4

    Byłbym wdzięczny za pomoc z tym problemem, pozdrawiam serdecznie :sm9: .
  • Poziom 38  
    Makro wcale nie filtruje kolumny L, żadnej nie filtruje.
    Spróbuj ustawić filtr w kolumnie L na złom. Zobacz co się dzieję z zawartością tej kolumny. Najpierw popraw błędy w arkuszu, a potem można pisać kod.
  • Poziom 3  
    Hm... ;/
    Rozumiem, że znajduje ZŁOM w danym zakresie i jeśli znajdzie to dany wiersz przenosi do arkusza "Zezłomowane".
    Tak też jest OK, ale dlaczego po uruchomieniu makra, w arkuszu "Spis końcówek lotów" widnieja tylko ZŁOM.
    Nie bardzo rozumiem co masz na myśli mówiąc "błędy w arkuszu".
  • Poziom 38  
    Cytat:
    Nie bardzo rozumiem co masz na myśli mówiąc "błędy w arkuszu".

    Jak wyżej, wyfiltruj kolumnę L na ZŁOM i zobacz, co sie dzieje z danymi.
  • Poziom 3  
    Gdy wyłącze filtry w tym pliku to po uruchomieniu makra dane kopiują się bez fragmentu zaznaczonego na żółto.
    Jeśli filtr jest włączony to kopiuje w taki sposób, że fragment na żółto się pojawia (czyli kopiuje również puste komórki z formułami). Innych różnic nie znalazłem, błąd wyskakuje w każdej z nich.
  • Poziom 3  
    PRL napisał:
    U mnie, jak na filmie.


    Wydaje mi się, że to wina wersji excel. Ja mam MS Office Professional Plus 2019, wersja Excel 1808. ;/
  • Pomocny post
    Poziom 38  
    Pewnie ktoś z wyższą wersją się odezwie, żeby Ci pomóc.:)
  • Poziom 3  
    Mam nadzieję, że ktoś będzie w stanie mnie wspomóc swoją wiedzą
  • Poziom 35  
    Jeżeli w kolumnie L zamiast formuły opartej na funkcji IFS() (której nie ma nawet w wersji Excel 2016 :cry: ) wprowadzisz formułę:
    =JEŻELI(ORAZ(D5<7000000;D5>6000000);"WIATA";JEŻELI(ORAZ(D5>100000000;I5>150);"WIATA";"ZŁOM")) :idea: to makro kolegi @PRL zacznie działać :spoko: - wystarczą drobne korekty kolumn do których wklejane są dane ze "Spisu końcówek lotów" :D
  • Poziom 3  
    Zastosowałem tą formułe do kolumny L, ale niestety z marnym skutkiem ;/
  • Poziom 3  
    Prot napisał:
    Kafelkowy1 napisał:
    Zastosowałem tą formułe do kolumny L, ale niestety z marnym skutkiem ;/
    :?:
    Co to niby znaczy ? Formuła zmieniła sposób działania arkusza :D :?: Czy makro w ogóle nie ruszyło, czy tylko nie spełnia Twoich oczekiwań :?:


    Hej, przepraszam nie doprecyzowałem.
    Otóż w tej chwili poniższe makro wkleja wszystko tak jak oczekuję w pozostałe akrusze natomiast nie kopiuje wszystkich pozycji oznaczonych jako złom. Kopiuje i uwuwa jedynie zakres od A8 do b9 ( oraz inne kolumny- poprawnie). Chciałbym, aby makro działało tak samo w lecz w zakresie od wiersza 5 do wiersza 170, ale TYLKO w stosunku do pozycji wyświetlonych jako ZŁOM.

    Co ważne: aktualnie przy kopiowaniu z arkusza "Spis końcówek lotów" do "Zezłomowane" makro nie szuka pierwszego wolnego wiersza w skutek czego usuwa rekordy, które już w "Zezłomowane" się znajdują.
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod
  • Poziom 35  
    Kafelkowy1 napisał:
    Hej, przepraszam nie doprecyzowałem.

    Jak wynika z załączonego pliku - nie zamierzasz korzystać ani z kodu kolegi @PRL, ani z moich porad odnośnie zaniechania używania funkcji IFS :?:, która blokuje kod VBA dla wszystkich wersji Excela poniżej tej 2019 :cry:
    Proponuję zatem koledze zamiast nagrywać nowe makra wykorzystać pozyskany uprzednio kod poprzez modyfikację - dostosowanie w szczegółach do Twoich potrzeb :idea:
  • Poziom 3  
    Prot napisał:
    Kafelkowy1 napisał:
    Hej, przepraszam nie doprecyzowałem.

    Jak wynika z załączonego pliku - nie zamierzasz korzystać ani z kodu kolegi @PRL, ani z moich porad odnośnie zaniechania używania funkcji IFS :?:, która blokuje kod VBA dla wszystkich wersji Excela poniżej tej 2019 :cry:
    Proponuję zatem koledze zamiast nagrywać nowe makra wykorzystać pozyskany uprzednio kod poprzez modyfikację - dostosowanie w szczegółach do Twoich potrzeb :idea:


    Ależ przeciwnie. Otóż rzecz w tym, że ani z makrem od kolegi, ani ze zmianą formuły plik nie działa tak jak powinien. Ciągle robi błędy opisane w poprzednim poście.

    Poniżej wywysłam ten sam plik z zastosowaniem tych rad. Niestety, tak jak wspomniałem, na moim excelu działa to identycznie jak wcześniej.