Wie füge ich in Excel 2007 einer benutzerdefinierten Funktion eine Beschreibung und Parameterhinweise hinzu? Wenn ich einen Funktionsaufruf für eine integrierte Funktion eingebe, zeigt Excel eine Beschreibung und eine Parameterliste an - eine QuickInfo. Ich möchte dasselbe für die von mir definierten Funktionen tun.
Nicht nur für die Formel einfügen Assistenten, aber in der Formel - Box, also wenn ich Schlüssel "=myFun("
, bei der "("
die Tooltip erscheint genau wie es funktioniert für"=average("
Es gibt keine Hilfe in der VBA-Hilfe, keine in MSDN und keine in einem der Excel- und VBA-Foren, die ich finden kann. Dies ist also eindeutig ein langer Weg.
Antworten:
Function IFERROR(ByRef ToEvaluate As Variant, ByRef Default As Variant) As Variant If IsError(ToEvaluate) Then IFERROR = Default Else IFERROR = ToEvaluate End If End Function Sub RegisterUDF() Dim s As String s = "Provides a shortcut replacement for the common worksheet construct" & vbLf _ & "IF(ISERROR(<expression>), <default>, <expression>)" Application.MacroOptions macro:="IFERROR", Description:=s, Category:=9 End Sub Sub UnregisterUDF() Application.MacroOptions Macro:="IFERROR", Description:=Empty, Category:=Empty End Sub
Von: http://www.ozgrid.com/forum/showthread.php?t=78123&page=1
Geben Sie den Funktionsnamen ein und drücken Sie, um das Dialogfeld Funktionsargumente anzuzeigen CtrlA. Alternativ können Sie in der Formelleiste auf das Symbol "fx" klicken:
quelle
Keine Tooltip-Lösung, aber eine angemessene Problemumgehung:
Beginnen Sie mit der Eingabe der UDF
=MyUDF(
und drücken Sie CTRL+ Shift+. AIhre Funktionsparameter werden angezeigt. Solange diese Parameter aussagekräftige Namen haben, haben Sie zumindest eine brauchbare EingabeaufforderungZum Beispiel:
=MyUDF(
+ CTRL+ Shift+AWird daraus:
=MyUDF(sPath, sFileName)
quelle
Ich weiß, dass Sie eine Antwort darauf akzeptiert haben, aber es gibt jetzt eine Lösung, mit der Sie ein Vervollständigungsfeld für den Intellisense-Stil wie für die anderen Excel-Funktionen über ein Excel-DNA-Add-In oder durch Registrierung eines Intellisense-Servers in Ihrem Fenster öffnen können eigenes Add-In. Siehe hier .
Jetzt bevorzuge ich die C # -Methode - es ist viel einfacher, da in Excel-DNA jede Klasse, die implementiert
IExcelAddin
wird, vom Add-In- Framework aufgenommen wirdAutoOpen()
undAutoClose()
ausgeführt wird, wenn Sie das Add-In öffnen / schließen. Sie benötigen dies also nur ::namespace MyNameSpace { public class Intellisense : IExcelAddIn { public void AutoClose() { } public void AutoOpen() { IntelliSenseServer.Register(); } } }
und dann (und dies wird nur von der Github-Seite übernommen) müssen Sie nur die ExcelDNA-Annotationen für Ihre Funktionen verwenden:
[ExcelFunction(Description = "A useful test function that adds two numbers, and returns the sum.")] public static double AddThem( [ExcelArgument(Name = "Augend", Description = "is the first number, to which will be added")] double v1, [ExcelArgument(Name = "Addend", Description = "is the second number that will be added")] double v2) { return v1 + v2; }
Der Intellisense-Server, der mit den ExcelDNA-Annotationen kommentiert wird, nimmt die Argumentnamen und Beschreibungen auf.
Es gibt Beispiele für die Verwendung nur mit VBA, aber ich bin nicht zu sehr mit meinem VBA beschäftigt, daher verwende ich diese Teile nicht.
quelle
Ich erstelle gerade eine "Hilfe" -Version der Funktion. Wird bei der automatischen Vervollständigung direkt unter der Funktion angezeigt. Der Benutzer kann sie stattdessen in einer benachbarten Zelle für Anweisungen auswählen.
Public Function Foo(param1 as range, param2 as string) As String Foo = "Hello world" End Function Public Function Foo_Help() as String Foo_Help = "The Foo function was designed to return the Foo value for a specified range a cells given a specified constant." & CHR(10) & "Parameters:" & CHR(10) & " param1 as Range : Specifies the range of cells the Foo function should operate on." & CHR(10) &" param2 as String : Specifies the constant the function should use to calculate Foo" &" contact the Foo master at [email protected] for more information." END FUNCTION
Die Wagenrückläufe verbessern die Lesbarkeit bei aktiviertem Zeilenumbruch. 2 Fliegen mit einer Klappe, jetzt hat die Funktion einige Unterlagen.
quelle
Sie können dieses Makro auch verwenden, um Argumenten und der UDF Beschreibungen zuzuweisen:
Private Sub RegisterMyFunction() Application.MacroOptions _ Macro:="SampleFunction", _ '' Your UDF name Description:="calculates a result based on provided inputs", _ Category:="My UDF Category", _ '' Or use numbers, a list in the link below ArgumentDescriptions:=Array( _ '' One by each argument "is the first argument. tell the user what it does", _ "is the second argument. tell the user what it does") End Sub
Dank an Kendall und den Originalbeitrag hier . Für die UDF-Kategorien
quelle
Die Methode von @ will ist die beste. Fügen Sie einfach ein paar Zeilen über die Details für die Personen hinzu, die ExcelDNA zuvor nicht wie ich verwendet haben.
Laden Sie Excel-DNA IntelliSense von https://github.com/Excel-DNA/IntelliSense/releases herunter
Es gibt zwei Versionen, eine für 64, überprüfen Sie Ihre Excel-Version. Für meinen Fall verwende ich die 64-Version.
Öffnen Sie Excel / Developer / Add-Ins / Browse und wählen Sie ExcelDna.IntelliSense64.xll aus.
Fügen Sie ein neues Blatt ein, ändern Sie den Namen in " IntelliSense " und fügen Sie eine Funktionsbeschreibung als https://github.com/Excel-DNA/IntelliSense/wiki/Getting-Started hinzu
Dann genieße es! :) :)
quelle
Leider gibt es keine Möglichkeit, QuickInfos für UDF-Argumente hinzuzufügen.
Um Remous Antwort zu erweitern, finden Sie unter http://www.jkp-ads.com/Articles/RegisterUDF00.asp einen umfassenderen, aber komplexeren Ansatz für Beschreibungen des Funktionsassistenten
quelle
Viel um die Antwort herum zu tanzen. Sie können die UDF-Kontexthilfe hinzufügen, müssen jedoch das Modul exportieren und den Inhalt in einem Texteditor bearbeiten und dann erneut in VBA importieren. Hier ist das Beispiel von Chip Pearson: Hinzufügen von Code-Attributen
quelle
Ich habe den Ansatz von @ ScottK ausprobiert, zuerst als Nebenfunktion meiner funktionalen UDF, dann als eigenständige _Help-Suffix-Version, als ich auf Probleme stieß (siehe unten). Im Nachhinein ist der letztere Ansatz ohnehin besser - für einen Benutzer, der aufmerksam genug ist, um einen Tooltip zu sehen, offensichtlicher, und der Funktionscode wird nicht unübersichtlich.
Ich dachte mir, wenn ein unaufmerksamer Benutzer nur den Funktionsnamen eingibt und die Klammern schließt, während er darüber nachdenkt, wird Hilfe angezeigt und er ist auf dem Weg. Es schien jedoch keine gute Idee zu sein, eine Menge Text in eine einzelne Zelle zu kopieren, die ich nicht formatieren kann. Stattdessen, wenn die Funktion in eine Zelle ohne Argumente eingegeben wird, z
= interpolateLinear() or = interpolateLinear_Help()
Eine msgBox wird mit dem Hilfetext geöffnet. Eine msgBox ist auf ~ 1000 Zeichen begrenzt, vielleicht ist es 1024. Aber das reicht (kaum 8 ^ /) für meine übermäßig ausgetrickste Interpolationsfunktion. Wenn nicht, können Sie jederzeit ein Benutzerformular öffnen und in die Stadt gehen.
Als sich das Meldungsfeld zum ersten Mal öffnete, sah es nach Erfolg aus. Es gibt jedoch einige Probleme. Zunächst muss der Benutzer natürlich wissen, dass er die Funktion ohne Argumente eingeben kann (+1 für das _Help-Suffix UDF).
Das große Problem ist, dass die msgBox mehrmals hintereinander spontan wieder geöffnet wird, während in nicht verwandten Teilen der Arbeitsmappe gearbeitet wird. Unnötig zu sagen, dass es sehr nervig ist. Manchmal geht es weiter, bis ich eine Rundschreiben-Warnung erhalte. Stelle dir das vor. Wenn eine UDF die Zellformel ändern könnte, hätte ich das getan, um sie zum Schweigen zu bringen.
Ich weiß nicht, warum Excel das Bedürfnis hat, die Formel immer wieder neu zu berechnen. Weder die eigenständige _Help-Version noch die Vollversion (im Hilfemodus) haben Präzedenzfälle oder abhängige Elemente. Es gibt nirgendwo eine application.volatile- Anweisung. Natürlich gibt die Funktion einen Wert an die aufrufende Zelle zurück. Vielleicht löst das die Neuberechnung aus? Aber genau das machen UDFs. Ich glaube nicht, dass Sie keinen Wert zurückgeben können.
Da Sie nicht ein Arbeitsblatt ändern Formel aus einer UDF, habe ich versucht , eine bestimmte Zeichenfolge --a zurückzukehren Wert --to der anrufenden Zelle (die einzige können Sie den Wert von einem UDF ändern), herauszufinden , würde ich das prüfen Zellenwert mit application.caller im nächsten Zyklus, erkennen Sie meine Zeichenfolge und wissen Sie, dass die Hilfemeldung nicht erneut angezeigt werden soll. Schien damals eine gute Idee zu sein - hat nicht funktioniert. Vielleicht habe ich in meinem Zustand ohne Schlaf etwas Dummes getan. Die Idee gefällt mir immer noch. Ich werde dies aktualisieren, wenn ich das Problem behebe. Meine schnelle Lösung bestand darin, eine Zeile in das Hilfefeld einzufügen: " Suchen Sie nur im Notfall Hilfe. Löschen Sie die beleidigende Formel, um das Elend zu beenden.
In der Zwischenzeit habe ich den Application.MacroOptions-Ansatz ausprobiert. Ziemlich einfach und es sieht professionell aus. Nur ein Problem zu lösen. Ich werde später eine separate Antwort auf diesen Ansatz veröffentlichen.
quelle