Hallo Julaka,
so ganz hab ich noch nicht verstanden was du vorhast. Aber ich versuchs trotzdem mal mit einer Erklärung. Mit der Zeile For Each xRg In pRg durchläufst du alle Zellen im übergebenen Bereich pRg und gibst diese einzeln an xRg zurück, womit du dann weiterarbeitest. Wenn du also nur die eine Zelle D20 an pRg übergibst kannst du in xRg nie E20 erhalten.
Falls es sich immer um Nachbarzellen handelt. Kannst du mit pRg.Offset(0,1) auf die nächste Zelle zugreifen, die rechts neben der übergebenen liegt.
Falls nicht, dann kannst du mit Application.Caller auf die Zelle zugreifen, die diese Formel (oder bedingte Formatierung) enthält.
Mit Worksheet_Change hat das ganze nix zu tun. Das erzeugt lediglich nach Eingabe evtl. eine Neuberechnung aller Formeln. Auch deiner benutzerdefinierten. Die Neuberechnung kannst du aber auch mit ActiveSheet.Calculate in einem eigenen Makro erzeugen, das du an einen Button bindest. Eine automatische Neuberechnung bei änderung der Farbe ist leider nicht so einfach möglich. Diese müsstest du an einen Timer knüpfen oder an ein anderes Ereignis wie z.B. Worksheet_SelectionChange.
Spiel auch mal mit der Zeile Application.Volatile herum, die du an den Anfang deiner Function setzen kannst. Dann wird die Neuberechnung auch ausgelöst, wenn sich die übergebene Zelle auf einem anderen Arbeitsblatt befindet und du dieses Blatt umbenennst.
Gruß Mr. K.
|