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 - Przygotowanie wydruku excel

06 Cze 2016 13:29 2169 11
  • Poziom 5  
    Zakładam wątek bo przejrzałem większość postów na forum i niestety nie mogę znaleźć dodam, że jestem zielony jeśli chodzi o pisanie makr

    Problem wygląda następująco,
    mam do wykonania makro które przedrukowuje z excela do pdf wraz z przygotowaniem obszaru do wydruku.

    Chciałbym żeby wyglądało tak że pierwsza strona składa się z 70 komórek, zaś każda kolejna strona składała się z 60 (pierwsza np. A1-A70, druga A71-A130, trzecia A131-A160 itd.) plus jeżeli np. komórka A71 jest wypełniona to drukuje całą drugą stroną, a gdy A131-161 jest pusta to drukuje tylko dwie pierwsze(tak żeby nie drukowało pustych stron do pdf)

    Pozdrawiam
    Darmowe szkolenie: Ethernet w przemyśle dziś i jutro. Zarejestruj się za darmo.
  • Poziom 35  
    jan_kasprzak napisał:
    jestem zielony jeśli chodzi o pisanie makr
    ...
    pierwsza strona składa się z 70 komórek, zaś każda kolejna strona składała się z 60 (pierwsza np. A1-A70, druga A71-A130, trzecia A131-A160 itd.)


    Jesteś kolego nieprecyzyjny :| Jak widać powyżej jesteś zielony również z excela i z matematyki.

    Zrób sobie arkusz testowy wypełnij go testową treścią (wariant 1 - jednostronicowy; wariant 2 - dwustronicowy; wariant 3 - trzystronicowy).

    Włącz w zakładce deweloper rejestrowanie makra i przeprowadź planowaną procedurę (ewent. odrębne makra dla każdego wariantu) ustawienia obszaru wydruku i zapisu pliku w pdf.

    Jeśli wygląd jednokolumnowego arkusz będzie "do zaakceptowania" :?: to wystarczy wprowadzić warunek ilości drukowanych stron do automatycznie utworzonego makra i zadanie (czy praca domowa ???) będzie zrealizowane.
  • Poziom 5  
    Jeśli chodzi o liczenie mój błąd - pisane na szybko
    Jeśli chodzi o makro to nie za wiele pomogłeś gdyby dało się to nagrać to bym to zrobił jestem zielony ale nie aż tak (w przypadku np 200 stron się nie sprawdzi),
    napisałem również makro które zaznacza obszar
    drukuje pierwszą stronę, ale nie mogę tego połączyć gdyby to było takie proste to nie zawracał bym ludziom głowy na forum

    Pozdrawiam
  • Pomocny post
    Poziom 35  
    Gdyby faktycznie miało sens drukowanie (czy zapisywanie w pdf) jednej kolumny arkusza z kilkadziesiąt czy kilkaset wierszami :D - to wówczas lepiej wykorzystać domyślne ustawienia Excela do ustalenia długości jednej strony (zapewni to lepszą czytelność wydruku niż Twoje 70 wierszy na stronie).

    Przy takich założeniach :idea: wystarczy wykorzystać kod dynamicznego ustawiania obszaru wydruku, żeby uzyskać przekształcenie dowolnie długiej kolumny w plik pdf.


    Kod: vbscript
    Zaloguj się, aby zobaczyć kod



    W efekcie otrzymujesz plik jak w testowym załączniku.
    Test.pdf Download (125.43 kB)
  • Poziom 5  
    Ogólnie to wielkie dzięki za pomoc
    jest jeszcze mały problem dlatego chciałem z narzuconym podziałem żeby nie dochodziło do takiego rozbicia jak w załączniku

    Jak dodać domyślną ścieżkę zapisu np. na pulpit ?

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod
  • Poziom 5  
    albo jeszcze lepiej żeby zapisywał tam gdzie jest plik excel
  • Poziom 35  
    jan_kasprzak napisał:
    albo jeszcze lepiej żeby zapisywał tam gdzie jest plik excel


    Przedstawiony kod działa dokładnie w ten sposób, że w tym samym folderze gdzie jest plik "Test.xlsm" tworzy kopię "Test.pdf".

    W załączonym przez Ciebie pliku Kamila widać, że nie użyty był ani proponowany kod VBA, a w wykorzystywanym arkuszu excela źle ustawione były "ustawienia strony" do drukowania - stąd te rozbicia "od czapy" całej treści.

    Twoje błędne informacje początkowe (że ilość stron zależy od ilości wierszy niepustych w kolumnie A :D ) powodować będą również niepotrzebny wydruk kilkunastu stron z tabelką w których jest tylko jedna niepusta kolumna ??? właśnie jakiś "xxx", który wygląda na liczbę porządkową wiersza :D
  • Poziom 5  
    1. Jeśli chodzi o plik to wydruk ma być taki jak jest - jeśli chodzi o liczbe kolumn - specjalnie to zmieniłem
    2. W załączonym pliku był użyty kod (z delikatnymi przeróbkami) i właśnie tak poprzestawiało
    3. Jeżeli wklejam ten kod zamieszczony przez ciebie to również wypluwa takie puste kawałki,
    4. Jeżeli mam kilka stron to takie ustawienie/przestawienie zakresu wydruku na stronie nie będzie stanowiło problemu jeśli jednak będzie takich stron 150 to już jest problem - i teraz jak go rozwiązać tak żeby po uruchomieniu makra nic już nie zmianiać

    "Twoje błędne informacje początkowe (że ilość stron zależy od ilości wierszy niepustych w kolumnie A :D )" - tak ma być ilość stron ma zależeć od kolumny A
  • Poziom 35  
    Musisz spróbować zrozumieć Excela i VBA. Wygląd wydruku arkusza możesz swobodnie kształtować (również w Twoim Excel 2013 :D ) poprzez konfigurację "ustawienia strony" i "ustawienia arkusza".

    Jeśli w ogóle pominiesz prawidłowe ustawienie wydruku lub zastosujesz jakiś wymuszony tryb podziału stron to wydruk albo będzie zupełnie przypadkowy albo dokładnie taki jaki wynika z narzuconych (przez Ciebie !!!) zasad podziału. Tam w office nie siedzi żaden złośliwy chochlik, który wypacza Twoją światłą wizję.
    Każde odstępstwo od założonego wyglądu - to tylko i wyłącznie Twój błąd w konfiguracji ustawień wydruku (tzn. dokładnie "ustawienia strony" i "ustawienia arkusza"). Dlatego proponowałem Ci na początku, żebyś przerobił sobie "na piechotę" całą procedurę wydruku w pdf - żeby ocenić jej efekt wizualny, oraz jednocześnie zarejestrować kod tej procedury.

    Kod VBA może automatycznie wykonać nieograniczone procedury ... ale jak na razie nie ma takiego kodu, który realizował by wszystkie wymyślne zachcianki użytkownika, potrafił się w trakcie modyfikować (wydruk jednej kolumny albo 7 - jak w Twoim załączniku :cry: ), oraz eliminować wszystkie błędy użytkownika w ustawieniach :D .

    Sprawdź sobie ustawienia wydruku w swoim arkuszu, zrób zapis w pdf, ewentualnie skoryguj te ustawienia i dopiero jak będziesz miał właściwy wygląd wprowadź do tego arkusza wcześniej podany kod i uruchom makro.
  • Poziom 5  
    Dobra udało mi się coś zlepić z tego co napisałeś i tego co znalazłem na innym temacie

    Tylko wyskakuje mi błąd - wszystko działa ale nie wiem jak to dobrze zakończyć - więc proszę o pomoc

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Problem występuje z tą częscią Set .Location = Cells(L, "A")

    Dzieli mi tak że strona jest wypełniona i dodatkowo drukuje tylko te w których jest tekst tak jak wcześniej to było
    Przyjełem że dzieli do 10000 bo nie wiem jak zrobić podział do nieskończoności :P
  • Poziom 35  
    Próbujesz bez zrozumienia logiki działania kodu posklejać "ogień" z "wodą" :D

    No teraz widać dlaczego masz tak poszatkowany wydruk - wymuszone ustawienia "długości" stron (te Twoje 70 wierszy dla pierwszej strony a potem po 150 wierszy w następnych) nie mają żadnego związku z zawartością jakichkolwiek komórek (czy puste są w kolumnie A,B czy I ?) - to normalnie przepis na robienie "kaszanki".

    Musisz niestety się zdecydować i wybrać albo "ogień" albo "wodę".

    Jak masz podstawy do wyliczenia długości tabeli - np 10000 wierszy (w Excel 2013 maksymalnie 1048576 wierszy, a nie nieskończoność :!: ) to ustaw stały podział stron lub nawet stałą liczbę stron do wydruku takiej tabeli.

    Jeśli nie masz możliwości ustalenia z góry długości tabeli - to pozostaje Ci tylko taka procedura VBA, która określi jej długość, oznaczy jej obszar do wydruku i wydrukuje (albo zapisze jako pdf) - to jest to co Ci zaproponowałem.

    Nie mieszaj, nie sklejaj - tylko przemyśl i wybierz najlepszą opcję.
  • Poziom 5  
    Problem rozwiązany tak jak opisałem wyżej