workbook_BeforeSave Frage

Moin Leute,

ich möchte, bevor meine Exceldatei gespeichert wird, noch Anpassungen in gewissen Zellen durchführt.

Nachdem ich recheriert habe, wurde ich auf die Funktion workbook_BeforeSave aufmerksam. Diese wollte ich in „DieseArbeitsmappe“ einfügen.

Jetzt wollte ich das ganz einfach folgender maßen gestalten:

Sub workbook_BeforeSave()

'Code()

End Sub

–> Er sagt aber gleich, dass ein Fehler beim kompilieren entstanden ist. Also meine Sub ist gleich falsch.

Muss ich bei Sub workbook_BeforeSave() noch was in die Klammern oder so rein setzen?

Danke und viele Grüße
W3lcome

Muss ich bei Sub workbook_BeforeSave() noch was in die
Klammern oder so rein setzen?

Hallo W3lcome,

das schreibe ich nie hin. Glaub andere auch nie.

Das gilt jetzt für Module DieseArbeitsmappe und Tabelle1 usw. gleichermaßen.

Gehe mit Alt+F11 in den Editor, doppelklicke auf das Modul wohin du willst.
Dort hast du oben in der Mitte eine Auswahl (Pfeil daneben)
Klicke darauf dann wählst du je nachdem wo du grad bist Workbook oder Worksheet.

Daraufhin bringt dir der Editor gleich eine der möglichen Ereigniscode-Rümpfe.

Rechtsoben ist auch so ein Feld, klicke darauf, dann siehst du alle anderen Ereignisse, da wählst du BeforeSave aus, das war’s.

Gruß
Reinhard

Hallo,

von VBA habe ich keine Ahnung, aber Dein Problem scheint grundsätzlicher Art zu sein.

Sub workbook_BeforeSave()

'Code()

Was deutet die Klammer hinter ‚Code‘ an? Steht da eine Prozedur?
Eine Prozedur in einer Prozedur geht nicht.

End Sub

–> Er sagt aber gleich, dass ein Fehler beim kompilieren
entstanden ist. Also meine Sub ist gleich falsch.

Keine Ahnung, Du zeigst sie ja nicht.

Muss ich bei Sub workbook_BeforeSave() noch was in die
Klammern oder so rein setzen?

Nein, da darf nichts in die Klammer.

In die Klammer kommen Parameter, die der Prozedur übergeben werden sollen. Steht da etwas, z.B.:

Private Sub Test(byval Text As String)

End Sub

Muss die Prozedur mit:

Test „Testtext“

Aufgerufen werden, sonst bemängelt VB den fehlenden Parameter.
An

Sub workbook_BeforeSave()

übergibt der Eventhandler aber keine Parameter.
Wenn Du nun welche anforderst, führt das zu einem Fehler.

Gruß Rainer

Hallo Rainer.

Der Prozedur-Rumpf sieht folgendermaßen aus (Vorgabe in Excel-VBA):

Private Sub Workbook\_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub

Wofür SaveAsUI ist, kann ich nicht genau sagen; das hab’ ich noch nie benutzt, aber wahrscheinlich wird der Dialog „Speichern unter“ angezeigt, wenn man den Wert auf True setzt.
Wenn Du Cancel auf True setzt, dann wird das Speichern abgebrochen.

VG
Carsten

Hi Carstan,

Der Prozedur-Rumpf sieht folgendermaßen aus (Vorgabe in
Excel-VBA):

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

End Sub

Ahh, ich dachte, das im UP wäre aus Excel kopiert …

Danke!

Wofür SaveAsUI ist, kann ich nicht genau sagen; das hab’ ich
noch nie benutzt, aber wahrscheinlich wird der Dialog
„Speichern unter“ angezeigt, wenn man den Wert auf True setzt.

Sieht so aus.

Wenn Du Cancel auf True setzt, dann wird das Speichern
abgebrochen.

Ja, das ist in VB6 auch so.

Gruß Rainer

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

Ahh, ich dachte, das im UP wäre aus Excel kopiert …

Hallo Rainer, Carsten,

ohne Manipulation sehen alle Ereignisprozeduren in Excel so aus wie oben. Die allermeisten haben parameter/argumente einige wenige halt auch nicht.

Das SaveASUI ist nur True/False, das abhängig davon ob man in Excel ausgewählt hat "Speichern " oder „Speichern als…“.

Und da die Module DieseArbeitsmappe und alle Module Tabelle1 usw. schlichtweg nur Klassenmodule sind, also ich könnte das nur durch Tests rausfinden, kann jeder Klassenmodulauskenner sicher sagen inwieweit man den Ereigniscodeaufruf
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel As Boolean)
„verstümmeln“ also Private weglassen, eher harmlos, parameter umbenennen usw. und sie trotzdem noch auf Ereignisse reagieren.

Was m.E. eisern fest ist ist „Workbook_BeforeSave“, Sub ist notwendig, Private unwichtig, die parameteranzahl auch, deren namen nicht *denk*

Wenn es dann noch klappt, den datentyp Boolean umzutaufen und man alles macht wirds verdammt schwierig noch zu erkennen daß dies mal
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel As Boolean)
war :smile:

Gruß
Reinhard

Moin,

nach weiterem rumprobieren hatte ich auch die gleiche Lösung. Trotzdem danke für Eure Hilfe!

Viele Grüße
W3lcome