die Datei https://www.herber.de/bbs/user/36738.xls
hat den nachfogenden Code.
Wenn man die Datei schließt kommt bei aktivierten Makro die Abfrage nach
Speicherung der Änderungen. Dies soll auch so sein wenn in der Datei etwas
geändert wurd.
Ich würde aber gern bei Start der Sub "Beenden" abfragen ob an der datei etwas
geändert wurde um dann aufgrund dieser Information am Ende der "Beenden"-Routine
wie in "Starten" ein ":Save" einbauen um die Abfrage zu unterdrücken.
Wie frage ich ab ob an/in der Datei etwas geändert wurde?
Also sowas wie ChangeStatus, SaveModus o.ä.
Danke ^ Gruß
Reinhard
In DieseArbeitsmappe:
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call Beenden
End Sub
Private Sub Workbook_Open()
Dim Eingabe
With Worksheets("Tabelle3")
.Unprotect "xyz"
.UsedRange.Clear
.Protect "xyz"
End With
Eingabe = InputBox("Bitte Passwort eingeben: ")
If Eingabe = "xyz" Then
Call Starten
Exit Sub
End If
Call Beenden
End Sub
In einem Modul:
Option Explicit
Sub Starten()
Dim Ws As Worksheet, N As Integer, Vorhanden As Boolean
With ThisWorkbook
For N = 1 To .CustomDocumentProperties.Count
If .CustomDocumentProperties(N).Name = "LetztesAktivesBlatt" Then Vorhanden = True
Next N
If Vorhanden = False Then
.CustomDocumentProperties.Add Name:="LetztesAktivesBlatt", Type:=msoPropertyTypeString, LinkToContent:=False, Value:=.Worksheets(1).Name
If .CustomDocumentProperties("LetztesAktivesBlatt").Value = "Tabelle3" Then
.CustomDocumentProperties("LetztesAktivesBlatt").Value = .Worksheets(2).Name
End If
End If
.Unprotect "xyz"
For Each Ws In .Worksheets
If Ws.Name <> "Tabelle3" Then Ws.Visible = True
Next Ws
.Worksheets("Tabelle3").Visible = xlVeryHidden
.Worksheets(.CustomDocumentProperties("LetztesAktivesBlatt").Value).Activate
.Save
End With
End Sub
Sub Beenden()
Dim Ws As Worksheet
Application.ScreenUpdating = False
With ThisWorkbook
.Unprotect "xyz"
With .Worksheets("Tabelle3")
.Visible = True
.Unprotect "xyz"
.Range("b10") = "Information:"
.Range("b12") = "Sie haben diese Arbeitsmappe mit deaktivierten Makros gestartet oder das Passwort falsch eingegeben."
.Range("b14") = "Schliessen Sie die Arbeitsmappe, danach starten Sie sie neu mit aktivierten Makros und Sie gelangen zur Passwortabfrage."
.Range("b16") = "Bei korrekter Eingabe des Passwortes stehen Ihnen alle anderen Tabellenblätter dieser Arbeitsmappe zur Verfügung."
.Protect "xyz"
End With
.CustomDocumentProperties("LetztesAktivesBlatt").Value = ActiveSheet.Name
For Each Ws In .Worksheets
If Ws.Name <> "Tabelle3" Then Ws.Visible = xlVeryHidden
Next Ws
.Protect "xyz"
End With
Application.ScreenUpdating = True
End Sub
Gruß
Reinhard