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.

VBA/Excel - Drukowanie warunkowe

bergkamp 07 Gru 2012 11:04 3600 10
  • #1 07 Gru 2012 11:04
    bergkamp
    Poziom 9  

    Witam,

    Stworzyłem małe ułatwienie w obsłudze zamówień, wszystko w Excel'u, do programu wpisywane jest zamówienie, po czym sam robi listę do wydruku pełnego zamówienia i dowody dostaw do poszczególnych odbiorców to wszystko na funkcjach excelowskich. Potrzebuje jeszcze, żeby pobierał dane odnośnie zamówienia, generował etykiety i drukował, wydaje mi się że na samych funkcjach Excel'a nie jestem w stanie tego zrobić i konieczne będą makra. Przyznaje, że kompletnie nie wiem jak to ugryźć. A zmieniając codziennie od 50 do 150 etykiet które muszę wydrukować jest strasznie uciążliwe. Etykieta ma być drukowana przez małą drukarkę termiczną i mieć wymiar 36x89mm. Ma zawierać logo, nazwę produktu, skład, normę, datę produkcji i przydatności, masę (tu pojawia się dodatkowy problem, wiaderka są 5kg więc jak odbiorca zamówi 8 kg produktu muszą wydrukować się 2 etykiety jedna 5kg i druga pozostałe 3kg) producenta i odbiorcę. W załączniku plik Excel w wszystkim danymi i pdf z przykładową etykietą. Z góry dziękuję za pomoc.

    0 10
  • Pomocny post
    #2 08 Gru 2012 05:11
    PRL
    Poziom 33  

    Skoro Kolega ma w profilu 'informatyka', to proponuję stworzyć program w Akcesie.
    Szybko i wygodnie.

    0
  • Pomocny post
    #3 08 Gru 2012 11:45
    czeles
    Poziom 16  

    Bardzo ciekawie zrobiona aplikacja. Przesyłam wzór wydruku etykiety. Prześlę makro do wydruku ale jest pewien problem. Niejednoznaczne są używane nazwy wyrobów, na jednym arkuszu jest to np.Sałatka drobiowa a na drugim Drobiowa. Należy stworzyć słownik nazw wyrobów i tylko takimi się posługiwać. Zrobię swoją propozycję zmian do przedyskutowania.

    0
  • #4 08 Gru 2012 11:54
    bergkamp
    Poziom 9  

    Właśnie w Access'ie jestem już całkiem zielony, miałem z nim do czynienia chyba w liceum ostatnio, a później nie był mi potrzebny więc poszedł w odstawkę, wszystko starałem się ogarnąć w excel'u. A co do 'informatyki' to przy rejestracji wpisałem, bo studiowałem informatykę tyle że raczej w kierunku grafiki.

    Ale wracając do sedna sprawy. Przeszukiwałem, po forach jakiegoś nakierowania na rozwiązanie problemu. Trafiłem na całkiem podobny problem https://www.elektroda.pl/rtvforum/topic2271028-0.html tyle że w moim przypadku będzie trochę więcej warunków i zmiennych. Jak na razie nie potrafię tego sam rozgryźć. Utworzyłem arkusz "Etykiety" gdzie znajdują się wszystkie etykiety jakie mi są potrzebne, zmienna jest tylko pole 'Odbiorca' i 'Masa netto', które pobierane są z arkusza z zamówieniami. Gdybym chciał zrobić tylko szablon a resztę danych sczytywać jak w powyższym problemie, to doszły by dodatkowe zmienne (Nazwa produktu, skład, norma, temperatura). Teraz potrzebuje napisać makro które będzie drukowało tylko strony na których wartość 'masy netto' będzie >0. Nie wiem czy w dobrym kierunku kombinuje, ale wydaje mi się że będzie wtedy łatwiejszy program do napisania. Jeśli źle myślę nakierujcie mnie na dobrą drogę.

    0
  • #5 08 Gru 2012 11:59
    bergkamp
    Poziom 9  

    czeles przykład wydruku jest jak najbardziej dobry, z tym że całość strony musi zmieścić się na etykiecie o wymiarach 3,6 x 8,9 cm. Zaraz zrobię coś z tymi nazwami, żęby były wszędzie jednakowe.

    Teraz już chyba wszystkie nazwy są jednakowe, pobierane z arkusza "skład"

    0
  • Pomocny post
    #6 08 Gru 2012 12:38
    PRL
    Poziom 33  

    "Jeśli źle myślę nakierujcie mnie na dobrą drogę."

    Do baz danych, a więc to, co Ty masz służy Akces, a nie Excel.
    Nie tędy droga, żeby wstawiać 100 arkuszy i kombinować z formułami długości takiej, że nie mieszczą się na ekranie panoramicznym przy 1920x1080.;)
    Jeżeli zdecydujesz się na Akcesa, to służę pomocą...

    0
  • #7 08 Gru 2012 12:48
    bergkamp
    Poziom 9  

    Pewnie masz rację i nie będę tego podważał, gdybym jednak znał się choć trochę na Akcesie to pewnie bym tam próbował kombinować, ale na chwilę obecną jestem z niego całkiem zielony i trochę by zajęło żeby poznać przynajmniej jego podstawowe funkcje, pewniej czuję się w excelu tworząc nawet tak rozbudowane formuły, jeśli nie uda mi się tego zrobić tutaj, wtedy będę zmuszony poświęcić trochę czasu i zapoznać się z Akcesem, bo nie sądzę że Ty czy ktoś inny zrobi to za mnie i przeniesie całość z excela do akcesa i zrobi tak żeby to hulało. W każdym razie dzięki za podpowiedź, w ostateczności będę zgłębiał akcesa, może jeszcze kiedyś się przyda.

    0
  • #8 08 Gru 2012 14:07
    marcinj12
    Poziom 40  

    Ja na Twoim miejscu przeprojektowałbym zupełnie ten plik, ograniczając go do 3-4 zakładek.
    Nie piszesz jak wygląda "proces" wprowadzania zamówień, czy to jest pełen asortyment oraz lista sklepów, czy tylko wycinek, ale to co sprawdza się przy 10 sklepach może zacząć być problemem, jak sklepów będzie 50.

    Moja propozycja jest taka:
    1. Wszystkie informacje dotyczące produktu trzymać w zakładce "asortyment" (dobrze, żeby każdy produkt miał swój unikalny kod po którym byś wyszukiwał, nie jak teraz po nazwie). Czyli Twoje zakładki "skład" i cenę i kod z "asortymentu" można złączyć w jedną całość, z kodem (kluczem) w pierwszej kolumnie.

    2. Zakładkę "Sklepy" nazwać "Zamówienie", listę do wyboru sklepu z zakładki "Druk etykiet" wrzucić na górę, dodać pole na datę dostawy, a z kolumny "asortyment" zrobić jedną kolumnę która, może za pomocą zwykłej funkcji =, z zakładki "asortyment" zaciąga aktualną bazę produktów (nazwy, kod czy co tam potrzebujesz). Obok dostawić kolumnę "ilość", gdzie pracownik będzie wpisywał zamówioną ilość danego towaru. Taki arkusz można zabezpieczyć, umożliwiając jedynie wpisywanie ilości w odpowiedniej kolumnie.

    Dodać przycisk do zapisu i wydruku etykiet, gdzie prostymi poleceniami VBA zamówienie będzie zapisywane do archiwum (chyba macie jakąś formę przechowywania złożonych zamówień czy robienia statystyk?) oraz drukowało etykiety - o tym dalej.

    3. Stworzyć zakładkę "archiwum", gdzie po kliknięciu przycisku z pkt 2 będą na koniec "doklejane" wiersz pod wierszem kolejne linie z zamówienia, w kolejnych kolumnach takich jak: data zamówienia, nazwa sklepu, nazwa asortymentu, ilość, cena, wartość etc.
    W pliku .xls masz nieco ponad 65000 wierszy, w .xlsm - ponad milion, więc na parę lat takie "archiwum" powinno wystarczyć.
    Kopiowanie danych po kliknięciu przycisku to zwykła pętla For... po wszystkich wierszach w zakładce "zamówienie", która kopiuje te wiersze, gdzie zamówiona ilość jest > 0.

    4. Skoro wzór etykiety się nie zmienia, wystarczy jeden arkusz z jedną "zaprojektowaną" etykietą i pustymi komórkami albo kształtami na dane, jak masz teraz. W przycisku z pkt 2 w takiej samej pętli jak przed chwilą, ze wszystkich wierszy z ilością > 0 wypełniasz kolejne pola etykiety (ew. dociągając brakujące dane z zakładki "asortyment") i dla każdej linii wypuszczasz wydruk na drukarkę. Drukarka powinna sobie kolejne wydruki ładnie skolejkować, więc nie przejmujesz się czekaniem aż wydruk wyjdzie - musisz jedynie zadbać o ustawienie odpowiedniego formatu wydruku dla zakładki z etykietą (ew. możesz te ustawienia później nagrać rejestratorem makr i odtwarzać przed wypuszczeniem wydruku).

    I tyle. Nie znam znaczenia zakładek "druk kuchnie" i "druk nocka", ale jeśli to ma służyć złożeniu zamówienia do "dostawców" produktów, to po wprowadzeniu wszystkich zamówień przyciskiem w pkt. 2, można takie listy stworzyć wyciągając dane z zakładki "archiwum".

    To samo dotyczy dowodu dostawy dla poszczególnych sklepów: wystarczy stworzyć jedną, ogólną zakładkę - szablon (jak z etykietą) i np. w pkt 2 dodać dodatkowy przycisk, który z wypełnionego zamówienia przeniesie do niej dane i wydrukuje ją.
    Jeżeli wolisz drukować zbiorcze dokumenty z wybranego dnia - pole do wpisania daty, przycisk i makro korzystające z danych zbiorczych zebranych w archiwum.

    0
  • #9 08 Gru 2012 14:31
    bergkamp
    Poziom 9  

    Dzięki marcinj12 za odpowiedź, wszystko co napisałeś brzmi całkiem sensownie i układa się w spójną całość, można by w ten sposób ograniczyć ilość arkuszy, formuł, i zbędnych rzeczy do minimum, jednak nie jestem aż tak wprawionym użytkownikiem excel'a żeby to samemu ogarnąć, o ile jeszcze funkcje u mnie stoją na jakimś poziomie to z makrami już całkiem kiepsko. Zaczynam jednak kombinować według twojego pomysłu, może coś z tego wyjdzie. Chociaż bez pomocy pewnie się nie obędzie.

    0
  • Pomocny post
    #10 09 Gru 2012 14:25
    czeles
    Poziom 16  

    Prawdą jest, że powinno się program wykonać w Accessie.
    Można jednakże dużo wykonać w Excelu i prezentuję mój pomysł na rozwiązanie problemu.W dołączonym pliku zamieściłem przykładowy kod do drukowania etykiet. Na stronie "Wydruk" jest przycisk uruchamiający makro. Wielkość wydruku należy ustawić w zależności od drukarki. Ustawienie obszaru wydruku w arkuszu "Wydruk" pozwoli na umieszczanie kolejnych wydruków na kolejnych kartkach.
    Zmiany jakie wprowadziłem w arkuszach to zmiana funkcji TERAZ() na DZIŚ(), ponieważ w wydruku etykiety pokazywała się oprócz daty aktualna godzina. Pozostało jeszcze drukowanie kilku etykiet jeżeli towaru jest więcej niż 5kg.

    0
  • #11 09 Gru 2012 15:10
    bergkamp
    Poziom 9  

    dzięki wszystkim za pomoc, na chwilę obecną używam rozwiązania zaproponowanego przez 'czeles', ale w przyszłości zamierzam zgłębić tajniki Accessa i przenieś całość gdzie jego miejsce, 'PRL' mnie co do tego skutecznie przekonał, wielkie dzięki, za jego cenny czas i wiedzę którą w skuteczny sposób przekazuje, dzięki jego pomocy i zaangażowaniu program już prawie w całości udało się napisać, a wszystko ładnie i przejrzyście, bez kilkudziesięciu arkuszy;)

    0