Ich habe viele Benutzer gesehen, die Fragen stellten, indem sie versuchten, die Farben von Zellen mit benutzerdefinierten Funktionen zu ändern. Ich hatte immer den Eindruck, dass das nicht möglich war. Mein Verständnis war, dass eine benutzerdefinierte Funktion keine Eigenschaften einer Zelle außer dem Wert der Zelle, die die Formel enthält, ändern kann. Subs sind was Zellen selbst verändern.
Aber wenn ich mit etwas Code herumspiele, um das zu testen, habe ich festgestellt, dass das nicht immer der Fall ist Verwenden Sie den einfachen Code:
%Vor% Wenn ich die Funktion in eine Zelle einfüge, erziele ich die erwarteten Ergebnisse, keine Zellen ändern die Farben. Wenn ich jedoch die Formeln & gt; Fügen Sie die Funktionsschaltfläche ein und navigieren Sie zu meiner Formel, um sie auf diese Weise einzufügen. Dabei werden die Zielzellen gefärbt.
Wie ist das möglich, und warum hat sich die Funktion anders verhalten, wenn sie auf verschiedene Arten eingegeben wurde?
EDIT: das wurde mit Excel 2007
getestet Ich verwende Worksheet_Change
event, um eine Wertänderung im Arbeitsbereich zu erkennen. Beispiel. Ich möchte etwas tun, wenn Bereich A1: A5 geändert wurde. Ich benutze unten Ereignis.
Wenn der Bereichswert geändert wurde. Es wird Ihren Code ausführen Und andersherum. Verwenden Sie bedingte Formatierung.
Wie wir alle früher oder später feststellen, können Sie in Benutzerfunktionen nicht auf Subs zugreifen, die die Dinge in Ihrer Tabelle direkt ändern.
Aber versuchen Sie das:
%Vor%Wenn Sie das Sub-Objekt zuerst ausführen, werden die statischen Variablen ColorMeTarget und ColorMeVal ständig überprüft, um festzustellen, ob eine Änderung vorliegt. Die Funktion ColorMe legt diese Werte fest. Wenn ColorMeTarget noch nicht initialisiert ist, wird zusätzlicher Code benötigt.
Wenn Sie schlauer werden, könnten Sie die Funktion zuerst prüfen lassen, ob es tatsächlich eine Änderung gibt und die neuen Färbungsanforderungen zu einem Stapel hinzufügen. Ihr wiederkehrendes Sub kann dann "aufholen", besonders wenn Sie viele Funktionen wie diese haben.
Sie können dann sogar alle Arten von zusätzlichen Steuerelementen zu Ihrer Funktion / Ihrem Makro hinzufügen lassen - EVEN STUFF NICHT VON DEN NEUESTEN VERSIONEN DER 'CONDITIONAL FORMATING' ABGEDECKT !!! YAY !!!!
Etwas zum Ausprobieren: In einigen meiner automatisierten Makros kann ich OnTime über eine Funktion einstellen, kann sie aber hier nicht ausführen. Es wäre sauberer, wenn die Funktion OnTime eingestellt hätte und keine wiederherstellende Subdatei hätte, die initialisiert werden müsste.
könnte auch die Nicht-Skript-Methode zum automatischen Einfärben einer Zelle basierend auf der Bedingung der Zelle ausprobieren (auch bekannt als Bedingte Formatierung):