Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

(VBA) przenoszenie różnych zakresów wartości do kilku różnych plików

rysio.rudnik 06 Nov 2017 15:06 648 5
  • #1
    rysio.rudnik
    Level 6  
    Witam!
    Chciałbym uprościć sobie codzienne wpisywanie danych na koniec zmiany roboczej, bo obecnie muszę codziennie wypełniać 5 różnych skoroszytów (plików raportu) stworzyłem plik o nazwie „!wpisywanie” który po uzupełnieniu zawiera wszelkie dane potrzebne do uzupełnienia każdego z pliku raportów i chciałbym go odpowiednio zaprogramować aby za jego pomocą kopiować odpowiednie dane do odpowiednich plików.

    Bardzo proszę o pomoc w napisaniu makra które ze skoroszytu „!wpisywanie” kopiowało by różne wskazane wartości do różnych skoroszytów, wszystkie znajdują się w lokalizacji C:\Users\Marek\Desktop\raporty:

    W „!wpisywanie” (lokalizacja C:\Users\Marek\Desktop\raporty) w P8 mam wartość miesiąca a w P11 wartość dnia, które zmieniają się na podstawie wpisanej daty – chciałbym aby w momencie wstawiania raportu wpisywało odpowiednie dane do pliku o nazwie identycznej z wartością miesiąca(P8) do arkusza o nazwie jak w P11.
    W lokalizacji C:\Users\Marek\Desktop\raporty\raport dobowy mam skoroszyty raportu dobowego Których nazwy odpowiadają miesiącom (listopad, grudzień) – każdy skoroszyt ma 31 arkuszy o nazwach 01, 02… aż do 31 (odpowiedniki dni)

    Przyjmując, że raport wstawiam dla daty 02.11.2017 chciałbym aby na podstawie zmiany wskazanej w G2 kopiowało dane w odpowiednie miejsce w pliku listopad, arkuszu 02:
    Jeżeli G2=I chciałbym aby skopiowane były:
    C2 z „!wpisywanie” wstawić do F3, E2 do D3, D3 do E3, D4 do E15, P2 do G3, oraz niepuste komórki z zakresu D7:H13 do zakresu C5:G11, z D17;H23 do zakresu C17:G23 oraz z zakresu B26:E35 do zakresu J18:M24

    plik „!wpisywanie”
    (VBA) przenoszenie różnych zakresów wartości do kilku różnych plików

    plik raportu (listopad):
    (VBA) przenoszenie różnych zakresów wartości do kilku różnych plików
    Jeżeli G2=II chciałbym aby skopiowane były:
    C2 do F26, E2 do D26, D3 do E26, D4 do E37, P2 do G26, oraz niepuste komórki z zakresu D7:H13 do zakresu C28:G34, z D17;H23 do zakresu C39:G45 oraz z zakresu B26:E35 do zakresu J40:M46

    Jeżeli G2=III chciałbym aby skopiowane były:
    C2 do F48, E2 do D48, D3 do E48, D4 do E59, P2 do G48,oraz niepuste komórki z zakresu D7:H13 do zakresu C50:G56, z D17;H23 do zakresu C61:G67 oraz z zakresu B26:E35 do zakresu J51:M57


    W skoroszycie „wylakierowane” (lokalizacja C:\Users\Marek\Desktop\raporty) w kolumnie A i B mam nazwy identyczne z nazwami w kolumnach T i U w „!wpisywanie” - chciałbym aby wartości w komórkach kolumny V które są większe niż 0 zostały przeniesione w odpowiedni wiersz w pierwszą pustą komórkę zaczynając od kolumny R (jeśli R już zapisane to S itd.) skoroszytu „wylakierowane” - wartości mają być wpisywane minusowe tak jak jest to w pliku „!wpisywanie”
    (VBA) przenoszenie różnych zakresów wartości do kilku różnych plików
    (VBA) przenoszenie różnych zakresów wartości do kilku różnych plików



    W skoroszycie „kartony” (lokalizacja C:\Users\Marek\Desktop\raporty) mam arkusze których nazwy odpowiadają nazwom miesięcy. Chciałbym aby na podstawie miesiąca podanego w P8 „!wpisywanie” dane wstawiane były w karcie odpowiadającej wartości miesiąca.
    Wiersz miałby być dopasowany tak, aby wartość z P5 „!wpisywanie” była wyszukiwana w kolumnie A i na podstawie danych z zakresu AB2:AK3 czyli jeżeli w P5 mam wartość 02.11/I powinno wstawić w B6-226 oraz w C6-11
    (VBA) przenoszenie różnych zakresów wartości do kilku różnych plików

    W skoroszycie „stan” (lokalizacja C:\Users\Marek\Desktop\raporty) mam 56 arkuszy których nazwy odpowiadają wartościom jakie mogą wystąpić w „!wpisywanie” w zakresach D7:D13 oraz D17:D23.
    Chciałbym aby ilości z komórek F7:F13 oraz F17:F23 przenosiło do skoroszytu „stan” do karty której nazwa jest identyczna z wartością z kolumny D danego wiersza w pierwszy wolny wiersz w kolumnie D skoroszytu „stan”, a przy każdej przenoszonej ilości w kolumnie C wstawiało wartość z P5„!wpisywanie”oraz w kolumnie B wartość z C2

    Dodatkowo dla wartości z zakresu B26:B35 chciałbym aby analogicznie wartości z kolumny D zostały przenoszone do odpowiednich kart w pierwszy wolny wiersz w kolumnie G a przy każdej przenoszonej ilości w kolumnie F wstawiało wartość z P5„!wpisywanie” a w kolumnie I wartość z C2

    I ostatni plik „listopad – odpad” (lokalizacja C:\Users\Marek\Desktop\raporty\Odpad) w którym mam 2 arkusze maszyna A, oraz maszyna B, w których w kolumnie A od A3 do A89 mam wypisane wartości takie jak w kolumnie X od X3 do X89 „!wpisywanie”, oraz w kolumnach od E do CS mam wpisane oznaczenia daty i zmiany w formacie takim jak P5 „!wpisywanie”.
    Chciałbym aby wszystkie nie puste wartości z kolumny Y „!wpisywanie” przenoszone były do arkusza maszyna A do odpowiedniej kolumny i do odpowiedniego wiersza (nr kolumny pozostaje taki sam, kolumna ma mieć w przedziale E:CS wartość =P5)

    A wszystkie nie puste wartości z kolumny Z „!wpisywanie” przenoszone były do arkusza maszyna B do odpowiedniej kolumny i do odpowiedniego wiersza.


    Pliki raportów są dostępne dla wielu osób, dlatego potrzebuję aby nie dało się wstawić danych częściowo, czyli aby raport był możliwy do wstawienia tylko jeśli żaden z plików nie jest otwarty przez innego użytkownika, a gdy jest niemożliwy do wstawienia aby zwracał wiadomość.

    Dodatkowo chciałbym aby w momencie poprawnego wstawienia raportu wartości w komórkach C2, E2, G2, D7:D13,F7:F13, D17:D23, F17:F23, B26:B35, D26:D35 kasowały się, tak aby każdorazowo raport był wpisywany od nowa i uniknąć przypadkowego powielenia.

    Dobrze jak by również nie pozwolił wstawić raportu gdy nie wypełniona jest któraś z komórek C2, E2, G2.

    Wiem, że opis długi i ogarniecie tematu bardzo skomplikowane, jednak bardzo proszę o pomoc. Jestem początkowym użytkownikiem tyle ile potrafiłem zrobić za pomocą formuł w pliku „!wpisywanie” zrobiłem, jednak ze względu na stopień trudności nawet nie wiem jak do tego tematu podejść.

    Z góry bardzo dziękuje za pomoc :-)
  • #2
    Prot
    Level 38  
    IMHO tego typu projekt rozliczeń produkcji nie powinien być realizowany przy pomocy Excela (nawet wspartego zestawem makr VBA) :not:

    Taki rozbudowany zestaw danych, aż prosi się o wykorzystanie możliwości bazy danych (choćby Access) do zbierania wszystkich danych, oraz zestawu kwerend SQL do tworzenia raportów w najprzeróżniejszych przekrojach i układach.

    Niestety w takim gąszczu skoroszytów, arkuszy i tabel - bardzo łatwo o drobne pomyłki - literówki, czy przesunięcie zakresów (trudno ich nie zauważyć już w Twoich przykładowych plikach) - co wszystkie makra operujące na tych obiektach "wysadzi w powietrze" :wink:
  • #3
    rysio.rudnik
    Level 6  
    Niestety Access jest mi całkowicie obcy, poza tym jak pisałem z plików tych korzysta (uzupełnia je) wiele osób cześć o naprawdę podstawowych umiejętnościach obsługi czegokolwiek...

    A byłbyś w stanie zrobić coś takiego w Access?
  • #4
    Prot
    Level 38  
    rysio.rudnik wrote:
    z plików tych korzysta (uzupełnia je) wiele osób


    W Accessie podobnie jak w Excelu można zastosować do wprowadzania danych odpowiednio oskryptowane w VBA formularze, które stanowić mogą jedyny interfejs graficzny użytkownika :idea:

    "Popełniłem" kiedyś małą aplikację użytkową (fakturowanie i obrót magazynowy) opartą na kilkudziesięciu makrach i formularzach Excela na potrzeby mojej firmy :wink: i pamiętam do dziś, że działała owszem bezproblemowo, ale tylko wtedy kiedy ja sam ją obsługiwałem :D pracownicy co rusz "napotykali problemy": a to nie mogli wyszukać indeksu przyjmowanego towaru - to utworzyli nowy :cry: , a to nie podali waluty przy cenie i wartość zamiast w $ zapisywana była w PLN itp.

    Bardzo szybko przesiadłem się na Accessa, formularze prawie takie same, dla pracowników GUI aplikacji prawie identyczny, lecz znacznie łatwiej zapanować nad poprawnością wprowadzanych danych i nieograniczona możliwość tworzenia potrzebnych raportów oraz analizy wszystkich danych. :spoko:
  • #5
    rysio.rudnik
    Level 6  
    Ze względu na to, że nie znam Access, bardzo chciałbym pozostać przy Excelu - Jeśli uda się zaprogramować plik !wprowadzenie żeby przenosił dane do wszystkich plików raportów wtedy byłyby one używane tylko do odczytu wprowadzonych danych, bez ich dodatkowej modyfikacji. W pliku do wprowadzania cześć kolumn będzie docelowo ukryta a komórki z formulami chronione, tak aby inni użytkownicy nie narobili szkód i aby mogli wpisywać tylko w konkretne komórki - więc powinno to zadziałać - w samym kodzie na pewno nikt nie będzie "grzebał".

    Udało mi się napisać kod na przeniesienie danych do 3 z 5 raportów (odpad, kartony i raport dobowy) pozostały mi 2 na które nie mam pomysłu i wiedzy jak się za nie zabrać czyli stan i wylakierowane, zacząłem pisać ale brak mi wiedzy i umiejętności.

    Do skoroszytu „wylakierowane” chciałbym przenieść wartości z kolumny V które są >0 w pierwszą pustą komórkę odpowiedniego wiersza w przedziale R:AB (jeśli R już zapisane to S itd.) - tutaj bardzo ważne aby przenosiło tylko wartości >0 i tu zaczyna się mój problem (nie do końca wiem jak to osiągnąć dlatego w "kartony" i "odpad" przenoszę całe kolumny bo to w niczym nie przeszkadza)
    (VBA) przenoszenie różnych zakresów wartości do kilku różnych plików

    Skoroszyt "Stan" potrzebuję ilości z komórek F7:F13 oraz F17:F23 przenosić do karty o nazwie wartością z kolumny D7:D13 i D17:D23 w pierwszy wolny wiersz w kolumnie D, a przy każdej przenoszonej ilości w kolumnie C aby wstawiało wartość z P5„!wpisywanie” oraz w kolumnie B wartość z przedziału B7:B13 oraz B17:B23 dla wiersza którego ma dotyczyć wpis
    (VBA) przenoszenie różnych zakresów wartości do kilku różnych plików

    Dodatkowo dla wartości z zakresu B26:B35 chciałbym aby wartości z kolumny D zostały przenoszone do odpowiednich kart w pierwszy wolny wiersz w kolumnie G a przy każdej przenoszonej ilości w kolumnie F wstawiało wartość z P5„!wpisywanie” a w kolumnie I wartość z C2
    (VBA) przenoszenie różnych zakresów wartości do kilku różnych plików

    Bardzo proszę o pomoc, nie czekając tylko na gotowe rozwiązanie włożyłem w to sporo czasu i pracy - doszedłem do punktu gdzie sam tego dalej nie opanuję, a dla Was przy ogromie wiedzy jaką posiadacie pewnie nie będzie to nic nadzwyczajnego :-)

    Z góry dziękuję.
  • #6
    rysio.rudnik
    Level 6  
    Temat do zamknięcia, w ostatecznym dokończenie kodu pomógł mi kolega JRV, za co bardzo, bardzo dziękuję 😉

    Jutro postaram się wstawić końcowy plik, aby był przykładem dla innych z podobnymi sytuacjami jak moja 😉 - może komuś w przyszłości to pomoże 😉

    Dodano po 19 [godziny] 21 [minuty]:

    Tak jak pisałem, załączam plik finalny - może dla kogoś będzie pomocny :-)