Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Frage zum Change ereignis

Betrifft: Frage zum Change ereignis von: maine-coon
Geschrieben am: 31.05.2008 16:56:10

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

GrußformelHomepage


  

Betrifft: AW: Frage zum Change ereignis von: maine-coon
Geschrieben am: 31.05.2008 19:01:18

Hallo HaJo,

damit kann ich nichts anfangen.
Wie soll ich das verstehen?
If Target.Address has changed then mach was, ansonsten exit sub, oder wie ?

Es geht um diese Zelle,
If Not Intersect(ActiveCell, [D]) Is Nothing Then
InputBox......usw...Code
endif
die ich im Moment im Selection_Change habe, aber das ist nicht recht glücklich gewählt.
Springe ich versehentlich auf diese Zelle, muss ich immer Abbrechen klicken

Aber wenn andere Zellen sich ändern, wird ja sofort das Change_Ereignis durchlaufen.
Das Change_Ereignis soll aber nur dann durchlaufen werden, wenn sich der Wert in Zelle [D] verändert hat. Und diese Zelle wird nur durch die Eingabe eines Wertes über die Tasten verändert.

Gruß Achim


  

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:-?
Geschrieben am: 01.06.2008 00:23:03

...für dich verständlich gewesen, Achim,
wenn du dir wenigstens mal die VBE-Hilfe zur EventProc durchgelesen hättest. Darin wird nämlich auch der Standardparameter Target derselben erklärt!
Ansonsten bin ich der Meinung, dass Leute deines VBA-Levels erst mal pgmieren lernen sollten (an normalen Procs!), bevor sie sich mit EventProcs befassen!
Ansonsten RTFM (so ist wohl auch Hajo's Antwort zu verstehen...)!
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:-?
Geschrieben am: 01.06.2008 00:43:18

:-?


  

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
Geschrieben am: 01.06.2008 11:35:52

Hallo Boris,

erst einmal Danke für diesen Hinweis.
Also habe ich doch Recht, wenn ich diese Zeilen mal auf "Blöd-Deutsch" interpretiere.
Wenn Zelle D4 sich verändert, dann durchlaufe den Code im Change Ereignis, ansonsten Exit Sub.
Meine VBA Kenntnisse sind zu schwach, um das alles zu verstehen.
Warum steht dort in Klammern (0, 0)? Wenn die beiden Werte 0, 0 die Zeile, Spalte bedeuten, dann ist doch das nicht D4.
Ich bemühe mich immer meine Fragen so ausführlich wie nur möglich dazulegen, aber jedesmal bekomme ich eins auf die Rübe, wenn ich dann bei einer "nicht erklärten" Antwort nachfrage.
Gruß Achim


  

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
Geschrieben am: 01.06.2008 11:47:22

Ich habe mir das mal ausgedruckt. Danke für diesen ausführlichen Hinweis. Jetzt ist mir einiges klar geworden.
Wünsche dir noch einen schönen Sonntag.
Gruß Achim


  

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:-?
Geschrieben am: 01.06.2008 17:32:46

...wie Boris es hier getan hat, Achim,
auch mehr erklärt als Anderen, wenn man den Eindruck hat, er bemüht sich auch selbst, d.h., teilt bspw mit, dass er das und das in der Hilfe nicht verstanden hat... Aber dazu muss er die Hilfe erst mal lesen!
Rate mal wie wir zu unseren Kenntnissen gekommen sind...?
Außerdem findet man vieles auch im Archiv, denn das ist alles schon x-mal erklärt worden...
Lies mal meinen Link im oberen Beitrag, da steht das auch...!
Gruß Luc :-?


 

Beiträge aus den Excel-Beispielen zum Thema "Frage zum Change ereignis"