Registriert seit: 23.08.2018
Version(en): 2007
Hallo zusammen,
nach einiger vergeblicher Forschungsarbeit muss ich nun doch Euch "quälen":
Ich habe in einer Datei (xlsm) nur eine Tabelle und dort in Zelle A1 einen Wert (Integer).
Nun möchte ich bei einem Change-Ereignis der Zelle Code ausführen, aber nur, wenn der Zellwert sich verändert.
Über Change habe ich keine Option gefunden (vorher-nachher-Vergleich), also will ich nun über Workbook_Open den Zellwert in eine Variable lesen und diese beim Change-Ereignis vergleichen.
Bsp:
A1 = 10 beim Öffnen
A1 = 11 nach Change => Code ausführen
A1 = 10 nach Change => nichts tun
Code-Ansatz:
Public Prot_Org As Integer
Workbook_Open
Prot_org = Worksheets(1).Cells(1, 1).Value
End Sub
und dann in einer Privat_Sub WS_Change den Target-Wert mit der Variable vergleichen
Danke schon vorab für Hilfe/Tipps.
Registriert seit: 28.05.2017
Version(en): 365
19.10.2019, 18:29
(Dieser Beitrag wurde zuletzt bearbeitet: 19.10.2019, 18:30 von EasY.)
Hi,
So eine Überwachung eine Zelle macht man am besten mit dem worksheet_change Ereignis. Innerhalb der Prozedur fragst du mittels if target.address =" A1" then ab, ob die entsprechende Zelle verändert wurde... Was dann passieren soll stellst du nach dem then rein.
Gruß
Registriert seit: 23.08.2018
Version(en): 2007
Danke vorab, aber genau das ist ja das Problem.
Wenn ich NACH dem Change-Ereignis abfrage, habe ich den Wert der Zelle davor nicht mehr.
Inhalt der Zelle VOR Change = 10
Nach Change ist es entweder 11 oder auch 10, in beiden Fällen habe ich ja ein Change-Ereignis
Aber eben NICHT mehr die 10 vorher.
=> ich kann eine reale Änderung nicht weiter im Code vergleichen.
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo,
' **************************************************************
' Modul: DieseArbeitsmappe Typ = Element der Mappe(Sheet, Workbook, ...)
' **************************************************************
Option Explicit
Private Sub Workbook_Open()
varTemp = Worksheets(1).Cells(1, 1).Value
End Sub
' **************************************************************
' Modul: Tabelle1 Typ = Element der Mappe(Sheet, Workbook, ...)
' **************************************************************
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
If Target.Value <> varTemp Then
varTemp = Target.Value
MsgBox "Wert hat sich geändert."
End If
End If
End Sub
' **************************************************************
' Modul: Modul1 Typ = Allgemeines Modul
' **************************************************************
Option Explicit
Public varTemp As Variant
Gruß Uwe
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• opa_oli
Registriert seit: 23.08.2018
Version(en): 2007
Hallo Uwe,
auch Dir Danke.
Dein Code weicht von meinem nur unwesentlich ab. Problem ist, dass offenbar die Variable im WB_Open nicht belegt wird und dadurch beim Change-Ereignis der Vergleich immer fehl läuft.
Unter "DieseArbeitsmappe" steht
Code:
Option Explicit
Public varTemp As String
Private Sub Workbook_Open()
' Application.EnableEvents = False
varTemp = Worksheets(1).Cells(1, 1).Value
' Application.EnableEvents = True
End Sub
und unter "Tabelle1" steht
Code:
Option Explicit
Public varTemp As String
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
If Target.Value = varTemp Then
Stop
Else
Stop '2.Stop
End If
End If
End Sub
Der Code stoppt nach Öffnen der Datei und Ändern der Zelle A1 beim 2. Stop und varTemp ist Leer.
Vielleicht hilft das noch als weitere Eingrenzung.
Danke.
Oliver
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Oliver
(19.10.2019, 19:52)opa_oli schrieb: Dein Code weicht von meinem nur unwesentlich ab.
tja, manchmal macht es eben der kleine Unterschied aus.
Gruß Uwe
Registriert seit: 23.08.2018
Version(en): 2007
o.k., ich hätte es besser formulieren müssen:
Auch Dein Code klappt nicht, deswegen habe ich meinen nochmals gepostet und auch, wo er steht. :22:
Wenn ich es durchlaufen lasse und nach dem Öffnen die Zelle A1 verändere, ist im Folgecode (also im Change-Ereignis)
varTemp =""
Ich weiß aber nicht, wie ich es besser formulieren soll.
Aus irgendeinem Grund klappt die Übergabe der Variablen bzw. des Inhalts aus der WB_Open an das WS_Change nicht.
Höher als Public kann man doch nicht deklarieren, oder?
Nochmals Grüße
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Moin!
Ich habe im anderen Thread (unangekündigtes Crossposting in MS-Office-Forum.Net) geantwortet, wo eine Public-Variable hingehört!
https://www.ms-office-forum.net/forum/sh...p?t=363193
Uwe hat das hier auch gemacht, unser Opa hat das aber nicht verstanden …
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 2 Nutzer sagen Danke an RPP63 für diesen Beitrag:2 Nutzer sagen Danke an RPP63 für diesen Beitrag 28
• Storax, opa_oli
Registriert seit: 23.08.2018
Version(en): 2007
20.10.2019, 10:55
(Dieser Beitrag wurde zuletzt bearbeitet: 20.10.2019, 10:57 von opa_oli.)
JETZT hat es der Opa verstanden
Hallo Ralf,
1. Sorry wegen der fehlenden Ankündigung. War wohl zu spät am Abend. Ich gelobe Besserung
2. Ja, der Opa hatte es tatsächlich nicht verstanden - aber aufgrund Deiner Hilfe hat es nun geklappt
Opa_Oli