这个问题一直是 问道 之前,但每次接受的答案只是一个辞职,以提供使用 Application.MacroOptions
(VBA6)(VBA7)的函数描述,但这个信息实际上并没有作为工具提示出现,所以它不能解决我的问题。
目标
我们都希望能够通过任何方式(VBA、 VSTO 或 COM 外接程序)定义自定义函数,并给用户提供函数及其参数的弹出/工具提示描述,就像每个内置 Excel 函数一样,无论是在内联中还是在公式栏中:
对这一需求的普遍接受的答案是,定制功能是不可能的,但我希望对这一信念提出质疑。
问题
目前,我见过的最好的方法就是定义函数(通常使用上面的 MacroOptions 调用) ,这样当打开函数对话框(公式栏中的 fx 按钮)时,函数和参数的描述如下所示:
如您所见,这是一个有许多参数的复杂函数。如果用户没有意识到这个“函数参数”对话以及如何提出它,而只是熟悉 Excel 的标准工具提示,他们只会看到公式名称,没有额外的帮助:
它们没有机会正确地提供所需的参数。(当然,没有用户会阅读文档。)
现在,高级用户可能知道,通过键入 Ctrl + Shift + A,他们将获得一个自动完成的函数参数列表,如下所示:
但是当然,我们也有同样的问题,那就是标准的 excel 用户只会习惯于第一张图片的默认行为,而且很可能永远不会学会这个特性。
这一点应该很清楚,为什么这是不够的,我们希望每一个内置的功能有-在线工具-提示,告诉用户如何使用的功能。
挑逗
起初,我可能确信这是不可能的,除非使用本机 Excel 应用程序函数。外接程序和 VBA 是可扩展性特性,而这个工具提示可能根本就不可扩展。但是这个理论受到了分析工具包插件的挑战。当然,它是在微软内置的,但是 AnalyS32.XLL 是一个独立的 XLL 插件,就像那些可以在 VB、 C、 C + + 和 C # 中生成的插件一样。毫无疑问,当这个 XLL 加载到应用程序中时,它提供的 功能具有与本机 Excel 函数相同的工具提示:
当然,如果这些信息以某种方式编码在这个 XLL 文件中并传递给 Excel,那么有办法用我们自己的外接程序复制它吗?现在我要开始教自己一些反编译的知识,看看我是否可以对分析工具包中发生的事情进行逆向工程。
你能帮什么忙
我几乎可以肯定,我已经研究了所有关于这个问题的公开信息。如果有人知道一些我不知道的事情,可能会对此有所帮助,请随时加入我们。我对反向工程编译的 dlls/xlls 非常不熟悉,所以如果有人想打开他们本地的 Analysis32.xll 并弄清楚它的自定义函数定义是怎么回事,我会非常感激。否则,我会继续自己调查直到我查到所有的死胡同然后汇报我的发现。