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:
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 BeforePrint, czyli 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
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!
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)