webentwicklung-frage-antwort-db.com.de

Die Suche nach dem Tooltip für benutzerdefinierte Excel-Funktionen

Diese Frage war gestelltvor , aber jedes Mal, wenn die akzeptierte Antwort einfach ein Rücktritt ist, um Funktionsbeschreibungen mit Application.MacroOptions ( VBA6 bereitzustellen =) ( VBA7 ), aber diese Information erscheint nicht als Tooltip und löst mein Problem nicht.

Das Ziel

Was wir alle wünschen, ist die Möglichkeit, benutzerdefinierte Funktionen mit beliebigen Mitteln (VBA-, VSTO- oder COM-Add-In) zu definieren und dem Benutzer den Vorteil einer Popup-/QuickInfo-Beschreibung der Funktion und ihrer Parameter zu geben wird für jede integrierte Excel-Funktion entweder inline oder in der Bearbeitungsleiste angezeigt:

enter image description here

enter image description here

Die allgemein akzeptierte Antwort auf dieses Bedürfnis ist, dass es für benutzerdefinierte Funktionen nicht möglich ist, aber ich möchte diesen Glauben in Frage stellen.

Das Problem

Derzeit ist das Beste, was ich je gesehen habe, das Definieren von Funktionen (häufig mithilfe des obigen MacroOptions-Aufrufs), sodass beim Aufrufen des Funktionsdialogs (der Schaltfläche fx in der Formelleiste) deren Funktions- und Parameterbeschreibungen wie folgt aussehen:

enter image description here

Wie Sie sehen, ist dies eine komplizierte Funktion mit vielen Parametern. Wenn der Benutzer dieses Dialogfeld "Funktionsargumente" nicht kennt und nicht weiß, wie es aufgerufen wird, und stattdessen nur mit der Standard-QuickInfo von Excel vertraut ist, wird nur der Name der Formel und keine zusätzliche Hilfe angezeigt:

enter image description here

Womit sie keine Chance haben, die erforderlichen Parameter korrekt anzugeben. (Ohne die Dokumentation zu lesen, was natürlich kein Benutzer jemals tut.)

Nun kann ein Power-User dies durch Eingabe erkennen Ctrl+Shift+Aerhalten sie eine automatisch vervollständigte Liste von Funktionsparametern wie folgt:

enter image description here

Wir haben jedoch das gleiche Problem wie oben: Standard-Excel-Benutzer sind nur an das Standardverhalten vom ersten Bild an gewöhnt und haben diese Funktion wahrscheinlich nie gelernt.

An dieser Stelle sollte klar sein, warum dies nicht ausreicht, und wir möchten, dass jede eingebaute Funktion einen Inline-Tooltipp enthält, der dem Benutzer die Verwendung der Funktion erklärt.

The Tease

Anfangs war ich vielleicht davon überzeugt, dass dies nur mit den nativen Excel-Anwendungsfunktionen möglich ist. Add-Ins und VBA sind Erweiterungsfunktionen, und dieser Tooltipp ist möglicherweise einfach nicht erweiterbar. Diese Theorie wird jedoch durch das Vorhandensein des Analyse-Toolpak-Add-Ins in Frage gestellt. Sicher, es ist in Microsoft integriert, aber ANALYS32.xll ist ein eigenständiges XLL-Add-In, genau wie diejenigen, die in VB, C, C++ und C # erstellt werden können. Sicher genug, wenn diese XLL in die Anwendung geladen wird, haben die Funktionen , die sie zur Verfügung stellt, die gleichen QuickInfos von nativen Excel-Funktionen:

enter image description here

Wenn diese Informationen in dieser XLL-Datei irgendwie verschlüsselt und an Excel weitergegeben werden, gibt es doch eine Möglichkeit, sie mit unseren eigenen Add-Ins zu replizieren? Ich bin an dem Punkt angelangt, an dem ich anfangen werde, mich ein wenig mit Dekompilieren und der Frage zu beschäftigen, ob ich das, was im Analyse-Toolpaket vor sich geht, rückentwickeln kann.

Wie Sie helfen können

Ich bin mir fast sicher, dass ich alle öffentlich verfügbaren Informationen zu diesem Problem recherchiert habe. Wenn jemand etwas weiß, von dem ich nicht weiß, dass es dabei helfen könnte, können Sie sich gerne einschalten. Ich bin mit dem Reverse Engineering kompilierter Dlls/Xlls sehr unbekannt Wenn ich herausfinde, was mit den benutzerdefinierten Funktionsdefinitionen los ist, wäre ich Ihnen sehr verbunden. Ansonsten werde ich mich weiter damit beschäftigen, bis ich alle Sackgassen erreicht habe, und berichten, was ich gefunden habe.

99
Alain

Ich habe ein Proof-of-Concept-Projekt in GitHub als Excel-DNA IntelliSense -Projekt veröffentlicht und dieses implementiert.

Mithilfe der UI-Automatisierungsklassen zum Überwachen der entsprechenden Ereignisse der Excel-Benutzeroberfläche wird bei Bedarf ein Formular angezeigt.

Der Code wird als Excel-DNA Add-In verpackt und funktioniert auf meinem Excel 2013/Windows 8-Computer. Ich habe eine andere Konfiguration getestet (64-Bit Excel 2010 unter Windows Server 2008) und hatte ernsthafte Probleme.

Für eine C # -Funktion, die mit den Excel-DNA-Attributen wie folgt definiert wurde:

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

wir bekommen beide die Funktionsbeschreibung

Function Description

und bei der auswahl der funktion erhalten wir argumenthilfe

Argument Help

Das sieht nett aus, aber es ist alles immer noch sehr flockig, funktioniert nur auf meinem Computer und stürzt manchmal in Excel ab. Es könnte jedoch ein Anfang sein ...


Update 9. Mai 2014:

Ich habe einige Fortschritte gemacht, um herauszufinden, wie das Argument unter älteren Excel- und Windows-Versionen funktioniert. Es ist jedoch noch viel Arbeit erforderlich, um alles zuverlässig zu machen. Wer dabei helfen möchte, sollte sich direkt an mich wenden.


Update 18. Juni 2016:

Excel UDF IntelliSense-Unterstützung für Excel-DNA-Add-Ins und VBA-Funktionen wird jetzt getestet. Anweisungen finden Sie auf der Seite Erste Schritte auf GitHub.

39
Govert

Wie wäre es mit

  1. Erfassen Sie den eingegebenen Text bei einem Tastendruckereignis der Zelle. so
  2. Überprüfen Sie, ob der Text mit benutzerdefinierten Funktionen übereinstimmt.
  3. Wenn Übereinstimmungen vorhanden sind, zeigen Sie so etwas wie Beschriftung oder Form als QuickInfo an. so

Ist das akzeptabel?

Es ist ein bisschen hässlich, aber einfacher.

1
Clxy

Was ist XLL?

Eine XLL ist eine DLL, die mehrere Prozeduren exportiert, die von Excel oder dem Excel-Add-In-Manager aufgerufen werden. http://msdn.Microsoft.com/en-us/library/office/bb687861.aspx

Wie entwickelt man das XLL?

Excel XLL SDK mit Visual C++ (oder alles, was eine DLL kompilieren und die SDK-Prozeduren aufrufen kann)

Wo finde ich eine Kurzanleitung zum Erstellen einer einfachen XLL?

http://support.Microsoft.com/kb/178474

Wie bekomme ich Tooltips?

  1. Implementieren Sie Ihre Funktion als Prozedur und exportieren Sie sie
  2. Implementieren und exportieren Sie die Prozedur xlAutoOpen (void) - http://msdn.Microsoft.com/en-us/library/office/bb687860.aspx
  3. xlAutoOpen muss nur xlfRegister - http://msdn.Microsoft.com/en-us/library/office/bb687900.aspx aufrufen
  4. Bei QuickInfos besonders beachten für: pxArgumentText, pxFunctionHelp, pxArgumentHelp1

Leider enthält das Analyse-Toolpak-Add-In auch keine QuickInfos.

Meine Lösung war falsch, aber mit falschen Informationen, die auf dem Originalposter veröffentlicht wurden. Zeigen eines Bildes mit BINOMDIST, wenn sein link klar zeigt, dass dies keine Funktion von ANALYS32.xll ist.

Das heißt, ich habe versucht, eine unmögliche Frage zu lösen. Denn es gibt kein XLL, das das kann, was das Poster verlangt. Wenn Sie eine Excel-Version finden, die QuickInfos zu XLLs enthält, lassen Sie es mich bitte wissen.

In Bezug auf die Frage des Posters nach dem XLL-Verhalten war meine Antwort in Bezug auf ANALYS32.xll mit Sicherheit die zutreffendste.

0