Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Sub auto_open(), Sub auto_close()

Forumthread: Sub auto_open(), Sub auto_close()

Sub auto_open(), Sub auto_close()
Uwe
Hallo zusammen!
Für Prozeduren, die im Zusammenhang mit dem Start, bzw. dem Schließen einer Datei ausgeführt werden sollen, nutze ich Sub auto_open() bzw. Sub auto_close() Soweit kein Thema...
Mehrfach bin ich bei meiner Recherche zu Grundwissen in VBA darüber "gestolpert", das diese Anweisungen veraltet sind. Neuere Ausdrücke finden sich aber nirgens.
Meine sicher leicht zu beantwortende Frage ist einfach die, ob eben auto_open(), bzw. auto_close() noch "up to date" ist...?
Kurze Info dazu wäre seeehr nett.
Besten Dank
Uwe
Anzeige
AW: Sub auto_open(), Sub auto_close()
11.12.2009 10:18:49
{Boris}
Hi Uwe,
das ist nicht "up to" sondern "out of" date.
Klick mal im Projektexplorer auf "DieseArbeitsmappe" und guck Dir rechts dann mal die Comboboxen an.
Grüße Boris
AW: Sub auto_open(), Sub auto_close()
11.12.2009 10:50:03
Uwe
Hey Boris,
... rechts dann mal die Comboxen? Was meinst Du? Wo find ich diese Angaben? Wäre nett, so Du mir vielleicht direkt die derzeit gebräuchlichen Anweisungen beschreibst, nennst...
Projektexplorer... "Diese Arbeitsmape" ist hingegen klar.
Sorry für die vielleicht dumme Frage.
Uwe
Anzeige
AW: Sub auto_open(), Sub auto_close()
11.12.2009 10:56:57
{Boris}
Hi Uwe,
Userbild
Grüße Boris
AW: Sub auto_open(), Sub auto_close()
11.12.2009 10:58:49
Rudi
Hallo,
über dem Codefenster.
Links: Objekte, rechts: Ereignisse
Gruß
Rudi
Sorry aber...
11.12.2009 11:09:57
Uwe
Hallo Boris, hallo Rudi,
über dem Codefenster steht doch nur "Allgemein" oder halt "Woorkbook"!!!
Seid doch bitte so gut und nennt mir die Anweisung...
Mmmhhh...
Uwe
Anzeige
Objekte und Ereignisse
11.12.2009 11:11:48
{Boris}
Hi Uwe,
Workbook ist das Objekt - und wenn Du es auswählst, wird auch schon die Rumpfprozedur des Standardereignisses für dieses Objekt erzeugt: Workbook_Open
Und jetzt kannst Du Dir in der linken Box noch alle anderen zur Verfügung stehenden Ereignisse anschauen.
Grüße Boris
Natürlich in der RECHTEN Box...oT
11.12.2009 11:12:46
{Boris}
....
Anzeige
@ {Boris}: links ist aber...
11.12.2009 11:14:21
Jens
Hi
...da, wo der Daumen rechts ist ;o)
Gruß Jens
AW: @ {Boris}: links ist aber...
11.12.2009 11:39:21
Uwe
Hey Jens,
ja, ja doch...
wenn andere klüger sind als wir,
macht das selten nur Pläsier,
doch wenn sie dümmer,
erfreut`s fast immer
Uwe
AW: Objekte und Ereignisse
11.12.2009 11:37:56
Uwe
Hallo Boris!
JETZT hab ich`s verstanden. Einmal mehr stelle ich fest, das ich mich durchaus - mit ein wenig Hilfe - immer mehr durch VBA durchwurschtel. Nein, mal im Ernst. Schritt für Schritt, wenn mitunter auch nur zentimeterweise komme ich meinem Ziel näher...
Schon mal Dank dafür.
Die aktuelle Anweisung lautet somit also Workbook_open() O.k. o.k.
Uwe
Anzeige
AW: Sorry aber...
11.12.2009 11:12:40
Jens
Hallo
Wähle dort "Workbook" aus, und in der rechten Auswahlliste gibt es dann die verschiedenen Ereignisse, die Du benutzen kannst (z.B. Open und BeforeClose).
Gruß Jens
AW: Sorry aber...
11.12.2009 11:13:12
Rudi
Hallo,
über dem Codefenster steht doch nur "Allgemein" oder halt "Workbook"

Richtig. Wähle 'Workbook' und klappe die rechte Combobox auf.
Gruß
Rudi
Anzeige
AW: Sorry aber...
11.12.2009 11:40:10
Uwe
Hallo Rudi!
Vielen Dank für Eure Hilfe.
Gruß
Uwe
AW: Sorry aber...
11.12.2009 12:24:25
Uwe
Hallo Rudi,
gerade eben habe ich denn mal meine Datei flugs "modernisiert". Funktioniert aber noch nicht ganz so wie gewünscht. Wie beschrieben habe ich bisher mit der Anweisung Sub auto_open() gearbeitet. Hierin gabs die Anweisung:
Dim AktiveMenüLeiste As Object, Werkzeuge As Object, Befehl As Object, MB As Object
Rem On Error Resume Next
Set AktiveMenüLeiste = CommandBars.ActiveMenuBar
Set Werkzeuge = AktiveMenüLeiste.Controls.Add(Type:=msoControlPopup, Temporary:=True)
Werkzeuge.Caption = "Lohndatei"
Set Befehl = Werkzeuge.Controls.Add(Type:=msoControlButton, ID:=1)
With Befehl
.Caption = "Monatsabschluss"
.OnAction = ""
End With
Soweit so guuut. Meinen Code habe ich nun unter Workbook_open() verschoben. Hier gibt`s nunmehr aber in der Zeile
Set AktiveMenüLeiste = CommandBars.ActiveMenuBar
Streß. Liegt das daran, das "Diese Arbeitsmappe" natürlich nur "private" Module kennt? Wie schreibe ich meine Anweisung um, damit ich auch mit Code unter "Diese Arbeitsmappe" einen eigenen Menüpunkt zur Verfügung habe?
Besten Dank für Deine Hilfe.
Gruß
Uwe
Anzeige
Application.Commandbars(...) owT
11.12.2009 12:54:09
Rudi
AW: Application.Commandbars(...) owT
11.12.2009 13:10:39
Uwe
Hallo Rudi,
was meinst du mit Application.Commandbars(...) owT?
Sorry, aber einen Text zu Deinem Betreff hattest nicht geschrieben...
Uwe
AW: Application.Commandbars(...) owT
11.12.2009 13:27:25
Rudi
Hallo,
der Betreff ist die Antwort.
In Klassenmodulen ist Application. erforderlich, wenn man die Commandbars-Auflistung ansprechen will.
Set AktiveMenüLeiste = Application.CommandBars.ActiveMenuBar
Gruß
Rudi
Anzeige
AW: Application.Commandbars(...) owT
11.12.2009 13:58:39
Uwe
Hallo Rudi!
Tja, "wer lesen kann, ist klar im Vorteil". Meine selbstverständlich mich. Wird Zeit das ich für heute Feierabend mach.
Vielen Dank für Deine Mühe.
Jetzt sollte es funktionieren.
Uwe
;

Forumthreads zu verwandten Themen

Anzeige

Infobox / Tutorial

Automatisches Öffnen und Schließen von Excel-Dateien mit VBA


Schritt-für-Schritt-Anleitung

Um die Funktionen Sub auto_open() und Sub auto_close() in VBA zu nutzen, folge diesen Schritten:

  1. Öffne den Visual Basic-Editor:

    • Drücke ALT + F11 in Excel.
  2. Navigiere zum Projekt-Explorer:

    • Wähle "Diese Arbeitsmappe" im linken Fenster aus.
  3. Erstelle die neuen Prozeduren:

    • Wähle das Objekt "Workbook" in der linken ComboBox.
    • In der rechten ComboBox wähle die Ereignisse wie Open für das Öffnen oder BeforeClose für das Schließen der Datei.
    • Es wird automatisch eine Prozedur erstellt, z.B.:
      Private Sub Workbook_Open()
       ' Dein Code hier
      End Sub
  4. Füge den gewünschten Code hinzu:

    • Schreibe deinen VBA-Code innerhalb der Prozeduren. Anstelle von Sub auto_open() nutze Private Sub Workbook_Open().

Häufige Fehler und Lösungen

  • Fehler: Prozedur nicht gefunden:

    • Stelle sicher, dass du den Namen Workbook_Open korrekt verwendest, anstelle von auto_open.
  • Fehler: Ereignis nicht ausgeführt:

    • Überprüfe, ob dein Makroschutz aktiviert ist. Gehe zu Datei > Optionen > Trust Center > Einstellungen für das Trust Center > Makroeinstellungen.
  • Fehler: Objekte nicht gefunden:

    • Verwende Application.CommandBars für den Zugriff auf Menüleisten, wenn du unter "Diese Arbeitsmappe" arbeitest.

Alternative Methoden

Anstelle von auto_open() kannst du auch Application.OnTime verwenden, um spezifische Makros zu einem bestimmten Zeitpunkt oder nach bestimmten Ereignissen auszuführen. Beispiel:

Sub Auto_Open()
    Application.OnTime Now + TimeValue("00:01:00"), "DeinMakro"
End Sub

Das führt dein Makro nach einer Minute automatisch aus.


Praktische Beispiele

  1. Öffnen eines Dialogfensters:

    Private Sub Workbook_Open()
       MsgBox "Willkommen in der Arbeitsmappe!"
    End Sub
  2. Menüleiste anpassen:

    Private Sub Workbook_Open()
       Dim AktiveMenüLeiste As Object
       Set AktiveMenüLeiste = Application.CommandBars.ActiveMenuBar
       ' Weitere Anpassungen hier
    End Sub
  3. Speichern beim Schließen:

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
       If MsgBox("Möchten Sie die Änderungen speichern?", vbYesNo) = vbYes Then
           ThisWorkbook.Save
       End If
    End Sub

Tipps für Profis

  • Verwende Workbook_Open statt Sub auto_open():

    • Workbook_Open ist die modernere und empfohlene Methode zur Automatisierung beim Öffnen von Arbeitsmappen.
  • Prozeduren modularisieren:

    • Halte deinen Code sauber, indem du häufig genutzte Teile in separate Subs oder Funktionen auslagerst.
  • Debugging:

    • Nutze Debug.Print um Werte während der Laufzeit zu überprüfen. Dies hilft dir, Fehler schnell zu identifizieren.

FAQ: Häufige Fragen

1. Warum sollte ich Workbook_Open anstelle von Sub auto_open() verwenden? Die Verwendung von Workbook_Open ist der aktuelle Standard in VBA und wird besser unterstützt.

2. Wie kann ich sicherstellen, dass meine Makros beim Öffnen immer ausgeführt werden? Stelle sicher, dass deine Datei im richtigen Format gespeichert ist (z.B. .xlsm für Makros) und dass die Makrosicherheitseinstellungen in Excel angepasst sind.

3. Kann ich mehrere Prozeduren im Workbook_Open haben? Ja, du kannst mehrere Anweisungen innerhalb der Workbook_Open Prozedur ausführen. Achte jedoch darauf, den Code übersichtlich zu halten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige