Makro zdarzenia do zmiany nagłówka programu Excel - porady dotyczące programu Excel

Spisie treści

Donna z Missouri zapytała:

Czy masz pojęcie, jak mogę uzyskać ścieżkę, w której dokument jest umieszczony, wskazaną w nagłówku lub stopce - lub w dowolnym miejscu dokumentu. Mogę uzyskać nazwę pliku za pomocą & f, ale nie mogę dowiedzieć się, jak utworzyć ścieżkę.

Przede wszystkim rozumiem, że Microsoft dodał tę funkcjonalność do programu Excel XP i oferuję im uznanie, ponieważ jest to często zadawane pytanie. Czytelnicy, którzy już zaktualizowali pakiet Office XP do wersji Office XP, nie będą potrzebować technik z wskazówki z tego tygodnia, aby rozwiązać ten problem, ale nadal będą przydatne do rozwiązywania innych problemów.

Rozwiązaniem tej wskazówki jest specjalny typ makra zwany makro obsługi zdarzeń. Zamierzamy na krótko przejąć kontrolę nad programem Excel za każdym razem, gdy ma on wydrukować nasz skoroszyt i dodać bieżącą ścieżkę do nagłówka.

Wielu użytkowników programu Excel zajmowało się nagrywaniem prostych makr. Makra są przechowywane w module o nazwie Moduł1 lub Moduł2 i stają się częścią Twojego projektu. Dzisiaj omówię makra obsługi zdarzeń. Te makra znajdują się w specjalnym module kodu, który jest skojarzony z każdym arkuszem lub skoroszytem.

Wcześniejsze wskazówki, takie jak Enter Excel Time Without the Colon tip dotyczyły zdarzenia Worksheet_Change. Dzisiejsza wskazówka wymaga, abyśmy dodali kod do zdarzenia BeforePrint w skoroszycie.

Kod dodany do zdarzenia będzie uruchamiany za każdym razem, gdy zdarzenie zostanie „uruchomione”. W takim przypadku za każdym razem, gdy drukowany jest skoroszyt programu Excel, przed rozpoczęciem drukowania program Excel przekazuje kontrolę nad kodem VBA i umożliwia automatyczne wykonanie wszystkiego, co można określić w kodzie VBA, przed drukowaniem.

Zakładam, że jesteś nowy w makrach obsługi zdarzeń. Pokażę dokładnie, jak dostać się we właściwe miejsce, aby wejść do tego makra.

Mam skoroszyt o nazwie „Tip055 Sample.xls”. Po załadowaniu skoroszytu do programu Excel nacisnę alt = "" + F11, aby uruchomić podstawowy edytor wizualny. Domyślny wygląd edytora jest taki, jak pokazano po prawej stronie. Po lewej stronie jest zwykle widoczne okienko projektu u góry panelu Właściwości. Większość prawej strony ekranu zawiera okienko kodu. Jeśli nie masz makr w skoroszycie, okienko kodu będzie szare, jak pokazano po prawej stronie.

Dodałem do obrazu niebieską kursywę, aby zidentyfikować trzy panele - nie zobaczysz ich w swoim przykładzie.

Ważne jest, abyś mógł zobaczyć okienko projektu w edytorze VB. Jeśli twój widok edytora VB nie obejmuje okienka projektu, naciśnij Ctrl + R, aby wyświetlić okienko projektu. Lub kliknij ikonę paska narzędzi pokazaną poniżej:

W okienku projektu zostanie wyświetlony projekt dla każdego otwartego skoroszytu programu Excel i każdego zainstalowanego dodatku. Kliknij szary plus obok nazwy skoroszytu, aby rozwinąć projekt skoroszytu. Następnie kliknij szary plus obok folderu Microsoft Excel Objects, aby rozwinąć folder obiektów. Powinieneś teraz zobaczyć jeden wpis dla każdego arkusza i jeden wpis o nazwie ThisWorkbook.

Kliknij prawym przyciskiem myszy wpis ThisWorkbook i wybierz Wyświetl kod z wyskakującego menu.

Prawdopodobnie będziesz mieć teraz duże puste białe okienko kodu zajmujące prawą stronę ekranu. W górnej części okienka kodu znajdują się dwa menu rozwijane, które będą zawierać komunikaty (Ogólne) i (Deklaracje).

  • Z menu rozwijanego po lewej stronie wybierz opcję Skoroszyt.
  • Prawe menu jest teraz wypełnione wszystkimi programowalnymi zdarzeniami skojarzonymi ze skoroszytem. Są tutaj zdarzenia, które uruchomią kod za każdym razem, gdy skoroszyt jest otwierany, aktywowany, dezaktywowany itp. Dzisiaj chcemy napisać kod w zdarzeniu BeforePrint, więc wybierz BeforePrint z prawego menu rozwijanego.

Zwróć uwagę, że za każdym razem, gdy wybierzesz coś z prawego menu rozwijanego, edytor VBA zapisuje początkową i końcową linię kodu w module kodu za Ciebie. Gdy po raz pierwszy zmienisz menu rozwijane po lewej stronie na skoroszyt, prawdopodobnie otrzymałeś domyślnie początki podprogramu Workbook_Open. Jeśli nie zamierzasz pisać procedury Workbook_Open, powinieneś rozważyć usunięcie tej pustej procedury.

Teraz przejdźmy do pisania kodu VBA. Istnieje kilka przydatnych zmiennych, których możesz użyć.

  • ActiveWorkbook.Path zwróci ścieżkę do skoroszytu. Może wyglądać jak „C: Moje dokumenty MrExcel”.
  • ActiveWorkbook.FullName zwróci ścieżkę i nazwę pliku skoroszytu. Może wyglądać jak „C: Moje dokumenty MrExcel Tip055 Sample.xls”.

Możesz przypisać tej zmiennej do jednej z następujących 6 pozycji:

Worksheets("Sheet1").PageSetup.LeftHeader = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.CenterHeader = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.RightHeader = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.LeftFooter = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.CenterFooter = ActiveWorkbook.FullName Worksheets("Sheet1").PageSetup.RightFooter = ActiveWorkbook.FullName

Oto trzy możliwe przykładowe makra.

To makro będzie miało ścieżkę i nazwę pliku dodaną jako prawą stopkę aktywnego arkusza:

Private Sub Workbook_BeforePrint(Cancel As Boolean) ActiveSheet.PageSetup.RightFooter = ActiveWorkbook.FullName End Sub

To makro będzie miało ścieżkę dodaną jako lewy nagłówek Sheet1 i jako środkową stopkę Sheet2:

Private Sub Workbook_BeforePrint(Cancel As Boolean) Worksheets("Sheet1").PageSetup.LeftHeader = ActiveWorkbook.Path Worksheets("Sheet2").PageSetup.CenterFooter = ActiveWorkbook.Path End Sub

Jeśli podczas drukowania zazwyczaj używasz opcji „Cały skoroszyt”, ta wersja doda pełne imię i nazwisko jako środkową stopkę do wszystkich arkuszy:

Private Sub Workbook_BeforePrint(Cancel As Boolean) For Each Sh In ActiveWorkbook.Worksheets Sh.PageSetup.CenterFooter = ActiveWorkbook.FullName Next Sh End Sub

Postępuj zgodnie z jednym z tych przykładów lub utwórz własny. Po zakończeniu zamknij edytor VBA za pomocą Plik> Zamknij i wróć do programu Microsoft Excel.

Za każdym razem, gdy drukujesz arkusz, kod zostanie uruchomiony i wstawi bieżącą ścieżkę do odpowiedniego nagłówka lub stopki, które wskazałeś w kodzie VBA.

Kilka uwag i przestróg:

  • Początkujący użytkownicy programu Excel nie będą mieli pojęcia, że ​​ten kod znajduje się w skoroszycie. Po otwarciu skoroszytu mogą otrzymać ostrzeżenie o zabezpieczeniach, że plik zawiera makra, ale nie będzie żadnego ostrzeżenia, gdy kod VBA uderzy w to, co miał jako środkową stopkę i umieści tam nazwę ścieżki. Może to prowadzić do zgagi. Wyobraź sobie, że za 5 lat ktoś używa Twojego skoroszytu, a nowy menedżer chce, aby nazwa pliku została przeniesiona ze środkowej stopki do prawej stopki. Ta osoba może wiedzieć, że musi ręcznie zmienić ustawienia w menu Plik> Ustawienia strony, ale jeśli nie wie, że kod tam jest, spowoduje to, że będzie źle, ponieważ kod nieustannie zmienia stopki z powrotem.

    Jest naprawdę mało prawdopodobne, że będą w stanie znaleźć twój moduł kodu, ale na wszelki wypadek możesz zostawić komentarz w module kodu, który przekieruje ich z powrotem do tej witryny w celu wyjaśnienia.

    Możesz również dodać komentarz do komórki A1 przypominający sobie, że istnieje moduł obsługi zdarzeń skonfigurowany do zmiany nagłówków drukowania.

  • W języku VBA istnieje ustawienie, które zapobiega uruchamianiu zdarzeń. Jeśli twoje makro nagle przestaje działać, często można stwierdzić, że coś w języku VBA zmieniło to ustawienie, aby zapobiec uruchomieniu zdarzeń. Typowy scenariusz jest taki, że programista uruchamia makro z:

    Application.EnableEvents = False '… macro here… Application.EnableEvents = True

    Gdy wystąpi błąd w makrze, zdarzenia nigdy nie zostaną ponownie włączone. Kiedy tak się dzieje, pojawia się niewielkie ostrzeżenie. Jeśli podejrzewasz, że programy obsługi zdarzeń nie są wykonywane, przejdź do edytora Visual Basic. Naciśnij Ctrl + g, aby wyświetlić natychmiastowe okienko. W okienku bezpośrednim wpisz:

    Print Application.EnableEvents

    i naciśnij Enter. Jeśli okaże się, że jest to ustawione na Fałsz, wpisz następujący wiersz w okienku bezpośrednim:

    Application.EnableEvents = True

    i naciśnij Enter.

Dzięki Donnie za świetne pytanie. W trakcie wyjaśniania odpowiedzi była to doskonała okazja do rozwinięcia koncepcji obsługi zdarzeń w VBA.

Interesujące artykuły...