PDA

Vollständige Version anzeigen : AfterSave


JD124578963
17.07.2012, 12:55
Hallo,

ich weiß es gibt kein AfterSave-Event :) , aber ich weiß nicht wie ich trotzdem nach dem speichern ein makro ausführen lassen kann.

Ich möchte vor dem speichern verschiedene sheets ausblenden lassen.

also ich hab das jetzt so:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.ScreenUpdating = False
Sheets("Makros_deaktiviert").Visible = True
For InI = Sheets.Count To 2 Step -1
If Not Sheets(InI).Name = "Makros_deaktiviert" Then
Sheets(InI).Visible = False
End If
Next InI
Application.ScreenUpdating = True
End Sub

nun möchte ich nach dem speichern, die zuvor geöffneten sheets wieder eingeblendet haben.
Kennt ihr da eine Möglichkeit?

IngGi
17.07.2012, 13:19
Hallo,

anstatt die Arbeitsmappe mit ausgeblendeten Sheets zu speichern, könntest du die Sheets beim Öffnen der Arbeitsmappe ausblenden. Das hätte denselben Effekt und würde das Problem umgehen.

Gruß Ingolf

JD124578963
17.07.2012, 13:54
Also der Sinn dahinter ist der das beim Öffnen der Datei die Makros aktiviert werden müssen, damit die Arbeitsblätter eingeblendet werden.

Beim schließen werden dann die Arbeitsblätter wieder ausgeblendet und die Tabelle wo drin steht das die Makros aktiviert werden müssen ist eingeblendet.

Das funktioniert auch so weit.

nun gibt es aber noch den Fall, das es zwischendurch gespeichert wird, so wird zwar am ende die arbeitsblätter wieder ausgeblendet, diese sind beim öffnen der datei aber immer noch da.
Damit ich das umgehe will ich halt jeweils vorm speichern die arbeitsblätter ausblenden und nacher wieder einblenden.

EarlFred
17.07.2012, 13:55
Hallo Name?,

meine Variante wäre das Ereignis Workbook_BeforeClose, bei dem die Blätter ausgeblendet werden und danach nochmals gespeichert wird.

"Sicher" ist das Vorgehen ohnehin nicht - eher als eine "Gedankenstütze" brauchbar.

Grüße
EarlFred

JD124578963
17.07.2012, 13:57
Das möchte ich auch nicht unbedingt, damit der anwender falls er sch** baut noch die möglichkeit hat das Dokument zu schließen ohne das es automatisch speichert.

Ich weiß kompliziert :S

Grüße,
JD

EarlFred
17.07.2012, 14:00
-hat sich wohl erledigt, s. u.-

JD124578963
17.07.2012, 14:19
Ich hab jetzt ne Lösung gefunden:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.EnableEvents = False
Application.ScreenUpdating = False
Sheets("Makros_deaktiviert").Visible = True
For InI = Sheets.Count To 1 Step -1
If Not Sheets(InI).Name = "Makros_deaktiviert" Then
Sheets(InI).Visible = xlVeryHidden
End If
Next InI
Me.Save
Application.EnableEvents = True
' mein Code zum einblenden
ActiveWorkbook.Saved = True


Cancel = True

End Sub

JD124578963
20.07.2012, 11:26
Ich hab jetzt ein Problem entdeckt, wenn ich die Arbeitsmappe schließe und dann bei der Abfrage ob ich speichern möchte auf "JA" klicke, wird der Dialog immer wieder aufgerufen bis ich auf "Abbrechen" klicke. Hat jemand eine Idee wie ich das lösen kann?

Hier ist noch einmal der Code der Arbeitsmappe:
Dim InI As Integer 'Zählvariable für die Sheets

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.EnableEvents = False
Application.ScreenUpdating = False
Sheets("Makros_deaktiviert").Visible = True
For InI = Sheets.Count To 1 Step -1
If Not Sheets(InI).Name = "Makros_deaktiviert" Then
Sheets(InI).Visible = xlVeryHidden
End If
Next InI

Me.Save
Application.EnableEvents = True
' richtige Tabellen einblenden

For InI = Sheets.Count To 1 Step -1
'Ändern von xlVeryHidden nach hidden
Next InI

ActiveWorkbook.Saved = True
Cancel = True
Application.ScreenUpdating = True
End Sub




Private Sub Workbook_Open()

' aktualisierung Bildschirm aus
Application.ScreenUpdating = False
' richtige Tabellen einblenden

For InI = Sheets.Count To 1 Step -1
'Ändern von xlVeryHidden nach hidden

Next InI

' Tabelle mit Hinweis ausblenden
Sheets("Makros_deaktiviert").Visible = False
' Schalter Veränderung der Datei zurückstellen
' Damit das einblenden der Register nicht als Veränderung der Datei angesehen wird
ActiveWorkbook.Saved = True
'aktualisierung Bildschirm ein
Application.ScreenUpdating = True
End Sub