寻找Excel自定义函数工具提示

2024-04-06

这个问题已经被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 的本地副本并弄清楚它的自定义函数定义发生了什么,我将非常感激。否则,我会自己继续深入研究,直到遇到所有死胡同并报告我的发现。


我已经将一个概念验证项目发布到 GitHub 作为Excel-DNA IntelliSense https://github.com/Excel-DNA/IntelliSense项目,实施这一点。

使用 UI 自动化类监视相应的 Excel 用户界面事件,在适当的时候显示一个表单。

该代码被包装为Excel-DNA http://excel-dna.net加载项,适用于我的 Excel 2013 / Windows 8 计算机。我在另一种配置(Windows Server 2008 上的 64 位 Excel 2010)上进行了测试,但遇到了严重问题。

对于使用 Excel-DNA 属性定义的 C# 函数,如下所示:

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

我们得到了函数描述

当选择函数时,我们会得到参数帮助

这看起来不错,但仍然很不稳定,只能在我的机器上运行,有时会使 Excel 崩溃。不过,这可能是一个开始……


2014 年 5 月 9 日更新:

我在弄清楚如何使参数有助于在旧版 Excel 和 Windows 版本下工作方面取得了一些进展。然而,仍然需要做大量的工作才能使一切变得可靠。任何愿意提供帮助的人请直接与我联系。


2016 年 6 月 18 日更新:

Excel UDF IntelliSense 对 Excel-DNA 加载项和 VBA 函数的支持目前正在测试中。请参阅入门 https://github.com/Excel-DNA/IntelliSense/wiki/Getting-StartedGitHub 页面上的说明。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

寻找Excel自定义函数工具提示 的相关文章

随机推荐

  • jquery回调

    我需要能够在准备好后对函数的执行进行回调 jQuery document ready function execute function 1 only when finish do function 2 这样做的好方法是什么 加载文档后执行
  • Oracle InvalidOperationException - 尝试从表中选择时

    我有一个参数表 其中有一个参数来说明我的程序是否应该运行 我试图获取该值来检查函数 这是函数 private static bool shouldRun OracleCommand c conn CreateCommand c Comman
  • 如何在单个查询中使用不同参数执行多个联接

    我有两个表 问题 question id 和question exclusion question type question sub type question id 如果我指定 Question type 和 Question sub
  • 如何以编程方式调用视图控制器?

    我已经查看了我能找到的所有关于此问题的教程 但仍然没有答案 我需要从代码中调用另一个视图 我在用UIStoryboards 我通过控制拖动多次改变了视图UIButtons 但现在它必须来自代码 如果这是用户第一次打开应用程序 我尝试从主菜单
  • 加速 matplotlib 散点图绘制

    我正在尝试制作一个交互式程序 主要使用 matplotlib 来制作相当多的点 10k 100k 左右 的散点图 现在它可以工作 但是更改需要很长时间才能呈现 少量的点还可以 但是一旦数量增加 事情就会很快变得令人沮丧 所以 我正在研究加速
  • Activity 和 JobIntentService 生命周期

    我正在运行一个JobIntentService在后台执行任务 使用理由JobIntentService这样用户就可以在操作发生时最小化屏幕 即使 Android 操作系统破坏了该 ActivityJobIntentService仍将继续运行
  • 如何为可变特征创建描述符?

    的文档CBMutableDescriptor initWithType value 表示为类型参数传递 标识特征的 128 位 UUID 然后它继续说你应该只使用其中之一CBUUIDCharacteristicUserDescription
  • 手动编辑 *.designer.cs 文件

    我知道 designer cs文件包含由 Visual Studio 中的可视表单设计器生成的数据 不过 我还有一些额外的方法 我想将它们放入 designer cs文件 因为它们负责较低级别的表单处理 例如 我的视觉状态管理器的一部分 T
  • Python 找不到 Pyomo

    我很困惑为什么 Python 不导入 pyomo 我可以找到该目录并看到它已安装 234 pyomo user pip show pyomo Name Pyomo Version 5 1 1 Summary Pyomo Python Opt
  • Jquery AJAX post 更新数据库

    我在 HTML 表单中使用以下代码 尝试制作一种 彩票刮刮票 类型的效果 有一个网格 每个项目都有一个来自数据库的动态数字 单击正方形会调用 clickme 函数 进行 db 调用 然后更改图像 我只是在第一部分尝试更新数据库 我的 PHP
  • ControllerPlugin 类中的 ZF2 getServiceLocator

    我正在尝试在插件类中获取服务定位器 实体管理器 我怎样才能得到它 在我的控制器中我得到的是这样的 public function getEntityManager if null this gt em this gt em this gt
  • 我可以在 SQL Server 中选择 0 列吗?

    我希望这个问题比类似的问题好一点创建一个没有列的表 https stackoverflow com questions 2438321 create a table without columns 是的 我问的是一些最让人觉得毫无意义的学术
  • 表不必要的冗余

    我的物品列出如下 当然这只是一个总结 但我正在使用 详细信息 表中显示的方法来表示一种 继承 类型 可以这么说 因为 项目 和 可下载 将是相同的 除了每个都有一些相关的附加字段只对他们而言 我的问题是在这个设计模式中 这种事情在我们的项目
  • 当前不会命中断点。该文档尚未加载任何符号

    我用谷歌搜索了这个特定问题 但似乎找不到可行的解决方案 症状 在 Web 应用程序项目中的 aspx 页面的代码隐藏中添加断点后 该断点在页边空白处显示为一个空心的红色圆圈 圆圈右下角有一个用黄色三角形括起来的感叹号 将鼠标悬停在断点上时
  • 使用自定义对象的 JTable、JComboBox

    您好 如果您将 JComboBox 放入 JTable 中并将 String 数组放入 JComboBox 中 则一切正常 如果您将自己的数据类型放入 JComboBox 则在同一列中选择值会变得很复杂 这是官方示例 http docs o
  • 在单调递增然后递减的序列 cera 中查找一个数

    查找单调增加然后单调减少的序列中的最大值或最小值可以在 O log n 内完成 但是 如果我想检查一个数字是否存在于这样的序列中 这也可以在 O log n 中完成吗 我认为这是不可能的 考虑这个例子 1 4 5 6 7 10 8 3 2
  • 如何创建元组数组?

    我知道要在 C 中创建元组 我们使用以下格式 Tuple
  • Azure SQL 数据库 Bacpac 本地还原

    我使用 Azure 管理控制台中的 导出 选项创建了 Azure SQL 数据库的 BACPAC 备份 将其下载到我的计算机后 我对如何将其恢复到本地 SQL Server 实例有点困惑 我遇到了 DacImportExportCli 工具
  • 在 Visual Studio 中使用 FFmpeg

    我正在尝试在 Visual Studio 2010 的 C 项目中使用 FFmpeg 我想将这些库作为静态链接文件包含在内 简单的程序如libavcodec api example c http cekirdek pardus org tr
  • 寻找Excel自定义函数工具提示

    这个问题已经被asked https stackoverflow com questions 4262421 how to put a tooltip on a user defined function before https stac