Comment mettre une bulle d'aide sur une fonction définie par l'utilisateur
dans Excel 2007, comment ajouter une description et des conseils de paramètre à une fonction définie par l'utilisateur? Lorsque je commence à taper une fonction invocation pour une fonction intégrée, Excel affiche une description et une liste de paramètres--une infobulle. J'aimerais faire de même pour les fonctions que j'définir.
pas seulement pour le magicien d'insertion de formule, mais dans la boîte de formule, donc si je touche "=myFun("
, à la "("
l'infobulle apparaît juste comme il le fait pour "=average("
il n'y a aucune aide dans VBA Help, Aucune sur MSDN et aucune sur aucun des forums dédiés Excel et VBA que je peux trouver, donc c'est clairement un long shot.
9 réponses
Professionnel Excel de Développement par Stephen Bullen décrit comment le registre UDFs, qui permet description apparaissent dans la Fonction Dialogue Arguments:
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
de: http://www.ozgrid.com/forum/showthread.php?t=78123&page=1
pour afficher la boîte de dialogue Arguments de fonction, tapez le nom de la fonction et appuyez sur Ctrl a . Alternativement, cliquez sur le symbole "fx" dans la barre de formule:
Pas une info-bulle de la solution, mais une solution adéquate:
tapez UDF =MyUDF(
puis appuyez sur CTRL + Shift + A et vos paramètres de fonction seront affichés. Tant que ces paramètres ont des noms significatifs vous avez au moins un prompt viable
par exemple:
=MyUDF(
+ Ctrl + Shift + Un
se transforme en ceci:
=MyUDF(sPath, sFileName)
je sais que vous avez accepté une réponse pour cela, mais il ya maintenant une solution qui vous permet d'obtenir une boîte d'achèvement de style intellisense pop up comme pour les autres fonctions excel, via un Excel-ADN ajouter, ou en enregistrant un serveur intellisense à l'intérieur de votre propre add in. voir ici .
maintenant, je préfère la façon C# de le faire - c'est beaucoup plus simple, comme à L'intérieur D'Excel-ADN, toute classe qui met en œuvre IExcelAddin
est ramassé par le cadre addin et a AutoOpen()
et AutoClose()
exécuter lorsque vous ouvrez/fermez les ajouter dans. Donc vous avez juste besoin de ceci:
namespace MyNameSpace {
public class Intellisense : IExcelAddIn {
public void AutoClose() {
}
public void AutoOpen() {
IntelliSenseServer.Register();
}
}
}
et puis (et ceci est juste pris de la page github), vous avez juste besoin D'utiliser les annotations ExcelDNA sur vos fonctions:
[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;
}
qui sont annotés en utilisant les annotations ExcelDNA, le serveur intellisense récupérera les noms d'arguments et les descriptions.
il y a des exemples pour l'utiliser avec juste VBA aussi, mais je ne suis pas trop dans mon VBA, donc je n'utilise pas ces pièces.
je crée juste une version" help " de la fonction. Apparaît juste au-dessous de la fonction dans autocomplete - l'utilisateur peut la sélectionner à la place dans une cellule adjacente pour des instructions.
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 master@foo.com for more information."
END FUNCTION
Les retours chariot améliorer la lisibilité avec wordwrap. 2 oiseaux avec une pierre, maintenant la fonction a une certaine documentation.
malheureusement, il n'y a aucun moyen d'ajouter des infobulles pour les Arguments UDF.
Pour étendre la réponse de Remou vous pouvez trouver une approche plus complète mais plus complexe aux descriptions pour L'Assistant de fonction à
http://www.jkp-ads.com/Articles/RegisterUDF00.asp
beaucoup de danse autour de la réponse. Vous pouvez ajouter L'aide de contexte UDF, mais vous devez exporter le Module et éditer le contenu dans un éditeur de texte, puis le réimporter dans VBA. Voici l'exemple de Chip Pearson: ajouter des attributs de Code
@ la méthode de will est la meilleure. Il suffit d'ajouter quelques lignes sur les détails pour les gens n'ont pas utilisé ExcelDNA avant comme moi.
Download Excel-DNA IntelliSense from https://github.com/Excel-DNA/IntelliSense/releases
il y a deux versions, une pour 64, vérifiez votre version Excel. Pour mon cas, j'utilise la version 64.
ouvrir Excel / Developer/Add-Ins / parcourir et sélectionner ExcelDna.IntelliSense64.xll.
insérer une nouvelle feuille, changer le nom en " IntelliSense ", ajouter la description de la fonction, en tant que https://github.com/Excel-DNA/IntelliSense/wiki/Getting-Started
alors profitez! :)
vous pouvez aussi utiliser cette Macro pour assigner des Descriptions aux arguments et à L'UDF:
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
Crédits Kendall et le post original ici . Pour les catégories UDF
j'ai essayé l'approche de @ScottK, d'abord comme une caractéristique secondaire de mon UDF fonctionnel, puis comme une version autonome de suffixe _Help lorsque j'ai rencontré des problèmes (voir ci-dessous). Avec le recul, cette dernière approche est de toute façon meilleure--plus évidente pour un utilisateur suffisamment attentif pour voir un bout d'outil, et elle n'encombre pas le code fonctionnel.
j'ai pensé que si un utilisateur inattendu tapait le nom de la fonction et fermait les parenthèses pendant qu'il y réfléchissait, l'aide apparaîtrait et il serait être sur son chemin. Mais jeter un tas de texte dans une seule cellule que je ne peux pas formater ne semble pas être une bonne idée. Au lieu de cela, lorsque la fonction est entrée dans une cellule sans arguments i.e.
= interpolateLinear()
or
= interpolateLinear_Help()
une boîte msg s'ouvre avec le texte d'aide. Une msgBox est limitée à ~1000 caractères, peut-être 1024. Mais c'est suffisant (à peine 8^/) pour ma fonction d'interpolation trop piégée. Si ce n'est pas le cas, vous pouvez toujours ouvrir un formulaire d'utilisateur et aller en ville.
le premier quand la boîte de message s'est ouverte, ça avait l'air d'un succès. Mais il ya un couple de problèmes. Tout d'abord, l'utilisateur doit savoir entrer la fonction sans argument (+1 pour le suffixe _HELP UDF).
le grand problème est, la boîte msg rouvre plusieurs fois de suite, spontanément tout en travaillant dans des parties non liées du cahier d'exercices. Inutile de dire que c'est très ennuyeux. Parfois, il continue jusqu'à ce que je reçoive une circulaire référence avertissement. Aller à la figure. Si un UDF pouvait changer la formule de la cellule, je l'aurais fait pour la faire taire.
Je ne sais pas pourquoi Excel ressent le besoin de recalculer la formule encore et encore; ni la version autonome de _Help, ni la version complète (en mode d'aide) n'ont de précédents ou de personnes à charge. Il n'y a pas d'application .déclaration volatile n'importe où. Bien sûr, la fonction renvoie une valeur à la cellule appelante. Peut-être que déclenche le recalcul? Mais c'est ce que font les UDF. Je ne pense pas que vous pouvez pas retourner une valeur.
puisque vous ne pouvez pas modifier une feuille de travail formule à partir d'un UDF, j'ai essayé de retourner une chaîne spécifique --une valeur --à la cellule d'appel (la seule que vous pouvez changer la valeur d'un UDF), en me disant que j'inspecterais la valeur de la cellule en utilisant application.appelant sur le cycle suivant, repérer ma corde, et ne pas savoir à afficher à nouveau le message d'aide. Semblait une bonne idée à l'époque-n'a pas fonctionné. Peut-être que j'ai fait quelque chose de stupide dans mon état de manque de sommeil. J'aime toujours l'idée. Je le mettrai à jour quand (si) je corrigerai le problème. Ma solution rapide a été d'ajouter une ligne sur la boîte d'aide: " chercher de l'aide seulement en cas d'urgence. Supprimer la formule offensante pour mettre fin à la misère.
pendant ce temps, j'ai essayé la demande.MacroOptions approche. Plutôt facile, et ça a l'air professionnel. Juste un problème de travail. Je posterai une réponse séparée sur cette approche plus tard.