Hi zusammen,
ich habe in meinem Projekt Code, der das einfache Schließen verhindert. Stattdessen wird ein Sub gestartet, wo abgefragt wird, ob geschlossen werden soll und dann eine Sicherungskopie erstellt. Erst dann kann das Programm geschlossen werden.
Wenn ich das Workbook schließe, wird NACH dem Schließen ein Dialogfeld angezeigt, wo das Passwort für mein VBA-Projekt abgefragt wird. Bei Abbruch des Dialogs schließt sich der Dialog, ich würde das aber gerne gar nicht erst angezeigt bekommen. Dies tritt nur auf, wenn ich vorher NICHT im VBA-Editor war und mein Passwort eingegeben habe.
Hier mal der Code mit erklärenden Anmerkungen:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If schliessenerlaubt = False Then Call schliessen 'schliessenerlaubt wird beim Öffnen des Workbooks auf false gesetzt
Cancel = Not schliessenerlaubt
End Sub
Private Sub schliessen()
Dim dateiname As String
dateiname = Application.DefaultFilePath & "\Sicherungskopie.xlsm"
Application.DisplayAlerts = False
If MsgBox("Sind Sie sicher dass Sie das Programm schließen möchten?", vbYesNo) = vbYes Then
Application.Run "DashboardOff" 'Startet ein Sub, das alle Leisten (vorher ausgeblendet) wieder einblendet
TurnOff = True 'Variable für DashboardOff
ThisWorkbook.Save 'Speichern
ThisWorkbook.SaveCopyAs dateiname 'Sicherungskopie speichern
schliessenerlaubt = True
If Application.Workbooks.Count = 1 Then 'Abfrage ob noch andere Workbooks geöffnet sind
Application.Quit 'wenn nur mein Workbook offen ist, wird Excel geschlossen
Else
ActiveWorkbook.Close 'Wenn weitere Workbooks offen sind, wird nur mein Workbook geschlossen
End If
Else: schliessenerlaubt = False 'Abbruch wenn schließen nicht erwünscht
Exit Sub
End If
End Sub
Mein Verdacht ist, dass es mit der Funktion Dashboardoff zusammenhängt, die eventuell noch versucht, Code zu verwenden, wenn das Workbook bereits geschlossen ist. Hier auch noch der Code für die Funktion (steht in einem Standardmodul).
Leider muss ich gestehen dass ich die Funktion aus einem anderen Forum genommen habe und nicht alle Funktionalitäten komplett verstehe.
Option Explicit
Public TurnOff As Boolean
Private Sub DashboardOn()
With Application
.ScreenUpdating = False
If ActiveWorkbook.name = ThisWorkbook.name Then ' Change sheet name to fit your needs
TurnOff = False
With ActiveWindow
.DisplayHeadings = False ' Remove Heading
.DisplayWorkbookTabs = False ' Remove Tabs
End With
.DisplayFullScreen = True ' Force fullscreen
.ExecuteExcel4Macro "Show.ToolBar(""Ribbon"", False)" ' Force the ribbon not to show
Else: Application.Run "DashboardOff" ' Another sheet is chosen so return everything to normal
End If
.ScreenUpdating = True
DoEvents
If TurnOff = False Then .OnTime Now() + TimeValue("00:00:01"), "DashboardOn"
End With
End Sub
Private Sub DashboardOff()
' Return items back on and restore screen to original size
TurnOff = True
With Application
.ScreenUpdating = False
.DisplayFullScreen = False
.ExecuteExcel4Macro "Show.ToolBar(""Ribbon"", True)"
End With
Windows(1).WindowState = xlMaximized
With ActiveWindow
.DisplayHeadings = True
.DisplayWorkbookTabs = True
End With
End Sub
Hat jemand eine Idee womit es zusammenhängen könnte dass der Dialog aufgeht?
Danke schonmal für eure Hilfe.
Grüße
Jonas
|