如何在VBA中的另一个函数内调用函数?

时间:2015-05-27 23:58:05

标签: excel vba function excel-vba

我有一个看起来像这样的函数1:

Function myFirstFunction(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function

我需要在一个单独的函数中调用此函数:

Function myOtherFunction(myVar as Variant) As Variant
Dim Some_Column As Range
Some_Column = Range("B4").Address

If Range((myFirstFunction(Some_Column.Column) & 65536)).End(xlUp) <> Range(myFirstFunction(Some_Column.Column) & 1) Then
...some code
End If

它给了我一个错误,我会假设因为我无法在第二个函数中使用第一个函数。有没有办法来解决这个问题?

2 个答案:

答案 0 :(得分:2)

你的功能没有传回任何东西。

您可能希望在第一个函数中将Col_Letter更改为myFirstFunction。

同样在第二个函数中将65536更改为rows.count。

然后会出错:

Some_Column = Range("B4").Address

将其更改为:

Set Some_Column = Range("B4")

这是因为它被定义为一个范围所以你不能传递地址(这是一个字符串),你传递对象(你必须使用Set for)

之后应该都很好。

Function myFirstFunction(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
myFirstFunction = vArr(0)
End Function

Function myOtherFunction(myVar As Variant) As Variant
Dim Some_Column As Range
Set Some_Column = Range("B4")

If Range((myFirstFunction(Some_Column.Column) & rows.count)).End(xlUp) <> Range(myFirstFunction(Some_Column.Column) & 1) Then
'...some code
End If
End Function

答案 1 :(得分:2)

有问题的部分是Some_Column = Range("B4").Address

  1. Dim Some_Column As Range将变量声明为引用类型,这意味着您需要通过声明Set Some_Column = ...来设置它对对象的引用,并最好使用{{1}将其释放到最后}。
  2. Set Some_Column = Nothing返回.Address而非对象,因此您的代码应为String,以将Some_Column设置为范围。
  3. 第一个函数中还有一个错误,Set Some_Column = Range("B4")可能应该是Col_Letter = vArr(0),反之亦然。该行设置函数的返回值myFirstFunction = vArr(0)

    您从此question复制了解决方案但如果更改了功能名称,则必须在整个过程中进行更改。