![]() |
Betrifft: Frage zum Change ereignis
von: maine-coon
Ich möchte einen Code im Changeereignis nur dann durchlaufen lassen, wenn sich der Wert einer bestimmten Zelle ändert.
Geht das überhaupt, denn das Changeereignis reagiert ja auf alle Veränderungen von Zellwerten?
Gruß Achim
![]() |
Betrifft: AW: Frage zum Change ereignis
von: Hajo_Zi
Geschrieben am: 31.05.2008 17:04:01
Hallo Achim,
Du kannst aber die Zelladresse prüfen.
If Target.Address = "$A$1" Then
![]() |
Betrifft: AW: Frage zum Change ereignis
von: maine-coon
![]() |
Betrifft: AW: Frage zum Change ereignis
von: Hajo_Zi
Geschrieben am: 31.05.2008 19:11:20
Hallo Achim,
es ist schon von Vorteil, wenn man seinen Code postet. Die wahrscheinlicjhkeit ist sehr hoch, das an für sein Problem eine Antwort bekommt.
Ich kann mit der Zeile "If Target.Address has changed then " nichts anfangen
mein Excel auch nicht.
Gruß Hajo
![]() |
Betrifft: Hajo's Antwort wäre wahrscheinlich auch...
von: Luc:-?
![]() |
Betrifft: AW: Hajo's Antwort wäre wahrscheinlich auch...
von: maine-coon
Geschrieben am: 01.06.2008 00:28:24
Gut, dass es noch andere Excel Foren gibt.
![]() |
Betrifft: Da triffst du Hajo u.a. auch! RTFR... ;-) owT
von: Luc:-?
![]() |
Betrifft: AW: Frage zum Change ereignis
von: {Boris}
Geschrieben am: 01.06.2008 11:22:37
Hi Achim,
was Hajo meinte:
Die Variable Target, die im Change-Event verwendet wird, hat auch eine ADRESSE.
Und diese Adresse kannst Du zu Beginn der Prozedur abfragen:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "D4" Then
MsgBox "Zelle D4 wurde geändert"
End If
End Sub
Die Messagebox erscheint hierbei nur, wenn Zelle D4 geändert wurde.
Grüße Boris
![]() |
Betrifft: AW: Frage zum Change ereignis
von: maine-coon
![]() |
Betrifft: AW: Frage zum Change ereignis
von: {Boris}
Geschrieben am: 01.06.2008 11:44:29
Hi Achim,
das Change-Ereignis wird immer angestoßen, sobald sich irgendein Zellwert (oder auch mehrere gleichzeitig) durch manuelles Zutun ändert. Dem Ereignis wird gleichzeitig über die Variable Target mitgeteilt, um welche(n) Zellwert(e) es sich dabei handelt.
Um jetzt zwischen verschiedenen Zellen zu unterscheiden, kann man die Variable Target zu Beginn der Prozedur (die - wie gesagt - auf jeden Fall angestoßen wird) darauf hin überprüfen, ob sie sich innerhalb eines bestimmten Bereiches befindet. Eine Möglichkeit dafür ist die Intersect-Methode, die sich dann anbietet, wenn man das Ereignis auf einen bestimmten - größeren - Bereich anwenden möchte.
Will man hingegen nur auf eine einzelne Zelle überprüfen, kann man das auch dadurch zu Beginn der Prozedur bewerkstelligen, indem man die Adresse der Variable Target abfragt:
If Target.Address(0, 0) = "C5" Then...
Das (0, 0) ist Teil der Address-Eigenschaft: Es bedeutet, dass sowohl Zeile als auch Spalte relativ ausgegeben werden. Lässt Du (0, 0) weg (wie von Hajo geschrieben), dann musst Du den Rückgabewert der Address-Eigenschaft auch auf einen absoluten Zellbezug prüfen:
If Target.Address = "$C$5" Then...
Ist Jacke wie Hose, jedoch hab ich mich an den relativen Bezug gewöhnt - daher schreibe ich immer (0, 0).
Alles klar?
Grüße Boris
![]() |
Betrifft: AW: Frage zum Change ereignis
von: maine-coon
![]() |
Betrifft: AW: Frage zum Change ereignis
von: {Boris}
Geschrieben am: 01.06.2008 12:20:13
Hi Achim,
...zum noch tieferen Verständnis empfiehlt es sich dann in der Tat, auch einen Blick in die Excel-Hilfe zu risikieren - z.B. zur Address-Eigenschaft - indem Du den Cursor innerhalb des Wortes platzierst und dann mit F1 die Hilfe aufrufst. Dadurch erhälst Du einen Überblick über alle Parameter der Eigenschaft - im konkreten Fall:
Ausdruck.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)
Ausdruck ist bei Dir die Variable Target. Zudem gibt es 5 Parameter, von denen ich nur die ersten beiden mit 0 (das ist gleich FALSE) angegeben habe (RowAbsolute und ColumnAbsolute). Die restlichen drei habe ich "geschlabbert", da sie standardmäßig so vorbelegt sind, wie ich es brauchte: A1-Referenz sowie NICHT-Extern. Der letzte Parameter ist sowieso nur von Interesse, wenn die Z1S1-Referenz verwendet wird.
Grüße Boris
![]() |
Betrifft: Normalerweise wird einem Anfänger, so...
von: Luc:-?
![]() |