La ricerca del tooltip della funzione personalizzata di Excel


100

Questa domanda è stata posta in precedenza , ma ogni volta la risposta accettata è semplicemente una rinuncia a fornire descrizioni di funzioni utilizzando Application.MacroOptions( VBA6 ) ( VBA7 ), ma questa informazione in realtà non appare come un suggerimento, quindi non risolve il mio problema.

L'obiettivo. il gol

Ciò che tutti desideriamo è essere in grado di definire funzioni personalizzate con qualsiasi mezzo (VBA, VSTO o componente aggiuntivo COM) e fornire all'utente il vantaggio di una descrizione popup / suggerimento della funzione e dei suoi parametri, come viene visualizzato per ogni funzione di Excel incorporata, in linea o nella barra della formula:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

La risposta ampiamente accettata a questa esigenza è che non è possibile per le funzioni personalizzate, ma desidero sfidare questa convinzione.

Il problema

Attualmente, il meglio che ho visto fare a qualcuno è definire le funzioni (spesso usando la chiamata MacroOptions sopra) in modo che quando si apre la finestra di dialogo delle funzioni (il pulsante fx nella barra della formula) le loro descrizioni di funzioni e parametri appaiono come di seguito:

inserisci qui la descrizione dell'immagine

Come puoi vedere, questa è una funzione complicata con molti parametri. Se l'utente non è a conoscenza di questa finestra di dialogo "argomenti di funzione" e di come visualizzarla, e ha invece familiarità solo con il suggerimento standard di Excel, vedrà solo il nome della formula e nessun aiuto aggiuntivo:

inserisci qui la descrizione dell'immagine

Con cui non hanno alcuna possibilità di fornire correttamente i parametri richiesti. (Senza leggere la documentazione, cosa che ovviamente nessun utente fa mai.)

Ora, un utente esperto potrebbe sapere che digitando Ctrl+ Shift+ A, verrà concesso un elenco di parametri di funzione completato automaticamente in questo modo:

inserisci qui la descrizione dell'immagine

Ma ovviamente, abbiamo lo stesso problema di cui sopra, ovvero che gli utenti standard di Excel verranno utilizzati solo per il comportamento predefinito dalla prima immagine e probabilmente non avranno mai imparato quella funzione.

Dovrebbe essere chiaro a questo punto perché questo non è sufficiente e vogliamo ciò che ogni funzione incorporata ha: il suggerimento in linea che dice all'utente come utilizzare la funzione.

La presa in giro

All'inizio, avrei potuto essere convinto che questo semplicemente non fosse possibile se non con le funzioni dell'applicazione Excel native. I componenti aggiuntivi e VBA sono funzionalità di estensibilità e questo suggerimento potrebbe semplicemente non essere estensibile. Ma questa teoria è messa in discussione dall'esistenza del componente aggiuntivo Analysis Toolpak. Certo, è costruito in Microsoft, ma ANALYS32.xll è un componente aggiuntivo XLL autonomo proprio come quelli che possono essere prodotti in VB, C, C ++ e C #. Abbastanza sicuro, quando questo XLL viene caricato nell'applicazione, le funzioni che rende disponibili hanno gli stessi suggerimenti delle funzioni native di Excel:

inserisci qui la descrizione dell'immagine

Sicuramente se queste informazioni sono in qualche modo codificate in questo file XLL e passate a Excel, c'è un modo per replicarle con i nostri componenti aggiuntivi? Ora sono al punto in cui inizierò a insegnare a me stesso un po 'sulla decompilazione e vedere se posso decodificare qualunque cosa stia succedendo nel toolpak di analisi.

Come puoi aiutare

Sono quasi certo di aver ricercato tutte le informazioni disponibili pubblicamente su questo problema. Se qualcuno sa qualcosa che non so che potrebbe aiutare con questo, sentiti libero di intervenire. Non ho molta familiarità con le dll / xll compilate dal reverse engineering, quindi se qualcuno ha voglia di aprire la propria copia locale di Analysis32.xll e capire cosa sta succedendo con le sue definizioni di funzioni personalizzate, sarei molto grato. Altrimenti, continuerò a scavare in questo da solo finché non avrò raggiunto tutti i vicoli ciechi e riferirò ciò che trovo.


4
Non è possibile creare o mostrare descrizioni comandi per argomenti UDF nelle versioni correnti di Excel utilizzando una qualsiasi delle tecnologie disponibili. Fonte da MVP: answers.microsoft.com/en-us/office/forum/office_2007-customize/...
silkfire

.NET Reflector non è riuscito ad aprire ANALYS32.xll, concludendo che non è un assembly .NET. Questo mi sorprende. Sembra che dovrò provare a decompilarlo in linguaggio assembly?
Alain

5
Sembra interessante, ma in passato (Office 97) ho creato descrizioni comandi utilizzando Winapi. E in questo modo puoi farlo. Se questo è interessante, posso scavare le informazioni e provare a ricavarne una risposta.
Archlight

1
Lo prenderò anche tu, ci vorrà del tempo per scavare. Ma dovrebbe salire qui per essere utilizzato da altri. La sua combinazione bassa e malvagia di winapi / vba / e penso di averlo creato come vb.dll ma non è un problema sollevarlo a .net
Archlight

1
Apparentemente il team di sviluppo di Excel sta prendendo voti per questa funzione qui: excel.uservoice.com/forums/…
Alain

Risposte:


40

Ho pubblicato un progetto proof-of-concept su GitHub come progetto Excel-DNA IntelliSense , implementandolo.

Utilizzando le classi di automazione interfaccia utente per monitorare gli eventi appropriati dell'interfaccia utente di Excel, viene visualizzato un modulo quando appropriato.

Il codice è racchiuso come un componente aggiuntivo Excel-DNA e funziona sulla mia macchina Excel 2013 / Windows 8. Ho provato un'altra configurazione (Excel 2010 a 64 bit su Windows Server 2008) e ho avuto problemi seri.

Per una funzione C # definita con gli attributi Excel-DNA in questo modo:

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

otteniamo sia la descrizione della funzione

Descrizione della funzione

e quando si seleziona la funzione, si ottiene l'aiuto dell'argomento

Aiuto per argomenti

Sembra carino, ma è ancora tutto molto instabile, funziona solo sulla mia macchina e talvolta si blocca Excel. Potrebbe essere un inizio, però ...


Aggiornamento 9 maggio 2014:

Ho fatto dei progressi per capire come far funzionare l'argomento con le versioni precedenti di Excel e Windows. Tuttavia, è ancora necessario molto lavoro per ottenere tutto affidabile. Chiunque volesse aiutare con questo dovrebbe contattarmi direttamente.


Aggiornamento 18 giugno 2016:

Il supporto di Excel UDF IntelliSense per i componenti aggiuntivi di Excel-DNA e le funzioni VBA è ora in fase di test. Consulta la pagina Introduzione su GitHub per istruzioni.


Purtroppo, sembra che Excel 2013 o Windows 8 o entrambi siano necessari per il supporto TextRange di automazione dell'interfaccia utente utilizzato dall'argomento della guida. Mi piacerebbe sentire da chiunque abbia qualche esperienza di automazione dell'interfaccia utente di Windows ...
Govert

Hai provato a fare riferimento ad assembly di Excel precedenti prima di compilare su macchine meno recenti?
Daniel Möller

1
I riferimenti al modello a oggetti di Excel non sono realmente coinvolti in questo. Ma ci sono sicuramente diverse versioni di UI Automation che potrebbero influenzare le cose ...
Govert

1
Sono strade più avanti di qualsiasi cosa là fuori finora, quindi ottieni il mio voto per la taglia. Ho intenzione di vedere se posso contribuire a questa soluzione nel prossimo futuro, quindi tieni d'occhio la mia richiesta di pull!
Alain

@Alain Buon lavoro a Govert! & Alain mi piacerebbe vederti padroneggiare questo.
CodeCamper

1

Che ne dite di

  1. Cattura l'immissione di testo all'evento di pressione di un tasto della cella. come questo
  2. Controlla se il testo corrisponde alle funzioni personalizzate.
  3. Se corrisponde, mostra qualcosa come l'etichetta o la forma per fingere di essere un suggerimento. come questo

È accettabile?

È un po 'brutto ma più facile.


Questo è un punto di partenza interessante che ho considerato, ma mi sono imbattuto in complicazioni quando si incontrano forme più avanzate di modifica di una formula (come fare clic da qualche parte nel mezzo e cancellare / aggiungere caratteri, o evidenziare e sovrascrivere una parte della formula, o usare una formula personalizzata nel mezzo di qualche altra formula.) Questi richiedono più del controllo della pressione dei tasti, avremmo bisogno di guardare il contenuto corrente della barra della formula o della cella a metà modifica. Anche questo potrebbe essere ottenuto con alcune librerie dll importate e gestire gli hacker. Sicuramente vale la pena esplorare.
Alain

-1

Cos'è XLL?

Un XLL è una DLL che esporta diverse procedure chiamate da Excel o da Excel Add-in Manager. http://msdn.microsoft.com/en-us/library/office/bb687861.aspx

Come sviluppi l'XLL?

Excel XLL SDK con Visual C ++ (o qualsiasi cosa che possa compilare una DLL e chiamare le procedure SDK)

Dove posso trovare una guida rapida per creare un semplice XLL?

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

Come ottengo i suggerimenti?

  1. Implementa la tua funzione come una procedura ed esportala
  2. Procedura di implementazione ed esportazione xlAutoOpen (void) - http://msdn.microsoft.com/en-us/library/office/bb687860.aspx
  3. xlAutoOpen deve solo chiamare xlfRegister - http://msdn.microsoft.com/en-us/library/office/bb687900.aspx
  4. Per i suggerimenti, un'attenzione speciale per: pxArgumentText, pxFunctionHelp, pxArgumentHelp1

Purtroppo, anche il componente aggiuntivo Analysis Toolpak non ha suggerimenti.

La mia soluzione era sbagliata, ma con informazioni sbagliate pubblicate dal poster originale. Mostra un'immagine con DISTRIB.BINOM, se il suo collegamento mostra chiaramente che questa non è una funzione di ANALYS32.xll.

Ciò significa che stavo cercando di risolvere una domanda impossibile. Perché non esiste un XLL che possa fare ciò che il poster ha richiesto. Se trovi una versione di Excel che mostra i suggerimenti di XLL, fatemelo sapere.

Riguardo a ciò che il poster ha chiesto, cercando di imitare il comportamento XLL, sono sicuro che la mia risposta è stata la più corretta in relazione a ciò che ANALYS32.xll fa.


3
Purtroppo, la registrazione di un UDF con xlfRegister fa non causa Excel per visualizzare tali informazioni come in fogli intellisense suggerimenti. Le descrizioni ecc. Registrate sono mostrate solo nella finestra di dialogo Argomenti funzione, che si apre quando si preme il pulsante fx. Ma non è quello che chiede il poster originale.
Govert

@Govert è ancora così nel 2016?
beppe9000

@ beppe9000 Sì. È possibile ottenere descrizioni comandi IntelliSense nel foglio per UDF (definite in XLL o VBA) utilizzando l'estensione Excel-DNA IntelliSense: github.com/Excel-DNA/IntelliSense
Govert
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.