Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
800to804
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
800to804
800to804
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Eigene Abfrage ob Änderungen in Datei geschahen

Eigene Abfrage ob Änderungen in Datei geschahen
17.09.2006 13:57:26
Reinhard
Hallo Wissende,
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

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Eigene Abfrage ob Änderungen in Datei geschahen
17.09.2006 14:09:28
Horst
Hi,
"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."
Hier:

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

wird ja sch was geändert.
mfg Horst
AW: Eigene Abfrage ob Änderungen in Datei geschahe
17.09.2006 15:26:00
Reinhard
Hallo Horst,
danke für die schnelle Reaktion.
Ich habe den Code geändert, weiterhin die Sub "Beenden" auskommentiert. Wenn nun falsches PW kommt wird ja
...
ThisWorkbook.Save
Call Beenden
End Sub
"abgearbeitet". Trotz des Savebefehls und "leerer" Sub "Beenden" kommt die Änderungsabfrage.
Lösche ich hier den Savebefehl und schreibe ihn als letztes in ansonsten auskommentierte Sub "Beenden" kommt die Änderungsabfrage nicht.
D.h. für mich, ein Call-Aufruf ist eine Dateiänderung!?
nklar ist mir immernoch wie ich abfragen ob der Benutzer Änderungen vornahm, Worksheet_Change erfasst ja nicht Optionsumstellungen, Schriftartwechesl o.ä.
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
ThisWorkbook.Save
Call Beenden
End Sub

Gruß
Reinhard
Anzeige
AW: Eigene Abfrage ob Änderungen in Datei geschahe
17.09.2006 15:41:16
Stefan
Hallo Reinhard,
Probier mal die "Saved" Eigenschaft des Workbook Objektes aus (nicht zu verwechseln mit "Save") und schau ob das immer dann funktioniert wenn Du es brauchst.
Schoene Gruesse
Stefan
AW: Eigene Abfrage ob Änderungen in Datei geschahe
17.09.2006 15:45:09
Reinhard
Hallo Stefan,
sieht sehr gut aus. Schade dass MS das "Saved" nicht im Index der VBA-Hilfe listet (bei XL2000) und mit dem Objektkatalog bin ich nicht so vertraut.
Danke ^ Gruß
Reinhard

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige