VBA Excel:如何将不同类型的一个参数传递给函数(或将Int / String转换为Range)?

时间:2015-06-25 16:27:28

标签: excel vba excel-vba

我在Excel中编写一些VBA函数来计算单词值和输入的交叉总和。

我将输入作为Public Function cross_sum(myRange As Range) As Integer传递给他们,以便他们将单元格引用作为输入,例如=cross_sum(A1)。工作正常。

但是,当我尝试链接两个函数如=cross_sum(word_value(A1))时,我遇到了VALUE错误,因为word_value()返回一个Integer值而不是Range cross_sum()设置为expect。但是我没有找到将Integer(或String)强制转换为Range的方法。

由于Excel的内置函数支持链接以及范围输入,我想知道如何。 不幸的是,这是我的第一个VBA项目,所以我想知道是否以及如何选择以及选择哪种类型来实现这两种方式。

任何指示赞赏!

TIA,  JBQ

2 个答案:

答案 0 :(得分:1)

您可以将 Variant 传递给函数,该函数可以确定输入的类型

Public Function Inputs(v As Variant) As String
    If TypeName(v) = "Range" Then
        MsgBox "you gave me a range"
    Else
        MsgBox "you gave me a string"
    End If
    Inputs = "done"
End Function

Sub MAIN()
    Dim st As String
    Dim rng As Range
    st = "A1"
    Set rng = Range(st)
    x = Inputs(st)
    x = Inputs(rng)
End Sub

答案 1 :(得分:0)

没有你的代码,很难知道你可以改变什么。那就是说......

没有办法将整数转换为范围。如果你想要的话,你必须创建一个这样做的功能。

您可以创建一个转换器函数,可能标题为IntegerToRange,它取一个整数并且在某个逻辑(可能是1 =“A1”,2 =“A2”或其他东西)之后,将返回一个范围。您的单元格公式将为=cross_sum(IntegerToRange(word_value(A1))

或者,您可以修改word_value函数以返回范围而不是整数。您的单元格公式将为=cross_sum(word_value(A1)