Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1140to1144
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

Worksheet_Change

Worksheet_Change
ing.grohn
Hallo Forum,
der folgende Code ist im Code-Fenster von Tabelle1 abgelegt:
Ändere ich das Feld D18 und verlasse es, passiert nichts.
Wenn ich das Nachbarfeld ändere und verlasse, gibts die erwartete Reaktion:
Dim bln As Boolean

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim rng As Range
Target.Font.ColorIndex = 5
Set rng = Range("D18")
If Target.Address = rng.Address Then bln = True
If bln = True And Target.Address  rng.Address Then
Call testmakro
bln = False
End If
End Sub

Warum ist das so?
Bedankt für eine Antwort.
Mit freundlichen Grüßen
Albrecht

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Worksheet_Change aber nicht so!
04.03.2010 16:26:15
Renee
Hi Albrecht,
Die Code-Konstruktion ist "durchgequirltes von Hinten durch die Brust ins Auge"....
WAS willst du erreichen ? 3 mal True/False IF und Vergleiche ist einfach irgendwie überflüssig!
GreetZ Renée
AW: Worksheet_Change aber nicht so!
04.03.2010 16:33:37
ing.grohn
Hallo Renee,
diese "durchgequirlte Scheisse" hat mir jemand aus dem Forum gegeben!
Wenn ein Feld geändert wird, sollte ein Makro starten (die Zeile mit der Farbe kanste vergessen!!)
Mit freundlichen Grüßen
Albrecht
(sag mir wie ichs machen muß, danke)
Damit du's auch verstehst,...
04.03.2010 17:00:18
Luc:-?
…Albrecht,
If Target.Address = rng.Address Then bln = True und If bln = True And Target.Address rng.Address Then widerspricht sich eigentl und ist deshalb vermutl so Quatsch, zumindest aber lt.Renée! Außerdem ist bln hier nicht deklariert und Einiges könnte man einfacher schreiben, zB…
bln = (Target.Address = rng.Address)
Wenn sich D18 ändert, entspricht Target auch D18. Damit ist dann bln = True. Das ist aber nur 1 Voraussetzung. Die 2. ist, dass die Adressen nicht übereinstimmen, also passiert auch nichts und bln bleibt True. Das wäre an sich nicht weiter schlimm, aber ich befürchte, das ist bei dir 'ne Globalvariable. Dann bleibt dieser Wert solange erhalten, bis mal deine 2.Bedingung voll erfüllt wird, also sowohl bln = True ist als auch die Adressen nicht übereinstimmen. Und das kann frühestens bei der nächsten Zelle der Fall sein, nachdem sich was in D18 geändert hat. Wurde testmakro aber aufgerufen, ist bln = False und alles beginnt von vorn.
Soweit die Theorie. Du musst beachten, dass jede andere Änderung auf dem Blatt ebenfalls diese Prozedur aufruft, wobei endlose Verschachtelungen entstehen können, die natürlich Auswirkungen auf eine Globalvariable bln haben können, so dass dein Konstrukt nicht mehr zuverlässig fktioniert. Deshalb schliesst man idR solche Verschachtelungen aus, indem man Application.EnableEvents zuvor und danach oder zumindest keine Globalvariablen verwendet.
Gruß Luc :-?
Anzeige
AW: Damit du's auch verstehst,...
04.03.2010 17:14:13
ing.grohn
Hallo Luc,
das hab ich sogar verstanden!
Vielen Dank
Mit freundlichen Grüßen
Albrecht
Ps ich bin nicht richtig firm was VBA angeht und übernehme Dinge und probiere aus. Machmal geht das auch daneben und machnmal spielt VBA sein eigenes Spiel !
Bin aber schon weit gekommen.
AW: Worksheet_Change
04.03.2010 16:29:40
Hajo_Zi
Hallo Albrecht,
wenn man sich noch ein wenig ansrenkt bekommt man das bestimmt noch erheblich komplizierter hin als Dein Vorschlag. Icch hätte nur
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Target.Font.ColorIndex = 5 ' grundsätzlich
If Target.Address = "$D$18" Then testmakro
End Sub

geschrieben.

Anzeige
AW: Worksheet_Change
04.03.2010 16:36:20
ing.grohn
Hallo Hajo,
funktioniert wie gewollt!!
Vielen Dank für die gewünschte Antwort
Mit freundlichen Grüßen
Albrecht
AW: Worksheet_Change
04.03.2010 16:32:14
Reinhard
Hallo Albrecht,
testmakro wird nie ausgeführt. bln kannste weglassen, die zwei IFs zu einem IF:
If Target.Address = rng.Address And Target.Address rng.Address Then
und das wird nie TRue
Gruß
Reinhard
AW: Worksheet_Change
04.03.2010 16:39:05
ing.grohn
Hallo Reinhard,
ich muß dir widersprechen:
Das Testmakro wird ausgeführt, wenn ich D18 ändere, dann verlasse (egal ob Enter, Tab oder Mouse) und anschließend das Nachbarfeld ändere und verlasse.
Vielen Dank
Mit freundlichen Grüßen
Albrecht
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige