sou*_*ned 5 excel vba autocomplete user-defined-functions
我发现本网站、外部论坛和各种讨论组上有数千条与 UDF 工具提示相关的评论和数百个问题。我确实是 VBA 和 Excel 的新手,但最近学到了很多东西。随着我投入学习的时间,我也看过这些论坛,所以请不要向我发送第三方解决方法(如 Excel-DNA 等)的链接。这不是同一个问题。我不想填充工具提示,我想将 UDF 参数自动补全到单元格中。
简而言之,标题说明了一切,有没有一种方法可以自动将 UDF 参数填充到字符串中。
我在文档网站上搜索了与此相关的任何内容,但没有成功。因此,下一步是找到一种对用户相对容易、对用户计算机内存极其友好的解决方案,更不用说开发友好,不需要花费大量时间,内置跨平台兼容性并且易于使用定制。
由于我是 Excel 新手,我不确定加载项如何在 Workbook 对象方面工作。我可以通过反复试验找到答案,但我在文档网站上找到的最接近我想要的结果的是强制自动更正:
With Application.AutoCorrect
.AddReplacement "=EPP(", "=EPP(payrate,hrs)"
End With
Run Code Online (Sandbox Code Playgroud)
这很快就能完成工作!........但仅此而已。
这样做效果很好,有两个原因:
=符号,因此我无需进行太多编码即可找出用户输入的内容以及其他原因每有一个好的理由,就会有十个不好的理由。我将重点强调几点:
我能够通过将其更改为以下内容来解决其中一些问题:
With Application.AutoCorrect
.AddReplacement "=EPP(", "=EPP(<payrate>,<hrs>"
End With
Run Code Online (Sandbox Code Playgroud)
这里发生的情况是,如果用户按 Enter,Excel 将自动包含右括号,但是,在这种情况下会抛出错误,“Excel 认为这是一个公式错误:1+1 = 2”,因为 Excel 认为这不是由于符号而形成的公式<>。所以用户现在 100% 确定他们需要审核。
Butttttt......尽管说了这么多,做了这么多,仍然存在一个巨大的障碍,用户必须按下空格才能填充。哎哟。只要我使用过Excel,我就从来没有在选择一个函数后按过空格键,我无法想象这对任何人来说都是自然而然的事情。
因此,我尝试了几种方法来规避这种行为。到目前为止没有任何效果。Application.SendKeys我尝试在自动更正对象中使用:
With Application.AutoCorrect
.AddReplacement "=EPP(", "=EPP("
.Application.SendKeys "^+A" 'CTRL + SHIFT + A also tried " " for space
End With
Run Code Online (Sandbox Code Playgroud)
接下来,我尝试使用Application.OnKey事件来处理按下 Tab 键时的情况,这样我就可以破译它是否在函数/UDF 之后,我不断收到错误消息,指出宏可能由于某种原因不可用。我认为这对现在来说无论如何都是好的,考虑到该选项可能是维护的一场噩梦(用户当前在做什么?用户在哪里?用户是否在用户窗体控件上按下选项卡?等等)不认为这是可行的,除非已经内置了一些我在该文档站点中找不到的东西,否则我会被难住。
有人对核心问题有可靠的解决方法吗?我现在不关心诸如设置光标位置等技术细节,只关心在不按空格的情况下发生的基本自动完成。基本上,我想模拟在单元格中输入 UDF 后CTRL+ SHIFT+执行的操作A
更新1
好的,在尝试了更多之后,我有更多信息可以分享,可能会有所帮助。
我确实研究了与Application.OnKey选项卡相关的事件,并得出结论,当在公式列表中选择公式选项时,微软有一个特殊的事件处理程序。如果有人能帮助我弄清楚如何访问它,我想我们可以继续推进。从建议的公式列表中选择公式时,我的 Debug.Print 字符串“Tab was Pressed”在第一次按 Tab 时未执行。应用程序对象不会将其识别为按选项卡,因为它从该列表中选择某些内容,这使我相信它们有自己的事件处理程序。只要抓住它,我想我们就可以出发了。
与此同时,我发现了一种丑陋的方法来让它工作,而不必按空格键,通过Formula Autocomplete在 Excel > 选项 > 公式中设置为 false。该列表不会填充,如果用户只需键入 `=EPP(" ,它将根据需要填写其余部分!但这是用户特定的设置,因此这对于缩放来说不是最佳选择。
| 归档时间: |
|
| 查看次数: |
1142 次 |
| 最近记录: |