Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
416to420
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
416to420
416to420
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Änderungen verwerfen, Worksheet_Deactivate

Änderungen verwerfen, Worksheet_Deactivate
Fritz
Liebe Helfer,
nach einer Excel-lenten-Nacht habe ich gelernt: Je tiefer man einsteigt, um so weniger weiß man.
Wenn in einem bestimmten Bereich – „$G$33:$L$39“ – mehrere Änderungen vorgenommen wurden, startet nach Verlassen dieses Bereichs ein Makro nach vbYes der MsgBox „Wollen Sie das wirklich?“ oder so. Bis hierher bin ich schon mächtig stolz auf mich.
Bei vbNo sollen die Änderungen in dem o.a. Bereich verworfen und der alte Zustand wieder hergestellt werden. Hier verlassen Sie mich.
Zweites Problem:
Wenn der Anwender zwar Änderungen in dem o.g. Bereich vorgenommen hat, aber ohne den Bereich zu verlassen auf ein anderes Tabellenblatt wechselt, passiert nix.
Frage: Wie kriege ich den Anwender dazu, bei mir zu verharren, bis er sich entschieden hat?
Wie immer sehr dankbar für Unterstützung wäre
Fritz
Der Code, soweit ich ihn fertig habe (natürlich auch schmarotzt von H. Herbers CD)
Dim Schalter As Boolean

Private Sub Worksheet_SelectionChange _
(ByVal Target As Excel.Range)
Application.ScreenUpdating = False
Dim Bereich As Range
' Objektvariable für die relevante Zelle setzen
Set Bereich = Range("$G$33:$L$39")
' wenn die aktuelle Zelle die relevante
' Zelle ist, dann Schalter auf Wahr stellen
If Not Intersect(Target, Bereich) Is Nothing _
Then Schalter = True
' Wenn der Schalter auf Wahr steht und die aktuelle
' Zelle nicht die relevante Zelle ist, dann
Automatische_Speicherung_Aus
If Schalter = True And Intersect(Target, Bereich) _
Is Nothing Then
MsgBox "Sie haben Veränderungen vorgenommen" & Chr(13) & "Sollen diese Änderungen verarbeitet werden?", vbYesNo
If vbYes Then
MsgBox "Die Verarbeitung wird einige Sekunden in Anspruch nehmen" & Chr(13) & "Klicken Sie auf ""OK"""
MsgBox "Hier liefe jetrzt das Makro"
' Schalter auf Falsch setzen
Schalter = False
End If
End If
Automatische_Speicherung_Ein
Application.ScreenUpdating = True
End Sub

P.S. an joel: Nach weniger Grübelei als zunächst vermutet habe ich Deinen code so für mich zurecht gebastelt, dass er sich hübsch einfügt. Nochmals überschäumenden Dank.
Fritz

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

Betreff
Benutzer
Anzeige
AW: Änderungen verwerfen, Worksheet_Deactivate
24.04.2004 16:14:44
Matthias
Hallo Fritz,
so als Anregung:
solange Änderungen noch nicht bestätigt sind, eine globale Variable auf True setzen.
Im Ereignis Sheet_Deactivate prüfen, ob Variable True ist.
Wenn ja, dein gewünschtes Blatt einfach wieder aktivieren. Flackert kurz, aber sonst ganz funktionell.
Gruß Matthias
AW: Änderungen verwerfen, Worksheet_Deactivate
Fritz
Hallo, Matthias.
Ich und die Variablen, das ist so wie Fisch in Bier, statt Wasser. Macht besoffen, ist aber nicht lebenstauglich.
Ich probiere das, lasse den thread aber zur Sicherheit noch offen.
Hab schönen Dank für die Anregung, weiß ich, wo ich weter machen muss.
Grüße, Fritz
Anzeige
So etwa?
Fritz
Hallo Matthias,
Der Stift bittet um Überprüfung und Bewertung. War gar nicht schlimm.
Soweit ich das probiert habe, funzt es.
Dim VerlassMichNicht As Boolean

Private Sub Worksheet_Deactivate()
If VerlassMichNicht = True Then Sheets("Start").Activate
End Sub


Private Sub Worksheet_SelectionChange _
(ByVal Target As Excel.Range)
Application.ScreenUpdating = False
Dim Bereich As Range
VerlassMichNicht = True
' Objektvariable für die relevante Zelle setzen
Set Bereich = Range("$G$33:$L$39")
' wenn die aktuelle Zelle die relevante
' Zelle ist, dann Schalter auf Wahr stellen
If Not Intersect(Target, Bereich) Is Nothing _
Then Schalter = True
' Wenn der Schalter auf Wahr steht und die aktuelle
' Zelle nicht die relevante Zelle ist, dann
Automatische_Speicherung_Aus
If Schalter = True And Intersect(Target, Bereich) _
Is Nothing Then
MsgBox "Sie haben Veränderungen vorgenommen" & Chr(13) & "Sollen diese Änderungen verarbeitet werden?", vbYesNo
If vbYes Then
MsgBox "Die Verarbeitung wird einige Sekunden in Anspruch nehmen" & Chr(13) & "Klicken Sie auf ""OK"""
MsgBox "Hier liefe jetzt das Makro"
VerlassMichNicht = False
' Schalter auf Falsch setzen
Schalter = False
End If
End If
Automatische_Speicherung_Ein
Application.ScreenUpdating = True
End Sub

Danke,
Grüße, Fritz
Anzeige
AW: Ja, wenn's so klappt... - o.T.
24.04.2004 17:02:41
Matthias
-

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige