Lange Rede kurzer Sinn, ich versuche, meine benutzerdefinierte Funktion als Teil der Funktion den Formeleintrag zu erweitern (der, der es ausgelöst hat!). Hier ist ein destilliertes Beispiel:Excel: Benutzerdefinierte Funktion, die sich selbst repariert?
Private Function heythere(blah As String)
extraBit = "title"
ActiveCell.Formula = Replace(ActiveCell.Formula, ")", "," & """" & extraBit & """" & ")")
End Function
Grundsätzlich dass extraBit
durch eine Userform ListBox definiert ist, wenn der Benutzer nicht hinzufügen, es in die Formel. Es gibt viele Optionen, die basierend auf dem ersten Argument des Eintrags dynamisch in die ListBox geladen werden. Es ist ein wenig schwierig zu erklären, aber wenn die extraBit
in der Formel zur Verfügung gestellt wird, bedeutet dies, dass das UserForm nicht erscheint und das Ergebnis direkt angegeben wird. Also ich möchte den Eintrag "reparieren", nachdem die extraBit
definiert ist. Im Wesentlichen würde in dem obigen Beispiel =heythere(a1)
=heythere(a1,"title")
werden.
Ist das möglich? Ich habe versucht, einen separaten privaten Sub zu erstellen, um den Eintrag zu überschreiben, ohne Erfolg. Vielen Dank im Voraus für irgendwelche Vorschläge ...
Edit: Um zu klären, wie es funktionieren soll, ist die tatsächliche UDF eher wie diese mit einem optionalen Sekundär Argumente:
Private Function heythere2(blah As String, Optional extraBit As String)
If extraBit = "" Then
extraBit = "title"
ActiveCell.Formula = Replace(ActiveCell.Formula, ")", "," & """" & extraBit & """" & ")")
End If
End Function
Ich bin mir nicht sicher, ob ich den Anwendungsfall verstehe. Warum nicht einfach einen optionalen zweiten Parameter für heythere? – Comintern
Entschuldigung, ich habe den zweiten Parameter entfernt ... lassen Sie mich es wieder hinzufügen und etwas darüber ausarbeiten, wie es funktioniert ... – David
Hm, was ist, wenn: Speichern Sie Ihre Formel als String. Verwenden Sie dann eine beliebige Methode, um diese Zeichenfolge mit Ihrem 'extraBit' zu aktualisieren. Dann können Sie 'Cells (1,1) .Formula = myString' machen? In Ihrem Beispiel funktioniert es sogar? Oder erhalten Sie Fehler? – BruceWayne