ich möchte das Ereignis Worksheet_change nur bei Änderung einer bestimmten Zelle (A1) ausführen lassen. Wie funktioniert das? Standardmäßig führt ja jede Kalkulation im Worksheet zum Auslösen des Ereignisses.
Danke Euch,
C. Nuss
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
MsgBox "TaDa"
End If
End Sub
MfG Robin
Private Sub Calculate()
Static WertAlt as String
If Range("A1").text WertAlt then
hier der Code
WertAlt = Range("A1").text
End if
End Sub
Private Sub Worksheet_Calculate()
Dim rngC As Range
For Each rngC In Range("A1")
On Error GoTo Ende
If rngC = "!" Or rngC = "" Then Exit Sub
Next
MsgBox "TaDa"
Exit Sub
Ende:
MsgBox "Bitte nur Zahlen"
End Sub
Vielleichts ist es das, was du suchst.
Option Explicit ' Variablendefinition erforderlich
Private Sub Workbook_Open()
'* H. Ziplies *
'* 16.01.10 *
'* erstellt von HajoZiplies@web.de *
'* http://Hajo-Excel.de/
'* und von Karin, http://Excel-Inn.de
'* Beverly_Forums@web.de *
' Array mit Adressen und eingetragen Werte füllen
' da Bilder schon eingefügt wurden müssen die
' nicht eingefügt werden
StArray = Array(Array("", "", "", "", "", ""), _
Array("A10", "A20", "A30", "A40", "A50", "A60"))
With Worksheets("Tabelle1")
For Loi = 0 To UBound(StArray(0), 1)
If Range(StArray(1)(Loi)) "" Then
' Zellinhalt auf Variable
StArray(0)(Loi) = Range(StArray(1)(Loi))
End If
Next Loi
End With
End Sub
unter der Tabelle
Option Explicit ' Variablendefinition erforderlich
Private Sub Worksheet_Calculate()
'* H. Ziplies *
'* 24.01.10 *
'* erstellt von HajoZiplies@web.de *
'* http://Hajo-Excel.de/
Dim StBild As String ' Variable für Bildname
Application.ScreenUpdating = False ' Bildschimaktualisierung aus
With Worksheets("Tabelle1")
For Loi = 0 To UBound(StArray(0), 1) ' Schleife über überwachte Zellen
If Range(StArray(1)(Loi)) "" _
And Range(StArray(1)(Loi)) StArray(0)(Loi) Then
' Zelle geändert
MsgBox 1
StArray(0)(Loi) = Range(StArray(1)(Loi))
End If
Next Loi
End With
Application.ScreenUpdating = True ' Bildschimaktualisierung ein
End Sub
in einem Modul
Option Explicit ' Variablendefinition erforderlich
Public StArray ' Variable für überwachte Zelladressen
Public Loi As Long ' Schleifenvariable
Um das worksheet_calculate
Ereignis in Excel VBA zu optimieren, folge diesen Schritten:
Öffne den VBA-Editor: Drücke Alt + F11
, um den VBA-Editor zu starten.
Wähle das richtige Arbeitsblatt: Doppelklicke im Projekt-Explorer auf das Arbeitsblatt, in dem du das Ereignis implementieren möchtest.
Füge den Code für das Ereignis ein: Kopiere den folgenden Code in das Codefenster:
Private Sub Worksheet_Calculate()
Dim WertAlt As String
Static WertAlt As String
If Range("A1").Text <> WertAlt Then
MsgBox "Zelle A1 wurde geändert!"
WertAlt = Range("A1").Text
End If
End Sub
Schließe den VBA-Editor: Speichere deine Änderungen und schließe den Editor.
Teste das Makro: Ändere den Wert in Zelle A1 und schaue, ob das Ereignis wie gewünscht reagiert.
Fehler: Das Ereignis wird nicht ausgelöst
Lösung: Stelle sicher, dass der Code im richtigen Arbeitsblatt-Objekt eingefügt wurde. Das private sub worksheet_calculate()
muss im spezifischen Arbeitsblatt stehen.
Fehler: Es wird immer eine Nachricht angezeigt
Lösung: Achte darauf, dass der Vergleich mit WertAlt
korrekt durchgeführt wird. Überprüfe, dass WertAlt
initialisiert ist.
Wenn du das worksheet_calculate
Ereignis nicht verwenden möchtest, kannst du die Worksheet_Change
-Ereignisprozedur in Kombination mit einer statischen Variablen verwenden. Hier ein Beispiel:
Private Sub Worksheet_Change(ByVal Target As Range)
Static WertAlt As String
If Not Intersect(Target, Range("A1")) Is Nothing Then
If Range("A1").Text <> WertAlt Then
MsgBox "Zelle A1 wurde geändert!"
WertAlt = Range("A1").Text
End If
End If
End Sub
Diese Methode reagiert allerdings nur auf direkte Eingaben und nicht auf Änderungen durch Formeln.
Beispiel 1: Überwachung mehrerer Zellen
Private Sub Worksheet_Calculate()
Dim rng As Range
Dim ZielZellen As Range
Set ZielZellen = Range("A1:A10") ' Überwache Zellen A1 bis A10
For Each rng In ZielZellen
If rng.Value <> rng.OldValue Then
MsgBox rng.Address & " wurde geändert!"
End If
Next rng
End Sub
Beispiel 2: Berechnung bei Änderung einer Formel
Private Sub Worksheet_Calculate()
If Range("A1").Formula <> "" Then
MsgBox "Die Formel in A1 hat sich geändert!"
End If
End Sub
Application.EnableEvents = False
und Application.EnableEvents = True
, um zu verhindern, dass das Ereignis mehrmals ausgelöst wird.Application.ScreenUpdating = False
, um die Bildschirmaktualisierung während der Berechnungen zu deaktivieren.Debug.Print
, um Informationen im Direktfenster auszugeben, wenn du Fehler suchst.1. Wie kann ich das worksheet_calculate
Ereignis in einem Modul verwenden?
Das worksheet_calculate
Ereignis ist spezifisch für Arbeitsblätter. Du kannst jedoch Subroutinen im Modul erstellen, die durch dieses Ereignis aufgerufen werden.
2. Was tun, wenn das Ereignis nicht funktioniert?
Überprüfe, ob der Code im richtigen Arbeitsblatt-Objekt ist und ob die Makros in deiner Excel-Datei aktiviert sind. Achte auch darauf, dass der Code keine Syntaxfehler enthält.
Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden
Suche nach den besten AntwortenEntdecke unsere meistgeklickten Beiträge in der Google Suche
Top 100 Threads jetzt ansehen