folgenden Code in das Modul der Tabelle:
Gruß
Peter
Wie sieht das ganze dann aus?
das Ganze LÄUFT ständig im Hintergrund. Im VBA-Editor Doppelklick auf die Tabelle, in der der Code arbeiten soll (also Tabelle1, Tabelle2 oder wie Deine Tabelle sonst heißt) und in dieses Modul eintragen (nicht in ein Standardmodul).
Gruß
Peter
leider nicht ganz :-(
Wenn der Zellwert eine Verknüpfung auf eine andere Zelle oder eine andere Tabelle ist, wird keine Aktion ausgelöst.
Die Aktion wird nur bei "Change", als wenn der Zellinhalt verändert wird, ausgelöst. Dieser, nämlich die Formel, wird aber gar nicht verändert.
Workaround:
Aufwändig aber tut:
Mit Application.OnTime in regelmässigen Abständen den Zellwert abfragen und in eine globale Variable schreiben. Dann kannst du den Zellwert mit der Variable vergleichen und bei Änderungen informieren.
Gruss Rainer
Danke für den Hinweis!
Gruß
Peter
Kann man das vielleicht so machen, das ich den Wert aus Zelle A1 in Zelle B1 geschrieben wird und Zelle B1 auf Veränderungen überwacht wird? Allerdings brauche ich ne Schleife, die die veränderungen von A1 nach B1 übernimmt...
Oder wie geht das mit Application.OnTime und in eine globale Variable schreiben, z.b. alle 15 Sekunden auf Veränderungen überprüfen. Bräuchte evtl. mal ein Beispiel-Script!!!
wie Rainer schon schrieb, ziemlich aufwändig. Gib in der Recherche als Suchbegriff mal OnTime ein und folge der zweiten und vierten Fundstelle.
Gruß
Peter
dieser Code überprüft jede Minute, zu definieren unter OnTime, ob der Wert sich geändert hat.
'In ein Modul'In das Klassenmodul "Diese Arbeitsmappe"
Code eingefügt mit Syntaxhighlighter 1.14
Private Sub Workbook_Open()
'Start der Control-Routine
Ctrl_Each_Minute
End Sub
Public CtrlValue, Mldg As Long
Sub Control_each_Minute()
'Variablen erstellen
Dim Qe As Integer
Dim Msg As String, wks As String, myCell As String
'Variablen vorbereiten
Msg = ""
wks = "Tabelle1" 'Tabelle in welcher der Wert steht
myCell = "A1" 'Zelle die geprüft werden soll
'Beim ersten Start muss die Variable geprüft und gefüllt werden
If IsEmpty(CtrlValue) Then
CtrlValue = Worksheets(wks).Range(myCell)
Mldg = 0
End If
'Start für die nächste Kontrolle
Application.OnTime Now() + TimeValue("00:01:00"), "control_each_Minute"
'Meldung wenn der Wert geändert wurde
If Worksheets(wks).Range(myCell) <> CtrlValue Then
Msg = "Der Kontrollwert " & CtrlValue & " hat sich geändert." & Chr$(13)
Msg = Msg & "Möchten Sie den neuen Wert " & Worksheets(wks).Range(myCell) & " als Kontrollwert übernehmen ?"
If Mldg > 0 Then
Qe = MsgBox(Msg, vbCritical + vbYesNo + vbDefaultButton1, "ACHTUNG: " & Mldg & ". ÄÄnderungsinformation")
If Qe = 6 Then
'Übernahme des neuen Wertes als Control wert
CtrlValue = Worksheets(wks).Range(myCell)
'Zurücksetzen des Counters
Mldg = 0
Exit Sub
End If
'Aufaddieren des Counters
Mldg = Mldg + 1
Else
Qe = MsgBox(Msg, vbCritical + vbYesNo + vbDefaultButton1, "ACHTUNG: ÄÄnderungsinformation")
If Qe = 6 Then
'Übernahme des neuen Wertes als Control wert
CtrlValue = Worksheets(wks).Range(myCell)
'Zurücksetzen des Counters
Mldg = 0
Exit Sub
End If
'Aufaddieren des Counters
Mldg = Mldg + 1
End If
End If
End Sub
Gruss Rainer
Wo setze ich denn einen Startbutton hin, mit dem ich durch anklicken bestimmen kann, das ab dann jede Minute geprüft werden soll?
Wo kommt der Stopbutton hin?
Um eine Zelle in Excel mithilfe von VBA zu überwachen und automatisch eine Aktion auszulösen, wenn sich der Wert ändert, kannst du folgende Schritte befolgen:
ALT + F11, um den VBA-Editor zu öffnen.Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("A1")) Is Nothing Then
Me.Range("A2").Value = "Hallo"
End If
End Sub
Fehler: Es passiert nichts, wenn sich der Wert in Zelle A1 ändert.
Fehler: Änderungsaktionen werden nicht bei DDE-Verbindungen erkannt.
Application.OnTime Befehl, um den Zellwert regelmäßig abzufragen.Eine Alternative zur Überwachung von Zellenänderungen ist die Verwendung von Application.OnTime, um den Zellwert in regelmäßigen Abständen zu überprüfen. Hier ein Beispiel:
Public CtrlValue As Variant
Sub StartMonitoring()
CtrlValue = Range("A1").Value
Application.OnTime Now + TimeValue("00:01:00"), "CheckCell"
End Sub
Sub CheckCell()
If Range("A1").Value <> CtrlValue Then
MsgBox "Der Wert in A1 hat sich geändert!"
CtrlValue = Range("A1").Value
End If
Application.OnTime Now + TimeValue("00:01:00"), "CheckCell"
End Sub
Um die Überwachung zu starten, rufe StartMonitoring auf.
Ein Beispiel für ein vollständiges Script, das alle 15 Sekunden den Wert in Zelle A1 überprüft und bei Änderungen eine Nachricht anzeigt:
Public CtrlValue As Variant
Public Mldg As Long
Sub StartMonitoring()
CtrlValue = Range("A1").Value
Mldg = 0
Application.OnTime Now + TimeValue("00:00:15"), "CheckCell"
End Sub
Sub CheckCell()
If Range("A1").Value <> CtrlValue Then
MsgBox "Der Wert in A1 hat sich geändert!"
CtrlValue = Range("A1").Value
Mldg = 0
Else
Mldg = Mldg + 1
End If
Application.OnTime Now + TimeValue("00:00:15"), "CheckCell"
End Sub
Worksheet_Change, um spezifische Zellen zu überwachen, und nutze Application.OnTime, um periodische Überprüfungen durchzuführen, besonders bei DDE-Verbindungen.1. Wie kann ich die Überwachung stoppen?
Du kannst die Application.OnTime Methode verwenden, um die geplante Subroutine zu stoppen, indem du eine neue Methode implementierst, die die geplante Überwachung löscht.
2. Funktioniert dieser Code in Excel 2016? Ja, dieser VBA-Code sollte in Excel 2016 und anderen Versionen, die VBA unterstützen, funktionieren. Achte jedoch darauf, dass Makros aktiviert sind.