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

如何在VBA中调用另一个函数中的函数?,vba,function,excel,Vba,Function,Excel,我有一个如下所示的函数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 myFirstFunction(lngCol As Long) As String Dim vArr vA

我有一个如下所示的函数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 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

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

您的函数没有返回任何内容

Function myFirstFunction(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function
您可能希望在第一个函数中将Col_Letter更改为myFirstFunction

Function myFirstFunction(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function
同样在第二个函数中,将65536更改为rows.count

Function myFirstFunction(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function
然后将在此处出错:

Function myFirstFunction(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function
Some_Column = Range("B4").Address
将其更改为:

Function myFirstFunction(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function
Set Some_Column = Range("B4")
这是因为它被定义为一个范围,所以不能传递字符串所在的地址,而是传递必须使用Set的对象

Function myFirstFunction(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function
从那以后一切都会好起来的

Function myFirstFunction(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function
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
有问题的部分是某个列=RangeB4.Address

Function myFirstFunction(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function
Dim Some_Column As Range将变量声明为引用类型,这意味着您需要通过声明set Some_Column=。。。最好在最后释放它,并设置一些_Column=Nothing。 .Address返回一个字符串而不是一个对象,因此您的代码应该设置为Some_Column=RangeB4以将Some_Column设置为范围。 第一个函数中还有一个错误,Col_Letter=vArr0应该是myFirstFunction=vArr0,反之亦然。此行设置函数的返回值,函数名=

Function myFirstFunction(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function
您从中复制了解决方案,但如果更改函数名,则必须全程更改

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