Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1112to1116
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA-Ereignis "nach Save"

VBA-Ereignis "nach Save"
Aljerter
hallo zusammen,
gibt es eine Möglichkeit unter VBA, auf das Ereignis "nach Save" zu triggern?
Hintergrund:
ich habe eine Excel-Vorlage zum erstellen eines Rechnungsblattes.
Diese Vorlage ruft ein VBA-Programm in einer separaten Excel-Datei auf.
Gleichzeitig mit dem Aufruf trägt sich diese neu zu erstellende Rechnung in die
Tabelle "VBA-Programm-Notitzblock" der Excle-Programmdatei ein, in der alle aktuell
mit dem VBA-Programm bearbeiteten Rechnungen enthalten sind
(es können ja mehr als nur eine Rechnung zeitgleich erstelt werden).
Sinn dieser Tabelle ist es, Programm-Variable-Inhalte für eventuell spätere
Programmausführungen zwischenzuspeichern.
Diese Inhalte werden dann bei einem späteren Programmfortsetzung wieder in die
entsprechende Variablen geladen.
Da sich jedoch der Name einer Rechnung beim abspeichern mit "Speichern unter"
verändert, ist es erforderlich den bisher benutzten Namen der Rechnung in der
"Tabelle der aktuell bearbeiteten Rechnungen" abzuändern in den neuen Namen dieser
Rechnung.
Ich habe bisher in VBA nur ein Ereignis "bevor Save" gefunden. ich brauchte aber ein
VBA-Ereignis "nach Save" um die oben beschriebene Funktion abzufangen.
um zu verdeutlichen was ich mit der Beschreibung gemeint habe, habe ich eine abgespeckte
Version der beiden Dateien beigefügt.
Die Dateien sollten laufen wenn diese im Verzeichnis C:\Forum gespeichert werden und die Name erhalten wie unten
Rechnungsvorlage.xlt für https://www.herber.de/bbs/user/65346.xlt
Rechnungsprogramm.xls für https://www.herber.de/bbs/user/65347.xls
vielen Dank
Bernd

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
mit Application.OnTime
26.10.2009 19:13:12
Tino
Hallo,
mit ...OnTime kannst Du nach dem Speichern ein Makro aufrufen.
Siehe auch in der Hilfe unter Application.OnTime nach.
Beispiel:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Code
Application.OnTime Now + TimeSerial(0, 0, 1), "NachSave"
End Sub
'in ein Modul ***************************************************************
Sub NachSave()
MsgBox "mach was"
End Sub
Gruß Tino
AW: mit Application.OnTime
26.10.2009 19:33:05
Aljerter
Hallo Tino,
das funktioniert
vielen Dank
Bernd
AW: mit Application.OnTime
27.10.2009 17:53:08
Aljerter
Hallo Tino,
war gestern mit meiner Antwort doch wohl etwas zu schnell und habe zu wenig getestet.
Dein Vorschlag funktioniert mal und auch wieder mal nicht.
Liegt wohl am Timer von TimeSerial(0, 0, 1) der abläuft, ohne dass die Datei bereits gespeichert ist.
Das kommt ja mal vor, wenn man z.B. zuerst ein neues Verzeichnis erstellen muß oder auch das Telefon ausgerechnet in dem Moment klingelt wenn man die Datei speichern will.
schön wäre es wenn es eine Möglichkeit gibt die ohne Einsatz von einem Timer funktioniert.
vielen Dank
Bernd
Anzeige
etwas habe ich noch auf Lager
27.10.2009 18:32:25
Tino
Hallo,
vielleicht geht es hiermit besser.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Static booCansel As Boolean

If Not booCansel Then
 Cancel = True 'speichern abbrechen 
 
 booCansel = True
    
    If SaveAsUI Then 'wurde speichern unter gewählt? 
        Application.Dialogs(xlDialogSaveAs).Show
    Else
        Me.Save
    End If
 
 Call MeinMakro 'Dein Makro nach speichern 
 
 booCansel = False
End If


End Sub
Gruß Tino
Anzeige
AW: etwas habe ich noch auf Lager
29.10.2009 17:26:35
Aljerter
Hallo Tino,
Dein Vorschlag funktioniert ganz gut, allerdings läuft das Programm in eine Schleife, wenn ich nach dem letzten Speichern und vor dem schließen meines Rechnungsformulars nochmals eine Änderung im Rechnungsformular durchführe.
Es kommt dann die Frage von Excel:
"sollen Ihre Änderungen gespeichert werden.
Ja / Nein / Abbrechen
wenn ich diese Frage mit Ja beantworte,
wird zunächst ein Speichervorgang durchgeführt, dann taucht allerdings diese Frage immer wieder auf. Das sollte ja nicht geschehen.
Anscheinend vermerkt sich Excel dann nichtmehr dass die Datei schon abgespeichert wurde.
Leider finde ich auch hier keinen Ausweg, vielleicht kannst Du mir nochmal helfen.
Vielen Dank
Bernd
Anzeige
verstehe ich jetzt nicht
29.10.2009 18:56:28
Tino
Hallo,
macht den Dein Code nach dem speichern eine Veränderung an der Datei?
Bei mir wird nach dem speichern dieses Makro ausgeführt und wenn ich keine
Änderung mehr machen wird auch nicht dieses Eventmakro Workbook_BeforeSave ausgelöst.
Gruß Tino
AW: verstehe ich jetzt nicht
30.10.2009 10:52:12
Aljerter
Hallo Tino,
der Code macht keine Veränderung in der Datei aber von Hand kann man ja eine Änderung in der Datei vornehmen.
Wenn man diese Datei aus Schusseligkeit vor dem Beenden nicht mochmals von Hand speichert, melde sich ja Excel mit der Frage ob die Änderungen in der Datei gespeichert werden sollen.
Diesen Vorgang meine ich
Gruß Bernd
Anzeige
Teste mal ob es so geht...
30.10.2009 16:51:54
Tino
Hallo,
habe den Code etwas umgestellt.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Static booCansel As Boolean

If Not booCansel Then
 booCansel = True

    If SaveAsUI Then 'wurde speichern unter gewählt? 
        Application.Dialogs(xlDialogSaveAs).Show
    Else
        Me.Save
    End If
    Call MeinMakro 'Dein Makro nach speichern 
 booCansel = False
End If

If Not booCansel Then Cancel = True: SaveAsUI = False 'speichern abbrechen 
End Sub
Gruß Tino
Anzeige
AW: Teste mal ob es so geht...
01.11.2009 14:32:58
Aljerter
Hallo Tino,
Das Umstellen des Codes hat auch nichts gebracht, deshalb habe ich gestern den ganzen
Tag getestet und Deinem Code noch eine Funktion und ein weiteres Makro hinzugefügt.
(hätte man vielleicht auch einfacher machen können, mir ist aber nichts besseres eingefallen.
Auf jedenfall hat diese Lösung das Schleifen-Problem bei einer ungespeicherten Datei beseitigt
und mein Programm läuft damit einwandfrei.
Vielen dank für Deine Hilfe
Bernd
-----------------------------------------------------------------
Public WB_schließen As Boolean
-----------------------------------------------------------------
Function Frage_Wkb_Save()
Frage_Wkb_Save = MsgBox("Workbook vor dem beenden speichern?", vbYesNoCancel)
End Function
-----------------------------------------------------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Static booCansel As Boolean
If booCansel = False Then
booCansel = True
If SaveAsUI Then
'                                       wurde speichern unter gewählt?
Application.Dialogs(xlDialogSaveAs).Show
Call NachSave 'Dein Makro nach speichern
ElseIf WB_schließen Then
'                                       wird in Workbook_BeforeClose gesetzt
Select Case Frage_Wkb_Save
Case vbYes
Me.Save
Case vbNo
Cancel = True
ThisWorkbook.Saved = True
Case vbCancel
Cancel = True
End Select
Else
Me.Save
End If
booCansel = False
End If
If booCansel = False Then Cancel = True: SaveAsUI = False
End Sub

-----------------------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
WB_schließen = True
'                                         wird in "Workbook_BeforeSave benötigt"
If ThisWorkbook.Saved = False Then
Workbook_BeforeSave False, False
'                                        aufruf von "Workbook_BeforeSave
End If
If ThisWorkbook.Saved = True Then
'                                       Fall 1: "Frage_Wkb_Save" mit Ja beantwortet
'                                                 "Workbook speichern und  schließen"
'                                                 (gespeichert wird unter Workbook_BeforeSave)
'                                       und
'                                       Fall 2: "Frage_Wkb_Save" mit nein beantwortet
'                                                  "Workbook ungespeichert  schließen"
Call MeinMakroWB_schließen
'                                       Makro zum schließen der Programm-Datei
ElseIf ThisWorkbook.Saved = False Then
'                                        Fall 3: "Frage_Wkb_Save" mit abbrechen beantwortet
'                                              "Workbook nicht speichern und nicht schließen"
WB_schließen = False
Cancel = True
End If
End Sub

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige