【问题标题】:Create a custom worksheet function in Excel VBA在 Excel VBA 中创建自定义工作表函数
【发布时间】:2010-10-19 20:10:49
【问题描述】:

我对能够使用 VBA 函数在 Excel 中计算值的记忆很模糊,就像这样(作为单元格公式):

=MyCustomFunction(A3)

这个可以吗?

编辑:

这是我的 VBA 函数签名:

Public Function MyCustomFunction(str As String) As String

该函数位于ThisWorkbook 模块中。如果我尝试在上面显示的工作表中使用它,我会收到 #NAME? 错误。


解决方案(谢谢,codeape):该函数在定义ThisWorkbook 模块时无法访问。它必须位于“正确”的模块中,该模块已手动添加到工作簿中。

【问题讨论】:

  • 值得注意的是,如果您使用 .xlsx 扩展名保存工作簿,较新版本的 Excel 会禁用 VBA。您需要使用 .xlsm 扩展名保存它才能启用 VBA。
  • 如果您还没有保存工作表文件,您可能还需要保存。然后关闭并再次打开它可能会起作用。同样,您可能需要重新应用您的公式,以防您更改了它。

标签: vba excel user-defined-functions


【解决方案1】:

是的,它可以。您只需在模块中定义一个 VBA 函数。请参阅 http://www.vertex42.com/ExcelArticles/user-defined-functions.html 以获取带有示例的精彩介绍。

这是一个简单的例子:

  • 创建新工作簿
  • 切换到 VBA 视图 (Alt-F11)
  • 插入模块:插入 |模块
  • 模块内容:
选项显式 函数 MyCustomFunction(输入) MyCustomFunction = 42 + 输入 结束功能
  • 切换回工作表 (Alt-F11),然后输入一些值:
A1:2 A2: =MyCustomFunction(A1)

【讨论】:

  • 嗯,看来我选择的模块是错误的。它不能位于 ThisWorkbook 模块中,而应位于单独的模块中。谢谢。 :)
  • 您的函数签名错误。使用“无类型”参数和返回值。我不记得当你省略类型时 VBA 实际做了什么,我猜它使用 Variant 类型。
  • 我实际上不确定签名是否错误。我没有测试过。但无论如何,我认为最好使用变体 - 从那时起,您可以将函数与单元格引用(作为 Range 对象传递)和常量(作为浮点数、字符串等传递)一起使用。
  • 由于这将是一个快速而肮脏的一次性解决方案,因此传入一个字符串就足够了。但是下次需要的时候我会考虑的。 :)
  • 参数可以是类型化或非类型化(变体),两种方式()和混合)工作。如果指定了类型,Excel/VBA 将尝试将输入强制转换为指定的类型,这可能是一件好事,也可能不是。
【解决方案2】:

单词输入需要替换,因为它是基本关键字。尝试 num 代替。您还可以通过指定类型来更进一步,例如变体。

Function MyCustomFunction(num As Variant)
    MyCustomFunction = 42 + num
End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-05
    • 2014-08-27
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多