web-dev-qa-db-de.com

Wie fügt man eine QuickInfo zu einer benutzerdefinierten Funktion hinzu?

Wie füge ich in Excel 2007 einer benutzerdefinierten Funktion eine Beschreibung und Parameterhinweise hinzu? Wenn ich mit der Eingabe eines Funktionsaufrufs für eine integrierte Funktion beginne, zeigt Excel eine Beschreibung und eine Parameterliste - einen Tooltip. Ich möchte das Gleiche für die von mir definierten Funktionen tun.

Nicht nur für den Assistenten zum Einfügen von Formeln, sondern im Formelfeld. Wenn ich "=myFun(" eingebe, erscheint beim "(" der Tooltip, genau wie bei "=average(".

Es gibt keine Hilfe in der VBA-Hilfe, keine auf MSDN und keine in den Excel- und VBA-Foren, die ich finden kann. Dies ist also eindeutig eine lange Sicht.

65
Marc Thibault

Die professionelle Excel-Entwicklung von Stephen Bullen beschreibt das Registrieren von UDFs, sodass eine Beschreibung im Dialogfeld "Funktionsargumente" angezeigt werden kann:

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 Bearbeitungsleiste auf das Symbol "fx" klicken:

enter image description here

53
Fionnuala

Keine Tooltip-Lösung, sondern eine angemessene Problemumgehung:

Beginnen Sie mit der Eingabe von UDF =MyUDF( und drücken Sie dann CTRL + Shift + A und Ihre Funktionsparameter werden angezeigt. Solange diese Parameter aussagekräftige Namen haben, haben Sie zumindest eine Eingabeaufforderung

Zum Beispiel das:

=MyUDF(CTRL + Shift + A

Daraus ergibt sich:

=MyUDF(sPath, sFileName)

86
AutomationMan

Ich weiß, dass Sie eine Antwort dafür akzeptiert haben, aber jetzt gibt es eine Lösung, mit der Sie ein Dialogfenster für den Intellisense-Stil wie bei den anderen Excel-Funktionen aufrufen können, über ein Excel-DNA-Add-In oder durch die Registrierung eines Intellisense-Servers in Ihrem eigenes Add in. Siehe hier .

Nun, ich bevorzuge die Methode von C # - es ist viel einfacher, da innerhalb von Excel-DNA jede Klasse, die IExcelAddin implementiert, vom Add-In-Framework aufgegriffen wird und beim Öffnen/Schließen des Add-Ins AutoOpen() und AutoClose() ausgeführt wird brauche einfach das:

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;
}

diese werden mit Hilfe der ExcelDNA-Anmerkungen kommentiert. Der Intellisense-Server nimmt die Namen und Beschreibungen der Argumente auf.

 enter image description here  enter image description here

Es gibt Beispiele für die Verwendung nur mit VBA, aber ich bin nicht mit meiner VBA beschäftigt, daher verwende ich diese Teile nicht.

8
will

Ich erstelle eine "Hilfe" -Version der Funktion. Wird direkt unter der Funktion in Autocomplete 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 Zeilenumbrüche verbessern die Lesbarkeit bei aktiviertem Zeilenumbruch. 2 Fliegen mit einer Klappe, jetzt hat die Funktion einige Dokumentation.

7
Scott K

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

Credits an Kendall und den ursprünglichen Beitrag hier . Für die UDF-Kategorien

2
Rafa Barragan

Viel tanzen um die Antwort. Sie können die UDF-Kontexthilfe hinzufügen. Sie müssen das Modul jedoch exportieren, den Inhalt in einem Texteditor bearbeiten und anschließend in VBA importieren. Hier ist das Beispiel von Chip Pearson: Code-Attribute hinzufügen

2
RexBarker

Leider gibt es keine Möglichkeit, Tooltips für UDF-Argumente hinzuzufügen.
Um Remous Antwort zu erweitern, finden Sie einen umfassenderen, aber komplexeren Ansatz für die Beschreibung der Funktion Wizard unter
http://www.jkp-ads.com/Articles/RegisterUDF00.asp

2

@ wills Methode ist die beste. Fügen Sie einfach ein paar Zeilen zu den Details hinzu, bei denen die Benutzer ExcelDNA 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.

Legen Sie ein neues Blatt ein, ändern Sie den Namen in "IntelliSense" und fügen Sie die Funktionsbeschreibung als https://github.com/Excel-DNA/IntelliSense/wiki/Getting-Started

Dann genieße es! :)

enter image description here

1
Fisher

Ich habe den Ansatz von @ ScottK ausprobiert, zuerst als Nebenfunktion meiner funktionalen UDF, dann als Standalone-_Help-Suffix-Version, als ich in Schwierigkeiten geriet (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 durcheinander gebracht.

Ich überlegte mir, ob ein unaufmerksamer Benutzer nur den Namen der Funktion eingab und die Klammern geschlossen hatte, während er darüber nachdachte, dass Hilfe erscheinen würde und er unterwegs sein würde. Es war jedoch keine gute Idee, einen Haufen Text in eine einzige Zelle zu kopieren, die ich nicht formatieren kann. Wenn die Funktion in einer Zelle ohne Argumente eingegeben wird, d. H.

   = interpolateLinear() 
or
   = interpolateLinear_Help()

eine msgBox wird mit dem Hilfetext geöffnet. Eine msgBox ist auf ~ 1000 Zeichen begrenzt, vielleicht 1024. Aber das reicht (knapp 8 ^ /) für meine übermäßig ausgetrickene Interpolationsfunktion. Wenn nicht, können Sie immer ein Benutzerformular öffnen und in die Stadt gehen.

Beim ersten Öffnen des Nachrichtenfensters sah es nach Erfolg aus. Aber es gibt ein paar Probleme. Zunächst muss der Benutzer natürlich wissen, dass er die Funktion ohne Argumente eingeben muss (+1 für die UDF-Erweiterung _Help).

Das big Problem ist, die msgBox öffnet sich mehrmals hintereinander, spontan, während sie in nicht zusammenhängenden Teilen der Arbeitsmappe arbeitet. Unnötig zu sagen, es ist sehr nervig. Manchmal geht es weiter, bis ich eine zirkuläre Referenzwarnung bekomme. Stelle dir das vor. Wenn eine UDF die Zellenformel ändern könnte, hätte ich das getan, um sie zu schließen.

Ich weiß nicht, warum Excel die Formel immer wieder neu berechnen muss. Weder die _Help-Standalone-Version noch die Vollversion (im Hilfemodus) hat Präzedenzfälle oder abhängige Personen. 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 tun UDFs. Ich glaube nicht, dass Sie nicht einen Wert zurückgeben können.

Da Sie ein Arbeitsblatt Formel einer UDF nicht ändern können, habe ich versucht, eine bestimmte Zeichenfolge --a value - in die aufrufende Zelle zurückzugeben (die einzige, die Sie in a ändern können UDF), ich denke, ich würde den Zellenwert mit application.caller im nächsten Zyklus überprüfen, meine Zeichenfolge erkennen und die Hilfemeldung nicht erneut anzeigen. Schien damals eine gute Idee - funktionierte nicht. Vielleicht habe ich in meinem Schlafmangel etwas Dummes getan. Die Idee gefällt mir immer noch. Ich werde dies aktualisieren, wenn (wenn) ich das Problem behebe. Meine schnelle Lösung bestand darin, eine Zeile in das Hilfefeld einzufügen: " Sucht nur im Notfall Hilfe. Löschen Sie die beleidigende Formel, um das Elend zu beenden.

In der Zwischenzeit habe ich den Ansatz von Application.MacroOptions ausprobiert. Ziemlich einfach und es sieht professionell aus. Nur ein Problem zu lösen. Ich werde später eine gesonderte Antwort zu diesem Ansatz posten.

0
riderBill