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.

EXCEL [VBA] - Kopiowanie (zmiennych) danych do innego pliku

26 Lut 2018 22:54 1266 7
  • Poziom 8  
    Nie umiem pisać makr, dlatego piszę do Was z prośbą w napisaniu makra...
    Jak na razie robię to ręcznie i zajmuje to sporo czasu.

    Makro ma skopiować ilości poszczególnych produktów z pliku "orders" i wkleić je do tabel pod klientami w pliku "production" (kilka arkuszy).
    W pliku "orders", pod każdą nazwą 'Customer Type' jest wpisywana nazwa klienta, który zamawia dany produkt (może być to 1 klient lub 5 klientów, nigdy nie wiadomo ilu) i ilość jaką zamawia 'Quantity Ordered' (spis klientów jest w pliku "production", u góry w tabeli, jak na ten czas na razie stała ilość klientów).
    Dodatkowo pod każdym produktem jest ilość zbiorcza 'Product Total', a na samym końcu znajduje się pole 'Report Total', gdzie jest to suma wszystkich zamówionych produktów łącznie (tutaj też przydałoby się makro, które sumuje ilości danego produktu 'Product Total' i łączną ilość wszystkich 'Report Total').

    Dodatkowo czy jest możliwość dodania w przyszłości produktu, jak i klienta, bez konieczności edycji makra lub chociaż nieskomplikowana edycja?

    Dzięki z góry.
  • Poziom 8  
    Ktoś się podejmie? Byłoby super, gdyby ktoś spróbował.
  • Moderator Programowanie
    zmysl84 napisał:
    W pliku "orders", pod każdą nazwą 'Customer Type' jest wpisywana nazwa klienta, który zamawia dany produkt i ilość jaką zamawia
    No to dlaczego nic tam nie ma?

    zmysl84 napisał:
    Dodatkowo czy jest możliwość dodania w przyszłości produktu, jak i klienta
    Klienta, owszem. Z produktem gorzej - samo wyszukiwanie odbywać musiałoby się na raty:
    w "prodktion" jest Np grupa "Basics" i 6 wierszy niżej "Plain Ham"
    rozumiem, że odpowiada to "Basic - Plain Ham" w komórce E242 w pliku orders.

    Znaleźć pójdzie, ale jak makro w "orders.xlsx" trafi na "Drugorzędna - Szynka zrolowana z ogórkiem", to co zrobić?
  • Poziom 8  
    Dołączam pliki, jak to wygląda.
    Proszę nie patrzeć na małe błędy w pisowni.
    Lub np. klient "Scribbles + 3" to to samo co "3 Days Scribbles". Po prostu ja sobie skróciłem do wpisywania ręcznego.
    Akurat produkt "Basic - Chicken & Stuffing" to jest ten sam produkt co "Basic - Straight Up Chicken & Stuffing", lecz inne opakowanie - ale jest tylko kilka takich wyjątków.
    Mogę zmienić, by wszystkie nazwy były takie same w obydwu plikach.
    Po prostu szybciej wpisać np.: "Scribbles + 3" niż pełną nazwę.

    A z produktami mogę zrobić tak:
    Nazwa w liście zamówień to np: "Basic - Plain Ham", a w tabeli może być grupa Basic, ale w tej grupie mogę mieć tę samą nazwę co w liście zamówień tzn. "Basic - Plain Ham".
    Wyglądać będzie tak... :
    Basic - Plain Ham
    >>
    Basic
    Basic - Plain Ham

    ...by makro znajdowało tę samą nazwę.

    Nazwy mogę pozamieniać, by były te same/równoznaczne co w tabeli (nie trzeba będzie patrzeć na grupy) bo w grupie będą i tak te same nazwy co w zamówieniu.
  • Poziom 8  
    Najbardziej zależy mi na tym, by makro powstawiało do drugiego pliku (w tabele) ilości produktów z listy zamówień z pierwszego pliku. To jest najbardziej czasochłonna robota. :(

    Czy dałoby radę coś takiego?
  • Pomocny post
    Poziom 40  
    zmysl84 napisał:
    Mogę zmienić, by wszystkie nazwy były takie same w obydwu plikach.
    Nie możesz, tylko musisz - jeżeli makro ma coś wyszukiwać i dopasowywać po nazwie, taka "radosna twórczość" jest niedopuszczalna.

    W Prod.xlsx - tabele w Sheet1, Sheet2 i Sheet3 najlepiej, żeby zaczynały się w tych samych komórkach (wiersz, kolumna). Liczba tabel (arkuszy) jest stała i ustalona, czy mogą dochodzić nowe?

    Jeżeli w wierszu 6 (4) jest nazwa klienta, we wszystkich arkuszach musi być taka sama.

    W pliku Picking list.xlsx - nazwy klientów w kolumnie C muszą się zgadzać z tymi np. w wierszu 6 pliku Prod.xlsx. Jeżeli chcesz stosować skróty, umieść je np. w wierszu 5, możesz go ukryć, ale zdecyduj się na jakąś konwencję, której będziesz się trzymał.

    Obecnie ten przykład jest dla mnie niezrozumiały - tabela (tabele?) w pliku Prod.xlsx mają same się tworzyć biorąc nazwy produktów z kolumny E z Picking list.xlsx, czy wszystkie nazwy produktów są już w Prod.xlsx ustalone?
    Jeżeli to drugie, to dwa przykłady z brzegu: Fruit - Fruit Salad (Case of 6) i Yogurt - Mango Granola Pots (Case of 6), czemu w pliku prod.xlsx nie ma nic, co by choćby zawierało słowo Fruit?

    Zauważyłem też ukryte kolumny A i B z jakimiś kodami - czy to są kody odpowiadające poszczególnym nazwom produktów z kolumny C w Picking list.xlsx? Można ich użyć do wyszukania produktów między plikami? Tylko dlaczego niektóre produkty nie mają kodu w ogóle, a niektóre mają inne zarówno w kol. A jak i B ?
  • Poziom 8  
    Dodałem nowe pliki.

    marcinj12 napisał:
    zmysl84 napisał:
    Mogę zmienić, by wszystkie nazwy były takie same w obydwu plikach.
    Nie możesz, tylko musisz - jeżeli makro ma coś wyszukiwać i dopasowywać po nazwie, taka "radosna twórczość" jest niedopuszczalna.


    Nazwy pozamieniałem. Wszystkie nazwy są takie same.

    marcinj12 napisał:
    W Prod.xlsx - tabele w Sheet1, Sheet2 i Sheet3 najlepiej, żeby zaczynały się w tych samych komórkach (wiersz, kolumna). Liczba tabel (arkuszy) jest stała i ustalona, czy mogą dochodzić nowe?


    No tabele zaczynają się tak samo od A3, ale w każdej tabeli są grupy i to w różnych miejscach.

    marcinj12 napisał:
    Jeżeli w wierszu 6 (4) jest nazwa klienta, we wszystkich arkuszach musi być taka sama.

    No właśnie klienci dla każdej tabeli są różni (oczywiście powtarzają się co niektórzy), więc nie da rady w każdej tabeli mieć takich samych klientów, ale lista klientów na ten czas jest stała. Każda tabela w pliku "prod1" jest stała, i jak na razie nie ma w planach dodania nowego arkusza z tabelą.
    Jest tak, jak teraz w plikach.

    marcinj12 napisał:
    W pliku Picking list.xlsx - nazwy klientów w kolumnie C muszą się zgadzać z tymi np. w wierszu 6 pliku Prod.xlsx. Jeżeli chcesz stosować skróty, umieść je np. w wierszu 5, możesz go ukryć, ale zdecyduj się na jakąś konwencję, której będziesz się trzymał.


    Od tej pory będą wpisywane te same nazwy klientów. Lecz każdego dnia, pod każdym produktem będą inni klienci (oczywiście istniejący co w tabeli), w zależności w jaki dzień jaki klient co sobie zamawia.

    marcinj12 napisał:
    Obecnie ten przykład jest dla mnie niezrozumiały - tabela (tabele?) w pliku Prod.xlsx mają same się tworzyć biorąc nazwy produktów z kolumny E z Picking list.xlsx, czy wszystkie nazwy produktów są już w Prod.xlsx ustalone?
    Jeżeli to drugie, to dwa przykłady z brzegu: Fruit - Fruit Salad (Case of 6) i Yogurt - Mango Granola Pots (Case of 6), czemu w pliku prod.xlsx nie ma nic, co by choćby zawierało słowo Fruit?


    Tabele są już gotowe, tylko ilości są do nich wpisywane.
    Odnośnie przykładów z "Fruit" - już ich nie ma.

    marcinj12 napisał:
    Zauważyłem też ukryte kolumny A i B z jakimiś kodami - czy to są kody odpowiadające poszczególnym nazwom produktów z kolumny C w Picking list.xlsx? Można ich użyć do wyszukania produktów między plikami? Tylko dlaczego niektóre produkty nie mają kodu w ogóle, a niektóre mają inne zarówno w kol. A jak i B ?


    Niestety to mi umknęło. Miało być na początku każdy produkt=kod, lecz nie spisywało się to. Usunięte w nowych plikach.
    Oczywiście, jeśli kody byłyby lepsze do wyszukiwania, można dodać według uznania, jeśli poprawiłoby/ułatwiłoby to napisanie/działanie makra.
  • Pomocny post
    Poziom 40  
    No, w takiej formie to można już coś tam pokombinować...
    Zobacz pliki z załączników.
    Po kliknięciu przycisku "Import order" możesz wybrać plik z zamówieniem - ważne, żeby miał taki układ danych, jak w testowym zamówieniu.
    Plus wszystkie rzeczy, o których wcześniej mówiłem - wyjątkiem jest lista klientów w pliku produkcyjnym - jednak nie musi być taka sama w każdym z arkuszy.

    W kodzie makra możesz zmieniać na górze nazwy arkuszy z tabelami (gdyby pojawiały się nowe) oraz zakresy komórek do wyczyszczenia przed rozpoczęciem importu:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    Dodatkowo zawarłem podstawową kontrolę poprawności danych, tzn. dostaniesz komunikat, jeżeli w zamówieniu znajdzie się produkt lub klient o nazwie nie występującej w pliku lub gdy ilość w zamówieniu będzie pusta lub równa 0.

    A, i plik importując zamówienie dodaje je do istniejących w tabeli ilości - tzn. można go przerobić do sumowania zamówień z kilku różnych plików usuwając lub komentując poniższy kod czyszczący stare wartości:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod