Bei Aufruf aus einer Excel-VBA-UDF gibt Range.Precedents den Bereich und nicht seine Präzedenzfälle zurück. Gibt es eine Problemumgehung?

9

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:

%Vor%

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.)

    
jtolle 04.04.2011, 16:20
quelle

3 Antworten

2

Die einzige Problemumgehung, an die ich denken kann, ist target.formula zu erhalten und zu analysieren - nicht sehr nett.

    
Charles Williams 04.04.2011, 19:09
quelle
3

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

zu demonstrieren

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.

    
chris neilsen 04.04.2011 20:32
quelle
0

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.

    
z32a7ul 30.10.2016 16:08
quelle