Ich habe diese VBA-Funktion:
%Vor%In Zelle C11 habe ich diese Formel:
%Vor% Wenn ich testPrec
aus dem unmittelbaren Fenster heraus aufrufe, funktioniert es ganz gut:
EDIT: Es funktioniert auch gut, wenn von einem Nicht-UDF-Makro Sub aufgerufen. Die Anomalie ist der UDF-Fall.
Wenn ich es vom Arbeitsblatt als UDF ausrufe:
%Vor%Ich bekomme gerade "$ C $ 11" zurück.
Weiß jemand, was vor sich geht, oder noch besser, wie man die Präzedenzfälle aus einem UDF-Aufruf herausholt? (Ich verwende Excel 2007.)
Die einzige Problemumgehung, an die ich denken kann, ist target.formula zu erhalten und zu analysieren - nicht sehr nett.
Die Einschränkung scheint darin zu liegen, dass jeder Aufruf von .Precedents
in einem Aufruf-Stack, der eine UDF enthält, anders gehandhabt wird. Finden Sie eine Möglichkeit, den Aufruf außerhalb des Call-Stacks auszuführen, der von der UDF ausgelöst wurde: Ein Gedanke ist, Ereignisse zu verwenden. Hier ist ein zu simples Beispiel, um
In einem Modul definieren
%Vor%In einem Blatt definieren
%Vor% testPrec
gibt jetzt die korrekte Bereichsadresse zurück, wenngleich eine Neuberechnung später erfolgt. Die Idee besteht darin, die UDF eine Liste von Adressen erstellen zu lassen, um Precedents zu erhalten, und ein Ereignis, um die tatsächliche GetPrecedent-Arbeit auszuführen, wobei die Adresszeichenfolgen zu der Liste zur Abholung durch das udf zurückgegeben werden. Je nach Ihren Anforderungen können Sie daraus möglicherweise eine funktionsfähige Lösung erstellen.
Ich stieß auf ein ähnliches Problem: Ich musste Zellen basierend darauf formatieren, ob sie eine Formel oder einen konstanten Wert enthalten. Mit HasFormula
kann bestimmt werden, ob eine Zelle eine Formel enthält. Einfache Berechnungen, wie =123+45
, werden jedoch auch als Formeln erkannt (technisch korrekt, aber in finanzieller Modellierung nicht korrekt). Daher wollte ich Precedents
in einer UDF verwenden, um zu sehen, ob die angegebene Zelle mit einer anderen verknüpft ist. Wie oben erwähnt, ist der Wert von Precedents
während der Ausführung einer UDF nicht gültig, aber Ich musste nur wissen, ob es einen Präzedenzfall gibt und nicht welche Zellen sie sind.
Also habe ich die Eigenschaften Formula
und FormulaR1C1
verglichen, da sie nur dann unterschiedlich sind, wenn% code_% eine Zellreferenz enthält.
Es gibt eine Ausnahme: Wenn die Formula
benannte Bereiche enthält, dann können Formula
und Formula
gleich sein, obwohl die Zelle auf etwas verweist. (Dies war in meinem Fall nicht relevant und wollte nicht alle Namen durchlaufen und prüfen, ob sie in den äußeren Anführungszeichen FormulaR1C1
enthalten sind.
Tags und Links vba excel user-defined-functions excel-2007