Excel VBA 函数不能将参数用作范围

Posted

技术标签:

【中文标题】Excel VBA 函数不能将参数用作范围【英文标题】:Excel VBA Function will not work with an argument as a Range 【发布时间】:2013-09-17 00:05:57 【问题描述】:

我编写了一个相当简单的 VBA 函数,我想在我的工作表和链接到宏工作表的其他函数中使用它。我允许用户输入一个值或一个范围(基本上是一个单元格引用)作为参数。

Public Function TSTT(arg As Range) As Single
    Dim a25 As Variant
    a25 = 522.6 - (arg / 155.2867)

    TSTT= a25
End Function

问题是当我使用 Range 作为类型(如上)并且用户在公式中输入一个值时,我得到一个 #VALUE 作为返回。

如果我将参数声明为单个参数,那么如果用户输入值或单元格引用,它就会起作用。

最后,如果我将参数声明为 Variant,它也适用于两种类型的输入。

要允许两种类型的输入,我应该使用 Variant 还是预期类型?

【问题讨论】:

你没有在函数的任何地方返回 TSTT! 是的,很抱歉最后一行是为了返回结果。修好了。 【参考方案1】:

你不需要在函数头声明参数,你可以测试用户给你的。您实际上可以测试用户给您的内容:

Function foo(r) As String
    If TypeOf r Is Range Then
      v = r.Value
    Else
        v = r
    End If
    '
    '   more stuff
    '
End Function

【讨论】:

啊,这就是我认为必须有办法做到这一点的原因。感谢您让我走上正确的道路。这是 MS 构建其功能的方式吗,因为在他们的许多功能上,您可以使用范围或值。

以上是关于Excel VBA 函数不能将参数用作范围的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA - 用户定义函数 - 可变大小参数

使用范围变量时未定义 Excel vba 变量

如何在 VBA Excel UDF 参数中使用比较运算符?

excel range函数

Excel VBA:将计算结果数组作为参数传递给函数

EXCEL VBA,为啥函数子过程中不能使用find方法。