Excel VBA UDF 自动更正大小写错误

Excel VBA UDF autocorrects with wrong case

我有一个 Excel VBA 添加用户定义函数 (UDF) 的插件。这些函数在计算结果方面都运行良好。

我使用宏选项将它们输入到函数向导中。

在工作表中使用它们时,它们会自动更正函数名称的大小写。例如,如果函数名为 MyFunction,而用户将其输入为 myfunction,则在输入公式时,它会自动将函数名称的大小写更正为 MyFunction。就像 Excel 的内置工作表函数一样,如果您输入例如中位数,它将自动更正为中位数。

但是,有一个 UDF 的自动更正不正确。我希望它是例如MyFunction,但即使用户这样输入,它也会自动更正为所有小写,myfunction。

我查看了每一行相关代码,但找不到任何原因。除了函数名称、函数描述以及函数本身的代码和参数之外,所有其他 UDF 的代码都是相同的。

知道为什么那个 UDF 会以不同的方式自动更正函数名称吗?

这是 MacroOptions 行的示例:

Application.MacroOptions "MyAddin.xla!MyFunction", "Description of MyFunction for the Excel's Function Wizard.", , , , , "Custom category in Function Wizard"

UDF 本身如下所示:

Public Function MyFunction(param1 As Long, param2 As Long) As Long
   'MyFunction's code here...
End Function

同样,UDF 计算正确。问题在于函数名称的自动更正。

我尝试关闭插件,然后在新的默认 Excel 工作簿中创建一个与受影响函数同名的新 UDF。它工作正常——它自动更正为正确的大小写。但是当我关闭它并返回插件时,问题又来了。

更新:

以下是我解决问题的有效步骤(感谢 Charles Williams!):

  1. 将加载项工作簿的 IsAddin 属性 设置为 false。这会把它变成一个工作簿,这样你就会得到一个工作表。
  2. 文件 > 另存为,另存为新的 xlsm 工作簿。重要提示:确保工作表中没有带有受影响函数名称的公式;否则你会回到这一步。
  3. 文件 > 选项 > 加载项 > 执行,取消选中加载项,这样它就不会在 Excel 启动时加载。
  4. 退出并重新启动Excel。
  5. 打开新的 xlsm 工作簿。
  6. 输入函数名大小写正确的公式。它不应自动更正不正确的大小写。
  7. 删除公式。
  8. 保存 xlsm 工作簿。
  9. 备份原始加载项,因为您将要覆盖它。
  10. 将 xlsm 另存为新的 xla 加载项,覆盖旧的(我认为这也适用于 xlam,但我没有尝试过)。
  11. 文件 > 选项 > 加载项 > 转到,重新检查加载项,以便在 Excel 启动时加载。
  12. 重启Excel。测试问题;问题应该得到解决。

Excel 坚持记住第一次将 UDF 输入公式时使用的大小写。

除了重命名 UDF 之外,我还没有找到重置它的合理方法。

如果 XLAM 的工作表包含引用 UDF 的公式,则该引用将锁定大写。如果 XLAM 的工作表不包含引用 UDF 的公式,那么它将从在 Excel 会话中使用它的第一个工作簿中设置。如果您保存了 2 个大写不同的工作簿,并且它们都被打开,那么第二个中的大写将被第一个中的大写覆盖。

受其他贡献的启发(谢谢!),以下是对我有用的步骤:

  1. 关闭 Excel 会话并打开一个新会话。
  2. 创建一个新工作簿并在其中写入包含正确大写的 UDF 的公式。
  3. 放弃新工作簿但保留 Excel 会话。
  4. 打开包含 UDF 等公式的其他工作簿:UDF 现在将正确大写。
  5. 您可以在不保存工作簿的情况下关闭 Excel 会话。
  6. 在随后的 Excel 会话中,UDF 将正确大写。