Excel VBA UDF自动填充参数

时间:2017-01-16 02:19:11

标签: excel vba excel-vba autocomplete user-defined-functions

我意识到在本网站,外部论坛和其他讨论组上有数千条与UDF工具提示相关的评论和数百个问题。我是VBA和Excel的新手,但最近学到了很多东西。在那段时间我已经开始学习,我也看过那些论坛,所以请不要发给我链接到Excel-DNA等第三方解决方法。这是 NOT < / strong>同样的问题。我不想填充工具提示,我想将UDF参数自动填充到单元格中。

简而言之,标题说明了一切,有没有办法自动将UDF参数填充到字符串中。

我在Documentation site搜索了与此相关的任何内容,但没有成功。因此,下一步是找到一个对用户来说相对容易的解决方案,对用户计算机内存非常友好,更不用说开发友好,不花费大量时间,内置跨平台兼容性并且易于定制。

由于我是Excel的新手,我不确定加载项在Workbook对象方面的工作原理。我可以通过反复试验找到它,但我在文档网站上发现的最接近我想要的结果的是通过强制自动更正:

With Application.AutoCorrect
  .AddReplacement "=EPP(", "=EPP(payrate,hrs)"
End With

FigA

这很快就完成了工作!!! ........但是那就是它。

这很有效,原因有两个:

  • 公式/ UDF是唯一启动的,带有=符号,所以我不知道
  • ,必须做太多编码才能弄清楚用户输入的内容
  • 减少代码和错误的可能性。特别是对于Win 64bit版本和需要不同语法的32位版本,以及使用API​​时Mac用户可能

有充分的理由,有10个坏的。我将重点介绍几点:

  1. 它允许您按Enter,tab等转到下一个单元格,下单元格等。
  2. 光标到达字符串的末尾,这对于自动更正是正常的,但不适合填写必需参数。
  3. 我将不得不手动策划一个“添加替换”&#39;阵列
  4. 这在具有嵌套函数的公式中是无用的
  5. 通过将其更改为以下内容,我能够解决其中的一些问题:

    With Application.AutoCorrect
      .AddReplacement "=EPP(", "=EPP(<payrate>,<hrs>"
    End With
    

    这里发生的是如果用户按下回车键,Excel将自动包含右括号,但是,在这种情况下会出现错误,&lt; Excel&lt; Excel认为这是公式错误:1 + 1 = 2&#39; ,因为Excel认为由于<>符号而不是公式。因此,用户现在100%确定他们需要审核。

    Butttttt .....所有的说法和做法,一个巨大的障碍仍然存在,用户必须按空间来填充。哎哟。只要我使用了excel,我在选择一个函数后就没有按过空格,我无法想象这对任何人来说都是自然而然的事情。

    所以我尝试了一些途径来规避这种行为。到目前为止没有任何工作。我尝试在自动更正对象中使用Application.SendKeys

    With Application.AutoCorrect
      .AddReplacement "=EPP(", "=EPP("
      .Application.SendKeys "^+A" 'CTRL + SHIFT + A also tried " " for space
    End With
    

    接下来我尝试使用Application.OnKey事件来处理按Tab键的时候,所以我可以解密它是否在函数/ UDF之后,我不断收到错误,说明宏可能不适用于某些原因。我认为现在这很好,考虑到这个选项可能是维护的噩梦(用户目前正在做什么?用户在哪里?用户按下用户窗体控件上的标签?等等)不要认为这是可行的,除非已经内置了我在该文档站点中找不到的东西,然后我就难倒了。

    任何人都有针对核心问题的可靠解决方案吗?我现在不关心技术性,比如设置光标位置等,只需要在不按空格的情况下进行基本的自动完成。基本上,我想模仿在单元格中输入UDF后 CTRL + SHIFT + A 的作用

    更新1

    好的,所以在玩完这些之后,我有更多的信息要分享,这可能会有所帮助。

    我确实玩过与tab相关的Application.OnKey事件,并得出结论,Microsoft在公式列表中选择公式选项时有一个特殊的事件处理程序。如果有人可以帮助我弄清楚如何访问它,我想我们可以继续前进。我的Debug.Print字符串&#34; Tab被按下&#34;从建议的公式列表中选择公式时,没有在第一个Tab按下执行。 Application对象不会将其识别为tab tab,因为它从该列表中选择了一些内容,这使我相信它们有自己的事件处理程序。只是抓住我认为我们会好起来。

    与此同时,通过在Excel中将Formula Autocomplete设置为false,我发现了一种难以实现的方法,无需按空格键。选项&gt;公式。该列表不会填充,如果用户只键入`= EPP(&#34;它将根据需要填写其余部分!但这是用户特定的设置,因此这不适合缩放。

1 个答案:

答案 0 :(得分:0)