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.

[excel][vba] co tu dopisać ' drukowanie '

alvarofun 11 Kwi 2012 16:07 4842 31
  • #1 11 Kwi 2012 16:07
    alvarofun
    Poziom 17  

    wyobraźmy sobie BUTTON "Drukkuj" który po kliknięciu wywołuje następująca aplikacje w VBA

    Code:
    Sub drukowanie_listy()
    

        Cells(5, 3).Select 'odtąd warunek do zaznaczenia pracownika albo i nie
       
        If Sheets("Dane").Cells(3, 3) = 0 Then 'suma wszystkich warunków zaznaczenia pracowników
           
            MsgBox ("Nie zaznaczono żadnego z pracowników")
           
            Exit Sub
           
        End If
           
     
            Sheets("Szablon").PageSetup.PrintArea = "$B$2:$L$41" 'obszar wydruku
           
            odp = Application.Dialogs(xlDialogPrinterSetup).Show
            If odp = False Then Exit Sub
           
            For wiersz = 5 To 50
           
                Cells(wiersz, 3).Select
       
                If Sheets("Dane").Cells(wiersz, 3) = 1 Then

                    Sheets("Szablon").Cells(5, 3) = Sheets("Dane").Cells(wiersz, 5) & " " & Sheets("Dane").Cells(wiersz, 4)  'wiersz, kolumna NAZWISKO & IMIĘ
       
         
                Sheets("Szablon").PrintOut
           
                End If
               

       
            Next
       
        Cells(5, 3).Select
           
    End Sub




    Wszystko działa ok jeśli zaznaczę tylko jednego pracownika i dam drukuj.

    Problem pojawia się kiedy zaznaczę 2 pracowników albo 50....

    Do drukarki zostają wysłane pliki :
    1pracownik
    2pracownik
    3pracownik
    ...
    ...
    ...
    50pracownik

    żeby wydrukować wszystkich muszę stać 15 min przy drukarce i potwierdzać wydrukowanie każdej strony na której jest po jednym pracowniku.

    W pracy korzystam z drukarki (kombajnu) xero i w ogóle.

    W domu to testuje na druku do *.pdf i za każdym razem jak zapiszę jedną stronę z jednym pracownikiem to muszę zapisać pod inną nazwą kolejną stronę bo inaczej mi nadpisze(zamieni) np 1 pracownika z drugim, a pierwszego już nie będzię.

    W skrócie chodzi mi oto żeby wszyscy zaznaczeni pracownicy zostali wysłani do drukarki jako jeden plik z np. pięćdziesięcioma stronami, raz klikam na drukarce akceptuj, a ona sama mi drukuje pracownika za pracownikiem, stronę za stroną.

    0 29
  • #2 11 Kwi 2012 17:10
    adamas_nt
    Moderator Programowanie

    Zamiast drukować każdą stronę wewnątrz pętli musiałbyś kopiować (w pętli) szablon pod szablon (40 wierszy w dół), wstawić znak podziału strony, wstawić imię i nazwisko, a drukować za pętlą.

    0
  • #3 11 Kwi 2012 19:20
    alvarofun
    Poziom 17  

    trochę nie rozumiem :/

    0
  • #4 11 Kwi 2012 19:41
    adamas_nt
    Moderator Programowanie

    Trzeba poskładać wszystko i dopiero drukować. Coś w stylu

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #5 11 Kwi 2012 19:48
    alvarofun
    Poziom 17  

    adamas_nt napisał:
    Trzeba poskładać wszystko i dopiero drukować. Coś w stylu
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    a co to znaczy pagebr = 42 ??? skąd ta wartość???

    i poco w szablonie usuwać resztę pustych wierszy???

    0
  • #6 11 Kwi 2012 20:07
    adamas_nt
    Moderator Programowanie

    To tylko przykład. Ja nie widzę Twojego arkusza. Po linii "Sheets("Szablon").PageSetup.PrintArea = "$B$2:$L$41" 'obszar wydruku" wydedukowałem, że szablon ma 40 wierszy, a najszybszą metodą na usuwanie zawartości, formatowania i znaków podziału stron jest... usunąć wiersze.

    Główną myślą jest "Naduś przycisk i wróć jak już wszystko będzie wydrukowane". Przeanalizuj i dostosuj do własnych potrzeb.

    0
  • #7 11 Kwi 2012 20:11
    alvarofun
    Poziom 17  

    A nie dało by się tego jakoś prościej??

    W szablonie "dane" mam pola wyboru, przy każdym nazwisku, jeśli jest zaznaczone to wtedy to nazwisko jest dodawane do szablonu.

    Teraz potrzebne by było zliczenie wszystkich checkbox'ów które zostały zaznaczone

    i druk tylko dalej nie mam pojęcia co z tym drukiem i jak:/

    aha i nie wiem czy tak ma być w tym co mi uw cześnie napisałeś ale tam chyba brakuje końca zakresu czyli

    PrintArea = "$B$2:$L$41"

    0
  • #8 11 Kwi 2012 20:14
    adamas_nt
    Moderator Programowanie

    Zrób sobie kopię pliku, w makro linię ".PrintOut" zamień na ".Printpreview" i odpal makro...

    0
  • #9 11 Kwi 2012 20:45
    alvarofun
    Poziom 17  

    zacznę moze od tego że podgląd jest 687 stron, a ja tylko 3 zaznaczyłem, pierwsza jest ok, na drugiej i trzeciej formatowanie tabeli szerokosc kolumn i wierszy sie ustawila jako standardowa, data na pierwszej jest ok ja 2 i 3 jakaś przedwojenna 1900

    Dodano po 2 [minuty]:

    date wczesniej bralem z =Dane!H3

    Dodano po 15 [minuty]:

    co dalej z tym fantem :/

    0
  • #10 11 Kwi 2012 21:24
    adamas_nt
    Moderator Programowanie

    Jak już pisałem: nie widziałem Twojego arkusza. Na podstawie wartości zmiennych makra z pierwszego postu wychodzi jak w załączniku.

    0
  • #11 11 Kwi 2012 21:49
    alvarofun
    Poziom 17  

    a zmień sobie rozstaw w komórkach szerokość i długość w szablonie, i później w następnych już będą inne nie takie jak miałeś w pierwszym szablonie

    0
  • #12 12 Kwi 2012 15:47
    alvarofun
    Poziom 17  

    jak to ustawić żeby były takie same szerokości i wysokości kolumn???

    0
  • #13 12 Kwi 2012 17:11
    adamas_nt
    Moderator Programowanie

    Jeśli nie masz zamiaru wrzucić pliku z przykładem, to kombinuj na różne sposoby. Spróbuj na początek kopiowania całych wierszy zamiast zakresów

    Code:
    .Rows(plus - 38 & ":" & plus + 1).Copy .Range("A" & plus + 2)
    P.S. Możemy tak gdybać do listopada...

    0
  • #14 12 Kwi 2012 22:23
    alvarofun
    Poziom 17  

    adamas_nt napisał:
    Jeśli nie masz zamiaru wrzucić pliku z przykładem, to kombinuj na różne sposoby.


    tu nie chodziło o brak zamiaru wrzucania przykładu, tylko to że dużo informacji tu miałem w tym szablonie ważnych ale już ok.

    0
  • #15 12 Kwi 2012 22:29
    alvarofun
    Poziom 17  

    po wybraniu kilku ludzi, kolejne szablony nie są identyczne z pierwszym, chodzi o rozmiar komórek, wysokość szerokość i

    w kolejnych szablonach jest inny miesiąc i rok niż w pierwszym szablonie,

    formatowanie warunkowe (te szare soboty i niedziele) jest tylko na pierwszym szablonie a na innych niema,

    jeszcze tam jest taki problem że szablon nie jest idealnie na środku drukowanej strony tylko bardziej w lewym górnym rogu

    0
  • Pomocny post
    #16 13 Kwi 2012 08:44
    adamas_nt
    Moderator Programowanie

    Trzeba było od razu...
    Przerobiłem wstawianie daty (przy zmianie) i formuły w "Szablon"
    Jeśli z formatowaniem warunkowym to Copy-Paste.

    Edit: W "Szablon" w D3 i G3 wpisz =B10 (załącznik podmieniłem na poprawiony)

    0
  • #17 13 Kwi 2012 16:59
    alvarofun
    Poziom 17  

    No Stary, xD... nie do wiary.... Dzięki :)

    Powiedz mi jeszcze gdzie się tak dobrze nauczyłeś VBA

    Dodano po 17 [minuty]:

    Chciał bym jeszcze w zeszycie dane jednego checkboxa, jeśli on zostanie zaznaczony wtedy zaznaczone zostaną wszystkie checkoboxy w których w kolumnie F bedzie litera A.

    Dodano po 1 [godziny]:

    Jeśli by to była pojedyncza komórka to mogę dać aktywnego checkboxa dać mu na właściwości i w LinkedCell na wybraną komórkę i by klikając mojego checka zaznaczało mi jakiegoś innego przy okazji, ale ja chce żeby na jednego kliknąć a żeby mi wszystkie zaznaczyło z wartością "A"

    Od dzieciństwa sobie stale komplikuje, coraz to bardziej życie :P

    0
  • #18 13 Kwi 2012 19:47
    adamas_nt
    Moderator Programowanie

    alvarofun napisał:
    No Stary
    Bez przesady, nie jest tak źle (rozumiem, że szukałeś rymu ;)
    alvarofun napisał:
    Od dzieciństwa sobie stale komplikuje, coraz to bardziej życie
    Za to będzie ciekawe... "Niestety" VBA służy raczej ułatwianiu.

    Do sedna: W K3 masz listę wyboru. Poszedłem nieco dalej, uprzedzając następne pytania, więc są 4 opcje do wyboru. Procedura w kodzie arkusza, dość łatwa do rozgryzienia i ew. uzupełnienia.

    0
  • #19 14 Kwi 2012 07:04
    alvarofun
    Poziom 17  

    troszkę to skomplikowałeś

    zatrudniony przez a i b to są rożne nazwy firm, jak teraz podmieniam pod a tą swoją nazwę to lipa:/ bo nie działa zaznaczanie:/.

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    wolał bym raczej ten pomysł z tymi polami wyboru
    __
    |v| ble ble ble
    '''''
    __
    |v| phi phi phi
    '''''
    __
    |v| każdy/żaden
    '''''

    czyli: jeżeli zaznaczę pierwsze nowo utworzone pole wyboru o nazwie ble ble ble, to zaznaczą mi się wszystkie pola które w tym samym wierszu w kolumnie F mają wartość tekstową ble ble ble

    a jeżeli zaznaczę drugie nowo utworzone to zaznaczą mi się wszystkie pola które w tym samym wierszu w kolumnie F mają wartość tekstową phi phi phi

    jeśli zaznaczę trzecie nowo utworzone pole to razem z zaznaczeniem tego pola zaznaczą się wszystkie, a jak go odznaczę to odznaczę wszystkie, teraz rozumiesz???

    0
  • #20 14 Kwi 2012 08:27
    adamas_nt
    Moderator Programowanie

    CheckBox'y, to nie jest najlepsze rozwiązanie. Musisz stosować VBA i przy każdej zmianie nazwy/ilości firm, potrzebna byłaby korekta makra.

    Uprę się przy liście. W przykładzie lista układa się niemal automatycznie. Użyłem nazwy i kolumny "A" jako pomocniczej. Cała korekta to skopiowanie formuły lub wyczyszczenie komórek w kolumnie "i". Przetestuj, a sam się przekonasz...

    0
  • #21 14 Kwi 2012 08:45
    alvarofun
    Poziom 17  

    ale ta ilość firm to sie zmieni raz na 5 lat, to żaden problem, napisz prosze jak by to bylo z tymi activ checkbox

    Dodano po 11 [minuty]:

    A co do twojego pomyslu, to jak wpisze w kolumnie f (zatrudniony przez) i zmaże tam litere B a zamiast niej napisze Microsoft, wtedy już nie mam na liscie wyboru napisu microsoft

    0
  • #22 14 Kwi 2012 08:51
    adamas_nt
    Moderator Programowanie

    adamas_nt napisał:
    Cała korekta to skopiowanie formuły lub wyczyszczenie komórek w kolumnie "i"
    Za mało testowałeś...
    A kto Ci będzie dopisywał do makra jeśli dołożysz checkbox'a? Zrób sobie na początek dwa: wszystkie, żaden (z wzajemnym "odptaszkowaniem"). Jeżeli sobie poradzisz, pomogę napisać c.d.

    0
  • #23 14 Kwi 2012 16:18
    alvarofun
    Poziom 17  

    Utworzyłem sobie dwa Activv CheckBoxy jednego nazwałem
    zaznacz_wszystko a drugiego
    odznacz_wszytsko
    ich captiony to zaznacz a drugi odznacz.

    w Arkusz2(Dane) wpisałem

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Ten schemat działa, może jest trochę prymitywny ale działa :)

    co prawda wolał bym żeby był tylko jeden CHBox i nim albo zaznaczę wszystkie albo odznaczę, domyślam się że tak się da zrobić i pod
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    trzeba dać
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    tylko kombinuje i kombinuje i nic:/
    na pewno w tym kodzie bedzie musiało się też znaleźć
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    bo jendo znaczy kiedy jest zaznaczony a drugie kiedy odznaczony

    ale jak to skompilować to /keine ahnung/ :(

    0
  • #24 14 Kwi 2012 16:35
    walek33
    Poziom 28  

    Cytat:
    Utworzyłem sobie dwa Activv CheckBoxy...
    ...co prawda wolał bym żeby był tylko jeden

    I tu masz rację CheckBox ma dwa stany. Wystarczy sprawdzać czy jest "zaptakany", czy nie i w zależności od tego reagować.

    0
  • #25 14 Kwi 2012 22:44
    alvarofun
    Poziom 17  

    jak utworzyć kod który będzie sprawdzał czy jest "zaptakany" czy nie żeby można było tylko jednym checkiem wszystko zaznaczać lub ozdnaczać ?????

    0
  • #26 15 Kwi 2012 22:24
    alvarofun
    Poziom 17  

    Hejo :)

    to znów Ja xD

    i co nie chce się nikomu napisać jak ma wyglądać ten kod, czy taki pomysł jest niemożliwy???

    cooo????

    0
  • #27 15 Kwi 2012 22:43
    adamas_nt
    Moderator Programowanie

    alvarofun napisał:
    i co nie chce się nikomu napisać jak ma wyglądać ten kod, czy taki pomysł jest niemożliwy???
    Tak się zastanawiam: zwykłe lenistwo, podpucha na szukanie jelenia, czy...
    Kod jest żenująco prosty. Wystarczy powiedzieć/napisać co ma się dziać, przetłumaczyć na angielski i kod prawie gotowy.

    p.s. Na google pod hasłem "vba if checkbox" na dzień dobry masz 811000 wyników.

    0
  • #28 16 Kwi 2012 08:43
    alvarofun
    Poziom 17  

    problem w tym że ja vba chce się nauczyć a angielskiego nie umiem:/

    za kazdym razem co czytam jakaś składnie to żal bo wszytsko sobie w słowniku tłumacze i wtedy wiem ze if = jeżeli then = wtedy itd :(

    ale już siedze nad tym drugi dzień i udało mi się wyklepać coś takiego xD i działą nawet ::D:D

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #29 16 Kwi 2012 13:58
    walek33
    Poziom 28  

    A ja do tej pory myślałem, że do zaznaczania komórek w VBA służy:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #30 16 Kwi 2012 19:21
    alvarofun
    Poziom 17  

    no oki ale chyba .cell nie jest źle, co?

    0