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

100

Diese Frage wurde gefragt , vor , aber jedes Mal , wenn die akzeptierte Antwort ist einfach ein Rücktritt Funktionsbeschreibungen zur Verfügung zu stellen mit Application.MacroOptions( VBA6 ) ( VBA7 ), aber diese Informationen nicht tatsächlich als Tooltip angezeigt, so dass es nicht mein Problem lösen.

Das Ziel

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

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

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 es das Beste, was ich je gesehen habe, Funktionen zu definieren (häufig mit dem obigen MacroOptions-Aufruf), sodass beim Aufrufen des Funktionsdialogs (der Schaltfläche fx in der Formelleiste) die Funktions- und Parameterbeschreibungen wie folgt angezeigt werden:

Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen können, ist dies eine komplizierte Funktion mit vielen Parametern. Wenn der Benutzer diesen Dialog "Funktionsargumente" und dessen Aufforderung nicht kennt und stattdessen nur mit dem Standard-Tooltip von Excel vertraut ist, wird nur der Formelname und keine zusätzliche Hilfe angezeigt:

Geben Sie hier die Bildbeschreibung ein

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

Jetzt weiß ein Power-User möglicherweise, dass er durch Eingabe von Ctrl+ Shift+ Aeine automatisch vervollständigte Liste von Funktionsparametern erhält, wie folgt:

Geben Sie hier die Bildbeschreibung ein

Aber natürlich haben wir das gleiche Problem wie oben: Standard-Excel-Benutzer werden nur vom ersten Bild an an das Standardverhalten gewöhnt und haben diese Funktion wahrscheinlich nie gelernt.

An diesem Punkt sollte klar sein, warum dies nicht ausreicht, und wir möchten, was jede eingebaute Funktion hat - den Inline-Tooltipp, der dem Benutzer die Verwendung der Funktion erklärt.

Der Tease

Zuerst 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 die Existenz des Analysis 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 Tooltipps für native Excel-Funktionen:

Geben Sie hier die Bildbeschreibung ein

Wenn diese Informationen in dieser XLL-Datei verschlüsselt und an Excel weitergegeben werden, gibt es sicherlich eine Möglichkeit, sie mit unseren eigenen Add-Ins zu replizieren. Ich bin jetzt an dem Punkt angelangt, an dem ich anfangen werde, mir ein wenig über das Dekompilieren beizubringen und zu prüfen, ob ich alles, was im Analyse-Toolpak vor sich geht, rückentwickeln kann.

Wie kannst du helfen

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 Reverse Engineering kompilierter DLLs / XLS sehr vertraut. Wenn also jemand Lust hat, seine lokale Kopie von Analysis32.xll und zu öffnen Wenn ich herausfinden würde, was mit den benutzerdefinierten Funktionsdefinitionen los ist, wäre ich sehr dankbar. Ansonsten werde ich mich einfach weiter damit beschäftigen, bis ich alle Sackgassen erreicht habe und zurückmelden, was ich finde.

Alain
quelle
4
Es ist nicht möglich, QuickInfos für UDF-Argumente in aktuellen Excel-Versionen mit einer der verfügbaren Technologien zu erstellen oder anzuzeigen. Quelle von MVP: answers.microsoft.com/en-us/office/forum/office_2007-customize/…
Seidenfeuer
.NET Reflector konnte ANALYS32.xll nicht öffnen, was zu dem Schluss führt, dass es sich nicht um eine .NET-Assembly handelt. Das überrascht mich. Sieht so aus, als müsste ich versuchen, es in Assemblersprache zu dekompilieren?
Alain
5
Klingt interessant, aber ich habe in der Vergangenheit (Büro 97) Tooltips erstellt, die Winapi verwenden. Und auf diese Weise können Sie es tun. Wenn das interessant ist, kann ich die Informationen ausgraben und versuchen, daraus eine Antwort zu machen.
Archlight
1
Ich werde es auch dir besorgen, es wird einige Zeit dauern, es auszugraben. Aber es sollte hier aufstehen, damit andere es benutzen können. Es ist eine einfache und böse Kombination aus winapi / vba / und ich glaube, ich habe es als vb.dll gemacht, aber es ist kein Problem, es auf .net zu
heben
1
Anscheinend stimmt das Excel-Entwicklungsteam hier für diese Funktion ab: excel.uservoice.com/forums/…
Alain

Antworten:

40

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

Mithilfe der UI-Automatisierungsklassen zur Überwachung 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 folgenden Excel-DNA-Attributen definiert ist:

[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 erhalten beide die Funktionsbeschreibung

Bedienungsanleitung

und bei der Auswahl der Funktion erhalten wir Argumenthilfe

Argument Hilfe

Das sieht gut aus, ist aber immer noch sehr schuppig, 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 erfordert jedoch noch viel Arbeit, um alles zuverlässig zu machen. Wer dabei helfen möchte, sollte sich bitte direkt an mich wenden.


Update 18. Juni 2016:

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

Govert
quelle
Leider scheint Excel 2013 oder Windows 8 oder beides für die von der Argumenthilfe verwendete UI Automation TextRange-Unterstützung erforderlich zu sein. Ich würde gerne von jedem hören, der Erfahrung mit Windows UI-Automatisierung hat ...
Govert
Haben Sie versucht, auf ältere Excel-Assemblys zu verweisen, bevor Sie auf ältere Computer kompiliert haben?
Daniel Möller
1
Verweise auf das Excel-Objektmodell sind daran nicht wirklich beteiligt. Aber es gibt sicherlich verschiedene UI-Automatisierungsversionen, die sich auf die Dinge auswirken könnten ...
Govert
1
Dies sind Straßen vor allem da draußen, also bekommst du meine Stimme für das Kopfgeld. Ich möchte sehen, ob ich in naher Zukunft zu dieser Lösung beitragen kann. Halten Sie also Ausschau nach meiner Pull-Anfrage!
Alain
@Alain Gute Arbeit an Govert! & Alain Ich würde gerne sehen, wie du das meisterst.
CodeCamper
1

Wie wäre es mit

  1. Erfassen Sie den eingegebenen Text beim Tastendruckereignis der Zelle. so was
  2. Überprüfen Sie, ob der Text mit benutzerdefinierten Funktionen übereinstimmt.
  3. Wenn sie übereinstimmen, zeigen Sie etwas wie Beschriftung oder Form, um sich als Tooltip auszugeben. so was

Ist das akzeptabel?

Es ist ein bisschen hässlich, aber einfacher.

Clxy
quelle
Dies ist ein interessanter Ausgangspunkt, den ich in Betracht gezogen habe, der jedoch zu Komplikationen führte, wenn fortgeschrittenere Formen der Bearbeitung einer Formel auftraten (z. B. Klicken in der Mitte und Löschen / Hinzufügen von Zeichen oder Hervorheben und Überschreiben eines Teils der Formel oder Verwenden von eine benutzerdefinierte Formel in der Mitte einer anderen Formel.) Diese erfordern mehr als das Überprüfen von Tastendrücken. Wir müssten uns den aktuellen Inhalt der Formelleiste oder Zelle während der Bearbeitung ansehen. Auch dies könnte mit einigen importierten DLL-Bibliotheken erreicht werden und das Erhalten von Hackery handhaben. Auf jeden Fall eine Erkundung wert.
Alain
-1

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 die 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. Implementierungs- und Exportverfahren xlAutoOpen (void) - http://msdn.microsoft.com/en-us/library/office/bb687860.aspx
  3. xlAutoOpen muss nur xlfRegister aufrufen - http://msdn.microsoft.com/en-us/library/office/bb687900.aspx
  4. Besondere Aufmerksamkeit für Tooltips für: pxArgumentText, pxFunctionHelp, pxArgumentHelp1

Leider enthält das Analysis Toolpak-Add-In auch keine Tooltips.

Meine Lösung war falsch, aber mit falschen Informationen, die auf dem Originalplakat veröffentlicht wurden. Ein Bild mit BINOMDIST anzeigen, wenn sein Link deutlich zeigt, dass dies keine Funktion von ANALYS32.xll ist.

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

Ich bin mir sicher, dass meine Antwort zu dem, was auf dem Poster gefragt wurde, um das XLL-Verhalten nachzuahmen, in Bezug auf das, was ANALYS32.xll tut, die richtigste war.

Marcos Zolnowski
quelle
3
Leider führt das Registrieren einer UDF bei xlfRegister nicht dazu, dass Excel diese Informationen als In-Sheet-Intellisense-Tooltips anzeigt. Die dort registrierten Beschreibungen usw. werden nur im Dialogfeld Funktionsargumente angezeigt, das beim Drücken der Taste fx angezeigt wird. Aber darum geht es auf dem Originalplakat nicht.
Govert
@Govert ist es jetzt noch so im Jahr 2016?
beppe9000
@ beppe9000 Ja. Mit der Excel-DNA IntelliSense-Erweiterung erhalten Sie In-Sheet-IntelliSense-Tooltips für UDFs (definiert in XLL oder VBA): github.com/Excel-DNA/IntelliSense
Govert