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 🙂

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

      Odpowiedz
  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..

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

      Odpowiedz
      • 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:*

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

          Odpowiedz
  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ć?

    Odpowiedz
    • 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ł…? 🙂

      Odpowiedz
      • 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.

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

          Odpowiedz
          • 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?

    Odpowiedz
    • 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ć 🙂

      Odpowiedz
  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

    Odpowiedz
    • 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?

      Odpowiedz
  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ę.

    Odpowiedz
    • 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) :).

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

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

          Odpowiedz
  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

    Odpowiedz
    • 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…

      Odpowiedz
  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 🙂

    Odpowiedz
    • 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?

      Odpowiedz

Wyślij komentarz

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