这个问题已经被asked https://stackoverflow.com/questions/4262421/how-to-put-a-tooltip-on-a-user-defined-function before https://stackoverflow.com/questions/5282128/documenting-vba-code-for-excel-auto-complete,但每次接受的答案只是简单地辞职以提供功能描述Application.MacroOptions
(VBA6 http://msdn.microsoft.com/en-us/library/aa195786.aspx) (VBA7 http://msdn.microsoft.com/en-us/library/office/ff838997.aspx),但此信息实际上并未显示为工具提示,因此它并不能解决我的问题。
The Goal
我们都希望能够通过任何方式(VBA、VSTO 或 COM 插件)定义自定义函数,并为用户提供函数及其参数的弹出/工具提示描述的好处,如出现在每个内置 Excel 函数中,无论是内联函数还是公式栏中的函数:
对于这种需求,广泛接受的答案是自定义函数是不可能的,但我想挑战这个信念。
问题
目前,我见过的最好的方法是定义函数(通常使用上面的 MacroOptions 调用),以便在打开函数对话框(公式栏中的 fx 按钮)时,它们的函数和参数描述如下所示:
正如您所看到的,这是一个具有许多参数的复杂函数。如果用户不知道这个“函数参数”对话框以及如何调出它,而只熟悉 Excel 的标准工具提示,那么他们只会看到公式名称,而不会看到其他帮助:
他们没有机会正确提供所需的参数。 (不阅读文档,当然,没有用户这样做。)
Now, a power user might know that by typing Ctrl+Shift+A, they will be granted a auto-completed list of function parameters like so:
但当然,我们也面临与上述相同的问题,即标准 Excel 用户只会习惯第一张图像的默认行为,并且可能永远不会学习该功能。
到目前为止,我们应该清楚为什么这还不够,我们想要每个内置函数都具有的功能 - 告诉用户如何使用该函数的内联工具提示。
戏弄
起初,我可能确信这根本不可能,除非使用本机 Excel 应用程序功能。加载项和 VBA 是可扩展功能,并且此工具提示可能根本不可扩展。但该理论受到分析工具库加载项的存在的挑战。当然,它是在 Microsoft 中构建的,但 ANALYS32.xll 是一个独立的 XLL 插件,就像可以用 VB、C、C++ 和 C# 生成的插件一样。果然,当这个 XLL 加载到应用程序中时功能 http://support.microsoft.com/kb/291058#MORE%20INFORMATION它提供的工具提示具有与本机 Excel 函数相同的工具提示:
当然,如果此信息以某种方式编码在此 XLL 文件中并传递到 Excel,是否有办法使用我们自己的加载项复制它?现在我要开始自学一些关于反编译的知识,看看我是否可以对分析工具库中发生的任何事情进行逆向工程。
您可以如何提供帮助
我几乎可以肯定我已经研究了有关此问题的所有公开信息。如果有人知道一些我不知道的事情可能对此有所帮助,请随时插话。我对逆向工程编译的 dll / xll 非常不熟悉,所以如果有人想打开 Analysis32.xll 的本地副本并弄清楚它的自定义函数定义发生了什么,我将非常感激。否则,我会自己继续深入研究,直到遇到所有死胡同并报告我的发现。