Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Wenn Zelle sich ändert, dann...

Forumthread: VBA: Wenn Zelle sich ändert, dann...

VBA: Wenn Zelle sich ändert, dann...
01.11.2002 19:52:34
Andi
Suche eine VBA-Anweisung, die mir dabei hilft, das wenn sich z.b. Zelle a1 ändert in zelle a2 "hallo" geschrieben wird.
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: VBA: Wenn Zelle sich ändert, dann...
01.11.2002 19:59:39
PeterW
Hallo Andi,

folgenden Code in das Modul der Tabelle:

Gruß
Peter

Re: VBA: Wenn Zelle sich ändert, dann...
01.11.2002 20:23:25
Andi
Kann man darum auch eine Schleife binden, ohne dass sich der Compi sozusagen aufhängt? Meine das so, daß das sub im Hintergrund läuft und die Zelle A1 ständig und automatisch auf Veränderungen überwacht.

Wie sieht das ganze dann aus?



Anzeige
Re: VBA: Wenn Zelle sich ändert, dann...
01.11.2002 20:26:39
PeterW
Hallo Andi,

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

Info
01.11.2002 20:36:07
Ramses
Hallo 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

Anzeige
Re: Info
01.11.2002 20:38:51
PeterW
Hallo Rainer,

Danke für den Hinweis!

Gruß
Peter

Re: Info
01.11.2002 22:35:10
Andi
Irgendwie hab ich noch ein Problem: Zelle A1 wird durch eine DDE-Verbindung automatisch erneuert. Leider werden da keine Veränderungen angezeigt (wie schon von Rainer angemerkt).

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!!!

Anzeige
Re: Info
01.11.2002 22:49:39
PeterW
Hallo Andi,

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

VBA-Code für Prüfung
02.11.2002 10:28:40
Ramses
Hallo Andi,

dieser Code überprüft jede Minute, zu definieren unter OnTime, ob der Wert sich geändert hat.

'In das Klassenmodul "Diese Arbeitsmappe"
Private Sub Workbook_Open()
'Start der Control-Routine
Ctrl_Each_Minute
End Sub

'In ein Modul
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

     Code eingefügt mit Syntaxhighlighter 1.14

Gruss Rainer

Anzeige
Re: VBA-Code für Prüfung
02.11.2002 17:04:59
Andi
Super-Script!!!

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?

Re: VBA-Code für Prüfung
02.11.2002 20:34:13
Andi
Für alle Interessierten gehts weiter unter: www.herber.de/forum/messages/176468.html
;
Anzeige

Infobox / Tutorial

VBA zur Überwachung von Zellenänderungen in Excel


Schritt-für-Schritt-Anleitung

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:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Suche im Projekt-Explorer das Arbeitsblatt, in dem du die Überwachung durchführen möchtest (z.B. "Tabelle1").
  3. Doppelklicke auf das entsprechende Arbeitsblatt, um das Codefenster zu öffnen.
  4. Füge diesen Code ein:
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
  1. Schließe den VBA-Editor und teste die Funktion, indem du den Wert in Zelle A1 änderst.

Häufige Fehler und Lösungen

  • Fehler: Es passiert nichts, wenn sich der Wert in Zelle A1 ändert.

    • Lösung: Stelle sicher, dass der Code im Klassenmodul des Arbeitsblatts (nicht in einem allgemeinen Modul) eingefügt wurde.
  • Fehler: Änderungsaktionen werden nicht bei DDE-Verbindungen erkannt.

    • Lösung: Verwende den Application.OnTime Befehl, um den Zellwert regelmäßig abzufragen.

Alternative Methoden

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.


Praktische Beispiele

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

Tipps für Profis

  • Nutze globale Variablen, um den Status über verschiedene Subroutinen hinweg zu speichern.
  • Verwende Worksheet_Change, um spezifische Zellen zu überwachen, und nutze Application.OnTime, um periodische Überprüfungen durchzuführen, besonders bei DDE-Verbindungen.
  • Achte darauf, dass dein Code effizient ist, um die Performance nicht zu beeinträchtigen, insbesondere bei großen Arbeitsmappen.

FAQ: Häufige Fragen

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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige