Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro ausführen vor Schließen der Tabelle

Makro ausführen vor Schließen der Tabelle
19.12.2014 17:19:48
Werner
Vorbemerkung:
Eine Arbeitsmappe enthält (derzeit) nur ein Arbeitsblatt. In diesem Arbeitsblatt werden per Verknüpfung Daten aus einer Vielzahl anderer Arbeitsmappen/Tabellen gesammelt und weiterverarbeitet. Das Speichern und Schließen erfolgt standardmäßig (Button bzw. Schließen-Kreuz)
Ein per Makrorecorder generiertes Makro kopiert Daten aus einer Spalte der Tabelle in eine andere. Dieser Vorgang wird derzeit über eine Befehlsschaltfläche angestoßen und funktioniert einwandfrei.
Aufgabe:
Der Kopiervorgang soll automatisiert beim Schließen der Tabelle/Arbeitsmappe erfolgen.
Bei Lösungsvorschlägen bitte ich auch darzustellen, ob der gesamte Text des vorhandenen Kopiermakros eingefügt oder nur namentlich aufgeführt wird. (Application.Run usw.)
Vorab herzlichen Dank für einen brauchbaren Lösungsvorschlag.

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro ausführen vor Schließen der Tabelle
19.12.2014 17:40:04
Dieter
Hallo Werner,
du kannst die folgende Prozedur in den Code-Modul "DieseArbeitsmappe" einstellen:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
DeineProzedur
End Sub
"DeineProzedur" ist der Name deines Makros.
Den Code-Modul siehst du, wenn du im Projektexplorer einen Doppelklick auf "DieseArbeitsmappe" ausführst.
Viele Grüße
Dieter

Anzeige
AW: Makro ausführen vor Schließen der Tabelle
20.12.2014 01:36:24
Werner
Hallo Dieter,
herzlichen Dank, es funktioniert einwandfrei. Ich war schon auf dem richtigen Weg, habe aber versucht, Deine Ergänzung in das Makro selbst einzubauen und bin damit - da kommt wieder einmal der Laie zum Vorschein - immer wieder gescheitert.
So ganz nebenbei: Bist Du der (Dr.) Dieter Klemke, der mir über lange Zeit beim Excel-Berater hilfreich zur Seite gestanden hat ?
Viele Grüße
Werner Schütz

Anzeige
AW: Makro ausführen vor Schließen der Tabelle
20.12.2014 15:58:30
Dieter
Hallo Werner,
ja, der bin ich.
Ich arbeite auch noch für den Excel-Berater. Aber gelegentlich - in letzter Zeit sehr selten - schaue ich mal bei Herber vorbei. Dort hat mich auch seinerzeit der Herr Althaus entdeckt und für seine Publikation geworben.
Viele Grüße und ein schönes Fest
Dieter

Anzeige
AW: Makro ausführen vor Schließen der Tabelle
20.12.2014 19:33:45
Werner
Hallo Dieter,
ich verstehe noch immer nicht, warum das Makro per Befehlsschaltfläche aus dem Standard-Modul heraus ausgelöst werden kann, ohne eine solche Schaltfläche aber in Verbindung mit dem Klassen- oder Dokumentmodul gebracht werden muss. Vielleicht kannst Du das kurz erläutern.
Ich habe die Prozedur probeweise mit zwei im Aufbau identischen Tabellen in der Arbeitsmappe getestet und festgestellt, sie läuft nur mit der jeweils aktiven Tabelle. Das ist insofern beruhigend, als damit ein gewisser Resteinfluss erhalten bleibt. Was wäre aber -rein theoretisch - wenn diese zweite Tabelle völlig andere Daten enthielte und die Prozedur Schaden anrichtete ? Müsste für einen solchen Fall das Makro statt an das Klassenmodul nicht an einzelne Tabellen gebunden werden ?
Falls wir bis dahin keinen weiteren Kontakt haben, wünsche auch ich ein frohes Fest und ein erfolgreiches 2015.
Viele Grüße
Werner

Anzeige
AW: Makro ausführen vor Schließen der Tabelle
20.12.2014 19:35:01
Werner
Hallo Dieter,
ich verstehe noch immer nicht, warum das Makro per Befehlsschaltfläche aus dem Standard-Modul heraus ausgelöst werden kann, ohne eine solche Schaltfläche aber in Verbindung mit dem Klassen- oder Dokumentmodul gebracht werden muss. Vielleicht kannst Du das kurz erläutern.
Ich habe die Prozedur probeweise mit zwei im Aufbau identischen Tabellen in der Arbeitsmappe getestet und festgestellt, sie läuft nur mit der jeweils aktiven Tabelle. Das ist insofern beruhigend, als damit ein gewisser Resteinfluss erhalten bleibt. Was wäre aber -rein theoretisch - wenn diese zweite Tabelle völlig andere Daten enthielte und die Prozedur Schaden anrichtete ? Müsste für einen solchen Fall das Makro statt an das Klassenmodul nicht an einzelne Tabellen gebunden werden ?
Falls wir bis dahin keinen weiteren Kontakt haben, wünsche auch ich ein frohes Fest und ein erfolgreiches 2015.
Viele Grüße
Werner

Anzeige
AW: Makro ausführen vor Schließen der Tabelle
20.12.2014 20:57:34
Dieter
Hallo Werner,
vielen Dank für deine Festtagswünsche.
Zum Aufruf deines Makros:
Grundsätzlich kann dein Makro aus jedem Modul heraus aufgerufen werden. Allerdings wolltest du ja, dass das Makro automatisch gestartet wird, wenn die Arbeitsmappe geschlossen wird und das geht nur auf 2 Wegen.
1. Durch eine Workbook_BeforeClose-Prozedur, die im Code-Modul "DieseArbeitsmappe" angesiedelt sein muss.
2. Durch eine Auto_Close-Prozedur, die in einem normalen Modul steht.
Das zweite Verfahren gilt aber als veraltet, daher bleibt eigentlich nur 1.
Zu deinen Bedenken, dass die Prozedur Schaden anrichten könnte:
Wenn die Prozedur so geschrieben ist, dass sie für das momentan aktive Blatt arbeitet, dann könntest du dieses Blatt vor Aufruf der Prozedur automatisch aktivieren, z.B. so
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Me.Worksheets("DeinBlatt").Activate
DeineProzedur
End Sub

Eine weitere - elegantere - Möglichkeit besteht darin, dass du deine Prozedur so schreibst, dass sie nicht für das aktive Blatt arbeitet, sondern für ein Blatt ws, welches du am Anfang der Prozedur festgelegt hast
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("DeinBlatt")

Du musst dann alle deine Range-Objekte mit der Adresse ws versehen, also anstelle von Range("A1:B4") schreibst du jetzt ws.Range("A1:B4").
Viele Grüße
Dieter
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Makro beim Schließen der Tabelle ausführen


Schritt-für-Schritt-Anleitung

Um ein Excel-Makro beim Schließen einer Tabelle auszuführen, folge diesen Schritten:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  2. Navigiere zu "DieseArbeitsmappe":

    • Im Projekt-Explorer findest du deine Arbeitsmappe. Doppelklicke auf "DieseArbeitsmappe".
  3. Füge den folgenden Code ein:

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
       DeineProzedur
    End Sub
    • Ersetze DeineProzedur durch den Namen des Makros, das du ausführen möchtest.
  4. Speichere die Arbeitsmappe:

    • Stelle sicher, dass du die Datei im Format „Excel-Arbeitsmappe mit Makros“ (xlsm) speicherst.
  5. Teste das Makro:

    • Schließe die Arbeitsmappe und überprüfe, ob das Makro wie gewünscht ausgeführt wird.

Häufige Fehler und Lösungen

  • Fehler: Das Makro wird nicht ausgeführt.

    • Lösung: Stelle sicher, dass der Code korrekt in "DieseArbeitsmappe" eingefügt wurde und dass der Name des Makros richtig geschrieben ist.
  • Fehler: Excel schließt ohne das Makro auszuführen.

    • Lösung: Überprüfe, ob die Datei im richtigen Format gespeichert wurde (xlsm) und ob in den Excel-Optionen Makros aktiviert sind.

Alternative Methoden

Eine alternative Methode, um ein Makro beim Schließen auszuführen, ist die Verwendung einer Auto_Close-Prozedur. Diese Methode gilt jedoch als veraltet. Hier ist ein Beispiel:

Sub Auto_Close()
    DeineProzedur
End Sub

Diese Methode wird jedoch nicht empfohlen, da sie in Zukunft möglicherweise nicht mehr unterstützt wird. Daher ist die Verwendung von Workbook_BeforeClose die bessere Wahl.


Praktische Beispiele

  1. Kopieren von Daten beim Schließen: Wenn du ein Makro hast, das Daten kopiert, kannst du den Code so anpassen:

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
       Dim ws As Worksheet
       Set ws = ThisWorkbook.Worksheets("Datenblatt")
       ws.Range("A1:B10").Copy Destination:=ThisWorkbook.Worksheets("Zielblatt").Range("A1")
    End Sub
  2. Speichern vor dem Schließen: Du kannst auch sicherstellen, dass die Datei vor dem Schließen gespeichert wird:

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
       ThisWorkbook.Save
       DeineProzedur
    End Sub

Tipps für Profis

  • Verwende Fehlerbehandlung in deinem Makro, um sicherzustellen, dass unerwartete Fehler nicht zum Absturz der Anwendung führen.
  • Teste deinen Code schrittweise, indem du die F8-Taste im VBA-Editor verwendest, um den Code Zeile für Zeile auszuführen.
  • Halte deine Makros gut dokumentiert, sodass du später leicht nachvollziehen kannst, was jeder Teil des Codes macht.

FAQ: Häufige Fragen

1. Wie kann ich ein Makro ausführen, wenn ich die Datei speichere?
Du kannst eine ähnliche Prozedur wie Workbook_BeforeClose verwenden, aber dafür müsstest du Workbook_BeforeSave verwenden:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    DeineProzedur
End Sub

2. Was passiert, wenn ich das Makro aus einem anderen Modul aufrufen möchte?
Du kannst das Makro aus einem Standardmodul heraus aufrufen, aber um es beim Schließen der Arbeitsmappe automatisch auszuführen, muss es in "DieseArbeitsmappe" platziert werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige