• Zapisz się do newslettera, aby otrzymywać powiadomienia o nowościach na blogu
    Zapisując się, wyrażasz zgodę na przesyłanie Ci informacji o nowościach na tym blogu. Zgodę możesz w każdej chwili wycofać (szczegóły).

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

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…

Chcesz się nauczyć makr w Excelu? Zacznij od nagrywania!

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łówek Lewy LeftHeader
Środkowy CenterHeader
Prawy RightHeader
Stopka Lewa LeftFooter
Środkowa CenterFooter
Prawa RightFooter

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)

 

 

 

Spodobał Ci się ten artykuł?

Jeśli TAK, zapisz się na newsletter, aby otrzymywać powiadomienia
o o nowościach na blogu.

Zapisując się, wyrażasz zgodę na przesyłanie Ci informacji o nowościach na tym blogu. Zgodę możesz w każdej chwili wycofać (szczegóły).

Tagi , , , , , , , , , , , .Dodaj do zakładek Link.

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

  1. Stasiu mówi:

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

  2. Łukasz mówi:

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

    • Malina mówi:

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

      • Łukasz mówi:

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

  3. Danuta mówi:

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

    • Malina mówi:

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

      • Danuta mówi:

        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.

        • Malina mówi:

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

          • Danuta mówi:

            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.

          • Malina mówi:

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

  4. Olga mówi:

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

    • Malina mówi:

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

  5. Kasia mówi:

    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

    • Malina mówi:

      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?

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *