Live-Forum - Die aktuellen Beiträge
Datum
Titel
18.04.2024 18:04:29
18.04.2024 16:33:24
Anzeige
Archiv - Navigation
1048to1052
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Frage zu Worksheet_Change

Frage zu Worksheet_Change
12.02.2009 15:21:00
Gordon
Moin,
ich habe mir, mit Hilfe hier aus dem Forum, folgenden Code gebaut:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rg As Range
For Each rg In Target
If rg.Value = Worksheets("Tabelle1").Cells(rg.Row, 1).Value Then
rg.Value = Right(rg.Value, 4)
End If
Next rg
End Sub


Zu Erklärung: Gibt man in eine Zelle der Spalte A einen Wert ein, soll dieser auf die letzten vier Zeichen gestutzt werden. Das klappt auch ganz gut. Nun aber mal eine Frage zu dem Verständnis meines Codes:
Wenn ich etwas in der Spalte A eingebe überprüft der Code eigentich nur die Zelle die ich bearbeitet habe, oder alle Zellen in der Spalte A? Habe mal zum Spass die folgende Codezeile mit eingefügt:


Worksheets("Tabelle1").Range("C1").value =  Worksheets("Tabelle1").Range("C1").value + 1


Darauf hin habe ich dann mal etwas eingegeben, und egal wo ich etwas angegeben hatte, wurde nicht um eins in Zelle C1 hochgezählt, sondern um 22881. Habe ich mehrere Zellen makiert und "Inhalt löschen" gewählt, egal ob die Zellen in Spalte A liegen oder nicht, fing das Makro an in C1 hochzuzählen - und zwar makierte Zähle um 22881.
Kann mir jemand zu meinem Verständnis erklären, was da genau abläuft? Wäre echt schön....will ja verstehen! :-)
Gruß
Gordon

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Frage zu Worksheet_Change
12.02.2009 15:35:00
hary
Hallo Gorden
Worksheet_Change wirkt auf dem gesamten Blatt. Ueberwachung einer Spalte oder Bereichs erfolgt ueber Interset.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:A3000")) Is Nothing Then 'hier Bereich A2 bisA3000
Deine Anweisung
end if
end Sub


Gruss Hary

AW: Frage zu Worksheet_Change
12.02.2009 16:10:00
Erich
Hi Gordon,
deine Routine tut nicht wirklich das was du beschreibst. Mit
If rg.Value = Worksheets("Tabelle1").Cells(rg.Row, 1).Value Then
wird geprüft, ob ein Wert gleich dem Wert der Spalte A in dieser Zeile ist.
Wenn ja, wird z. B. C5 auf die letzten 4 Stellen gekürzt, wenn der alte Wert von C5 auch in A5 steht.
Wenn du die beiden folgenden Codes probierst (getrennt voneinander, beide auf einmal geht nicht),
wirst du sehen, dass bei der ersten Routine heftig hochgezählt wird, bei der 2. nicht.
Das hat einen einfachen Grund:
Die Routine wird bei jeder Änderung der Tab. aufgerufen.
Und dann ändert sie (manchmal) die Tabelle.
Das führt dazu, dass die Routine aufgerufen wird
Und dann ändert sie (manchmal) die Tabelle.
Das führt dazu, dass die Routine aufgerufen wird
und so weiter und so weiter und so weiter und so weiter ...
Im 2. Code wird die Ereignisbehandlung mit "Application.EnableEvents = False" vorübergehend ausgeschaltet,
das Problem ist verschwunden.

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rg As Range
'                                            nur Spalte A überwachen
If Intersect(Target, Columns(1)) Is Nothing Then Exit Sub
For Each rg In Intersect(Target, Columns(1))
If Len(rg.Value) > 4 Then rg.Value = Right(rg.Value, 4)
Range("C1").Value = Range("C1").Value + 1
Next rg
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rg As Range
'                                            nur Spalte A überwachen
If Intersect(Target, Columns(1)) Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each rg In Intersect(Target, Columns(1))
If Len(rg.Value) > 4 Then rg.Value = Right(rg.Value, 4)
Range("C1").Value = Range("C1").Value + 1
Next rg
Application.EnableEvents = True
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Frage zu Worksheet_Change
12.02.2009 16:51:00
Gordon
Ja,
danke dir. Mein Code war wohl der Marke "Denn sie wissen nicht was sie tun!" ;-)
Funktioniert mit dem zweiten Beispiel einwandfrei und weiß ich auch, warumd a so irre hochgezählt wurde! Danke dir vielmals....bin nun ein ganzes Stück schlauer....
Beste Grüße
Gordon

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige