Ereignismakro zum Ändern des Excel-Headers - Excel-Tipps

Inhaltsverzeichnis

Donna aus Missouri fragte:

Haben Sie eine Idee, wie ich den Pfad erhalten kann, in dem das Dokument abgelegt ist, der in der Kopf- oder Fußzeile angegeben ist - oder irgendwo im Dokument. Ich kann den Dateinamen mit & f eingeben, aber ich kann nicht herausfinden, wie der Pfad ausgeführt wird.

Zunächst einmal verstehe ich, dass Microsoft diese Funktionalität zu Excel XP hinzugefügt hat, und ich gebe ihnen ein Lob, da es sich um ein häufig gestelltes Problem handelt. Alle Leser, die bereits ein Upgrade auf Office XP durchgeführt haben, benötigen die Techniken im Tipp dieser Woche nicht, um dieses Problem zu lösen. Sie sind jedoch weiterhin hilfreich, um andere Probleme zu lösen.

Die Lösung für diesen Tipp ist ein spezieller Makrotyp, der als Ereignishandlermakro bezeichnet wird. Wir werden jedes Mal, wenn unsere Arbeitsmappe gedruckt werden soll, kurz die Kontrolle über Excel übernehmen und den aktuellen Pfad zum Header hinzufügen.

Viele Excel-Benutzer haben versucht, einfache Makros aufzuzeichnen. Die Makros werden in einem Modul namens Modul1 oder Modul2 gespeichert und werden Teil Ihres Projekts. Heute werde ich Event-Handler-Makros diskutieren. Diese Makros befinden sich in einem speziellen Codemodul, das jedem Arbeitsblatt oder jeder Arbeitsmappe zugeordnet ist.

Frühere Tipps wie der Tipp Excel-Zeit ohne Doppelpunkt eingeben haben sich mit dem Ereignis Worksheet_Change befasst. Der heutige Tipp erfordert, dass wir dem BeforePrint-Ereignis der Arbeitsmappe Code hinzufügen.

Zu einem Ereignis hinzugefügter Code wird immer dann ausgeführt, wenn dieses Ereignis "ausgelöst" wird. In diesem Fall übergibt Excel jedes Mal, wenn die Excel-Arbeitsmappe gedruckt wird, bevor der Druckvorgang beginnt, die Kontrolle an den VBA-Code und lässt zu, dass alles, was Sie im VBA-Code angeben können, vor dem Drucken automatisch ausgeführt wird.

Ich gehe davon aus, dass Sie neu in Event-Handler-Makros sind. Ich werde genau durchgehen, wie ich an den richtigen Ort komme, um dieses Makro aufzurufen.

Ich habe eine Arbeitsmappe mit dem Namen 'Tip055 Sample.xls'. Wenn die Arbeitsmappe in Excel geladen ist, drücke ich alt = "" + F11, um den visuellen Basiseditor zu starten. Das Standard-Erscheinungsbild des Editors ist wie rechts gezeigt. Auf der linken Seite sehen Sie normalerweise einen Projektbereich, der über einem Eigenschaftenbereich gestapelt ist. Der größte Teil der rechten Seite des Bildschirms enthält einen Codebereich. Wenn Ihre Arbeitsmappe keine Makros enthält, ist Ihr Codebereich grau (siehe Abbildung rechts).

Ich habe dem Bild blau kursive Skriptwörter hinzugefügt, um die drei Fenster zu identifizieren. Diese werden in Ihrem Beispiel nicht angezeigt.

Es ist wichtig, dass Sie den Projektbereich im VB-Editor sehen können. Wenn Ihre Ansicht des VB-Editors den Projektbereich nicht enthält, drücken Sie Strg + R, um den Projektbereich anzuzeigen. Oder klicken Sie auf das unten gezeigte Symbolleistensymbol:

Im Projektbereich wird für jede geöffnete Excel-Arbeitsmappe und jedes installierte Add-In ein Projekt angezeigt. Klicken Sie auf das graue Pluszeichen neben dem Namen Ihrer Arbeitsmappe, um das Projekt für Ihre Arbeitsmappe zu erweitern. Klicken Sie dann auf das graue Pluszeichen neben dem Ordner "Microsoft Excel-Objekte", um den Objektordner zu erweitern. Sie sollten jetzt einen Eintrag für jedes Arbeitsblatt und einen Eintrag mit dem Namen ThisWorkbook sehen.

Klicken Sie mit der rechten Maustaste auf den Eintrag für ThisWorkbook und wählen Sie im Popup-Menü die Option Code anzeigen.

Sie haben jetzt wahrscheinlich einen großen leeren weißen Codebereich auf der rechten Seite des Bildschirms. Oben im Codebereich befinden sich zwei Dropdown-Listen mit den Angaben (Allgemein) und (Deklarationen).

  • Wählen Sie in der linken Dropdown-Liste Arbeitsmappe aus.
  • Das rechte Dropdown-Menü enthält jetzt alle programmierbaren Ereignisse, die der Arbeitsmappe zugeordnet sind. Hier gibt es Ereignisse, bei denen Code jedes Mal ausgeführt wird, wenn die Arbeitsmappe geöffnet, aktiviert, deaktiviert usw. wird. Heute möchten wir Code in das BeforePrint-Ereignis schreiben. Wählen Sie daher BeforePrint aus der rechten Dropdown-Liste aus.

Beachten Sie, dass der VBA-Editor jedes Mal, wenn Sie etwas aus der richtigen Dropdown-Liste auswählen, die Anfangs- und Endzeile des Codes für Sie in das Codemodul schreibt. Wenn Sie das linke Dropdown-Menü zum ersten Mal in "Arbeitsmappe" ändern, haben Sie wahrscheinlich standardmäßig die Anfänge einer Unterroutine "Arbeitsmappe_Open" erhalten. Wenn Sie keine Workbook_Open-Prozedur schreiben möchten, sollten Sie diese leere Prozedur löschen.

Nun zum Schreiben des VBA-Codes. Es gibt einige nützliche Variablen, die Sie verwenden können.

  • ActiveWorkbook.Path gibt den Pfad der Arbeitsmappe zurück. Es könnte wie folgt aussehen: "C: Eigene Dateien MrExcel".
  • ActiveWorkbook.FullName gibt den Pfad und den Dateinamen der Arbeitsmappe zurück. Es könnte wie folgt aussehen: "C: Eigene Dateien MrExcel Tip055 Sample.xls".

Sie können diese Variable an einer der folgenden 6 Positionen zuweisen:

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

Hier sind drei mögliche Beispielmakros.

In diesem Makro werden der Pfad und der Dateiname als rechte Fußzeile des aktiven Arbeitsblatts hinzugefügt:

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

Diesem Makro wird der Pfad als linke Kopfzeile von Blatt1 und als mittlere Fußzeile von Blatt2 hinzugefügt:

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

Wenn Sie beim Drucken die Option "Gesamte Arbeitsmappe" verwenden, fügt diese Version allen Blättern den vollständigen Namen als mittlere Fußzeile hinzu:

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

Folgen Sie einem dieser Beispiele oder erstellen Sie eines Ihrer eigenen. Wenn Sie fertig sind, schließen Sie den VBA-Editor mit Datei> Schließen und kehren Sie zu Microsoft Excel zurück.

Jedes Mal, wenn Sie ein Arbeitsblatt drucken, wird der Code ausgeführt und der aktuelle Pfad in die entsprechende Kopf- oder Fußzeile eingefügt, die Sie im VBA-Code angegeben haben.

Einige Hinweise und Vorsichtsmaßnahmen:

  • Anfänger in Excel haben wenig Ahnung, dass sich dieser Code in der Arbeitsmappe befindet. Wenn sie die Arbeitsmappe öffnen, erhalten sie möglicherweise die Sicherheitswarnung, dass die Datei Makros enthält. Es wird jedoch keine Warnung angezeigt, wenn der VBA-Code alles schlägt, was sie als mittlere Fußzeile hatten, und den Pfadnamen dort einfügt. Dies kann zu Sodbrennen führen. Stellen Sie sich vor, in 5 Jahren verwendet jemand Ihre Arbeitsmappe und der neue Manager möchte, dass der Dateiname von der mittleren zur rechten Fußzeile verschoben wird. Diese Person kann die Einstellungen in Datei> Seitensetup manuell ändern, aber wenn sie nicht weiß, dass der Code vorhanden ist, wird sie verrückt, da der Code ihre Fußzeilen ständig zurück ändert.

    It is really unlikely that they will be able to find your code module, but just in case they do, you might want to leave a comment in the code module that directs them back to this website for an explanation.

    You also might want to add a comment to cell A1 reminding yourself that there is an event handler set up to change the print headers.

  • There is a setting within VBA which prevents events from running. If your macro suddenly stops working, t is common to find that something within VBA has turned this setting to prevent the events from running. The common scenario is that a programmer starts a macro with:

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

    Wenn im Makro ein Fehler auftritt, werden die Ereignisse nie wieder aktiviert. In diesem Fall gibt es wenig Warnung. Wenn Sie den Verdacht haben, dass Ihre Ereignishandler nicht ausgeführt werden, rufen Sie den Visual Basic-Editor auf. Drücken Sie Strg + g, um ein sofortiges Fenster aufzurufen. Geben Sie im unmittelbaren Bereich Folgendes ein:

    Print Application.EnableEvents

    und drücken Sie die Eingabetaste. Wenn Sie feststellen, dass dies auf False gesetzt ist, geben Sie die folgende Zeile in den unmittelbaren Bereich ein:

    Application.EnableEvents = True

    und drücken Sie die Eingabetaste.

Vielen Dank an Donna für eine tolle Frage. Bei der Erläuterung der Antwort war dies eine großartige Gelegenheit, das Konzept der Ereignishandler in VBA zu erweitern.

Interessante Beiträge...