fbpx

Treść nagłówka lub stopki na wydruku pobierana z komórki

17.06.2019 | ECP3, Makra VBA

Czyli dynamiczny nagłówek lub stopka

Dziś zadanie będzie proste – chcemy, aby tekst z komórki pojawił się w nagłówku lub w stopce na wydruku, np. niech to będzie nazwa klienta, dla którego drukujemy ofertę czy jakąś informację. Nie chce nam się zmieniać wartości bezpośrednio w nagłówku/stopce, tylko niech pobiera się ona z komórki (a ta przecież może być uzupełniana przez formułę, niekoniecznie przez nas). O tak:

Formatka

Użyjemy do tego zdarzenia skoroszytu, którego jeszcze na blogu nie pokazywałam…

Ponieważ Excel nie ma (niestety) takiej wbudowanej funkcjonalności, a chcemy, żeby cała podmianka treści działa się bez naszego udziału – użyjemy tutaj zdarzenia VBA. Konkretnie BeforePrintczyli przed wydrukowaniem. Jest to zdarzenie skoroszytu.

To makro możemy nawet nagrać, natomiast nagra się mnóstwo śmietnika (inne ustawienia strony), więc napiszę interesujący nas fragment.

A interesuje nas tylko wstawienie odpowiednich danych np. do lewego nagłówka. Czyli przed wydrukowaniem chcemy tak ustawić wartość lewej sekcji nagłówka, aby była ona równa wartości z żółtej komórki  (u mnie nazywa się ona Firma).

Tak wygląda formatka w arkuszu:

Formatka w arkuszu

Formatka w arkuszu

Na mojej formatce użytkownik wybiera firmę z listy rozwijanej w komórce D3 (nazwana jako Firma), na tej podstawie podmieniają się dane na formatce (sposób na to opisywałam w poprzednim wpisie). I to chcemy wydrukować tak, aby właśnie w lewym nagłówku pojawiła się nazwa firmy.

Kod jest bardzo prosty i należy umieścić go w module prywatnym skoroszytu (tutaj opisywałam dokładnie jak to zrobić).

Kod VBA

Całą pracę wykonuje ta linijka kodu:

   ActiveSheet.PageSetup.LeftHeader = Range("Firma").Value

Natomiast ja jeszcze bym chciała, aby takie działanie było tylko dla jednego wybranego arkusza o nazwie Dane. Dorzucę więc warunek, że jeśli aktywny arkusz to Dane – zmienię nagłówek na wartość z komórki Firma.

Wszystko do kupy wygląda tak (pamiętaj tylko, że nazwę zdarzenia Excel sam wpisuje po wybraniu tego zdarzenia z listy! Zobacz w tym wpisie):

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    If ActiveSheet.Name = "Dane" Then
        ActiveSheet.PageSetup.LeftHeader = Range("Firma").Value
    End If
End Sub

A jeśli chcesz wstawić tekst w inne miejsce, niekoniecznie do lewego nagłówka, to wpisz odpowiednie po PageSetup:

NagłówekLewyLeftHeader
ŚrodkowyCenterHeader
PrawyRightHeader
StopkaLewaLeftFooter
ŚrodkowaCenterFooter
PrawaRightFooter

Hehe, i to wszystko :). Jeśli oczywiście robisz ze swoich arkuszy PDF-y (zobacz, jak zrobić to za pomocą makra podpiętego do przycisku) i nadal chcesz, aby podmianka w nagłówku/stopce działa się automatycznie – użyj zdarzenia BeforeSave i wstaw ten sam kod w środek. Kombinować można na różne sposoby, do czego Cię zachęcam!

A tutaj plik do pobrania:

MalinowyExcel Parametryzowanie nagłówków i stopek na wydruku VBA dw.zip

 

I wszystko krok po kroku w wersji wideo na YB:

(film pojawi się wkrótce)

 

 

 

Jeżeli chcesz lepiej poznać makra i VBA zapisz się na listę zainteresowanych kursem Excel w codziennej pracy cz. 3! Podczas oczekiwania na kurs będę Ci wysyłała informacje, ciekawostki i excelowe triki. Bezpłatnie! 

Pomogłam Ci? Postaw mi wirtualną kawę! →

Przeczytaj podobne wpisy

Kategorie

24 komentarze

  1. Słodziak z Ciebie Malinko !
    Dziękuję Ci za tę podpowiedź super i proste rozwiązanie.
    Pozdrawiam Cię Malinko 🙂

    Reply
    • Stasiu, bardzo się cieszę, że Ci się przyda to rozwiązanie :). Im prostsze tym lepsze 🙂 ♥ ♥ ♥

      Reply
  2. WOOOW Fantastyczne! był czas, że sporządzałem mnóstwo protokołów z pomiarów elektrycznych. W stopce była treść; „protokół z pomiaru XXXX nr XX str. x/x” jak ja to wtedy chciałem zautomatyzować.. zwłaszcza, że nowe protokoły powstawały z kopii innych i były tylko uzupełniane..

    Reply
    • Cieszę się :). Mam nadzieję, że teraz też Ci się to przyda 🙂

      Reply
      • ActiveSheet.PageSetup.CenterFooter = „Nazwa Firmy, dział xxxx Tel. (0xx) xx-xx-xxx w. xx ” & Chr(10) & „Protokół nr ” & Range(„nrprot”).Value & ” str&P/&N”

        :):):):) Gdybym wiedział to wcześniej… te setki jeśli nie tysiące ręcznie ustawianych stopek… te pomyłki… a komórka „nrprot” istnieje naturalnie w każdym dokumencie.. Od dziś jestem Twoim jeszcze większym fanem:*

        Reply
        • Łukasz, bardzo się cieszę! Miło mi to słyszeć i… korzystaj i szerz dalej! 🙂

          Reply
  3. Jak wstawić w stopkę osadzony obiekt.
    Mam zestawienie gdzie u góry dałam tabelkę z danymi(jako osadzony obiekt) i to powtórzone było na każdej stronie niestety inwestor zażyczył sobie aby tabela była nie na górze lecz na dole strony. Jak to można rozwiązać?

    Reply
    • Hej, nie próbowałam wstawiać osadzonych obiektów do stopki, ale na pewno da się obraz. Może na potrzeby tego wydruku wstawić obraz do bardzo dużej stopki (np. 8 cm?). Trochę kombinowane, ale skoro sobie zażyczył…? 🙂

      Reply
      • Niestety jest to osazony obiekt z innego exela (bo tabela ma wyglądać identyczne dla wszystkich plików).
        Jak wyświetlić nie wartość konkretnej komórki jak to podałaś w tym szkoleniu ale widok całego wiersza może wtedy bo to zadziałało.

        Reply
        • Pytanie jaka jest tego skala, bo może pójść po linii najmniejszego oporu, zapisać to jako obraz i wstawić obraz?

          Reply
          • Tak chyba się nie uda.
            Trzeba by było za każdym razem obiekt zapisać jako obraz a potem wstawić w stopkę.

            Mnie najbardziej by pasowało aby makro działał jak
            „U góry powtarzaj wiesze”
            z tym aby było to na dole w stopce.

          • Ok, rozumiem. Niestety właśnie tytuły wydruku są od góry i od lewej ;(

  4. Świetny tutorial! A czy jest możliwe wstawić do nagłówka więcej niż 3kolumny tekstu i wstawić kolor tła?

    Reply
    • Cieszę się :). Jeśli chodzi o kolor to myślę, że można tam wstawić obraz (prostokąt o wybranym kolorze), a więcej kolumnę tekstu – trzeba byłoby kombinować 🙂

      Reply
  5. Bardzo ciekawe i proste rozwiązanie! Dziękuję!
    Mam pytanie tylko czy można pobierać dane nie z jednej a kilku komórek? A dokładnie, żeby pobrać całą tabelę i to z innego arkusza i wstawić w nagłówek.
    Udało mi się pobrać dane z jednej komórki z innego arkusza, ale już z większej ilości komórek nie. Będę wdzięczna za podpowiedź. Pozdrawiam

    Reply
    • Hej, cieszę się, że Ci się podoba.
      Z tym niestety jest problem – można byłoby kombinować ze zrobieniem z tabeli obrazu i wtedy ją wstawić do stopki. A jeśli mają to być wartości – to może połączyć je w jedną komórkę (np. POŁĄCZ.TEKSTY) i wtedy wstawić do stopki?

      Reply
  6. Super sprawa, ale prosiłbym jeszcze o podanie jak dostosować wielkość i format czcionki przed wydrukiem ? Nagłówki mam ręcznie wprowadzone w pewnym stylu a to co w stopce drukuje się z automatu jest w innym styl. Chciałbym ustawić Trebuchet MS w wielkości 20
    Z góry dziękuję.

    Reply
    • Ja bym sugerowała ustawić to ręcznie. Czyli ustawić się w część nagłówka/stopki i tam nadać formatowanie (normalnie z Narzędzi głównych) :).

      Reply
      • Mam ten sam problem, po zapisaniu zmiany wielkości i formatu czcionki, wraca do poprzedniego wyglądu. Coś robię nie tak?

        Reply
        • Hej, a próbowałaś ustawić te parametry ręcznie?

          Reply
  7. Cześć, jak zmodyfikować vba aby stopka była dodana do każdego arkusza (drukuj cały skoroszyt)? Nie mogę sobie poradzić z tym.
    Dzięki

    Reply
    • Hej, to trzeba ustawić dla każdego arkusza oddzielnie. Najlepiej jednorazowo ręcznie, chyba że chcesz pobierać wartości z komórek, jak w tym artykule. Trzeba byłoby się przelecieć pętlą przez każdy arkusz i to ustawić przed wydrukiem…

      Reply
  8. Witam 🙂
    Trafiłem na Twój artykuł bo potrzebuję coś takiego zrobić akurat w swoim arkuszu.
    I tu mam mały problem.
    Robiąc wszystko tak jak to masz opisane w tekście i przedstawione w filmiku, makro nie działa.
    Zastanawia mnie skąd u Ciebie w kodzie znalazło się na początku „Option Explicit”?
    Od razu napisze, że to są moje początki z VBA stąd moje pytanie 😉
    U mnie zaznaczając „Ten_skoroszyt” tego wyrażenia nie ma w okienku gdzie się kod wpisuje.
    W pliku z tym makrem, który udostępniasz jest to wyrażenie i ten plik działa.
    Próbowałem ręcznie skopiować to do swojego arkusza ale nie pomogło.
    Masz jakiś pomysł czemu to makro w moim arkuszu nie działa?
    Pozdrawiam 🙂

    Reply
    • Hej :). Jeśli chodzi o opcję Option Explicit, to moim zdaniem to nie jest problem. Ta opcja wymusza deklarowanie zmiennych w kodzie, a zatem, jeśli u Ciebie nie ma tej opcji, a korzystasz z makra, opisanego w artykule, to nie przeszkadza :). Wręcz u Ciebie jest więcej możliwości, ze względu na brak tego wpisu. Czyli problem leży gdzieś indziej… Zobacz, czy np. odwołania do zakresów są prawidłowe. Może taka przyczyna?

      Reply

Submit a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *