我正在尝试调试一个简单的vba函数,该函数返回给定的数组,但一旦到达空单元格就会停止:
Function Test2(source() As Variant) As Collection
Debug.Print "Hello"
Dim i As Integer
i = 1
Do While Not IsEmpty(source(i))
Test2.Add source(i).Value
Debug.Print source(i).Value
i = i + 1
Loop
End Function
当我通过在单元格中写=Test2(A:A)
时将数组传递给此函数时,我收到#VALUE!
错误,并且看不到任何打印到立即窗口的内容。
我不太了解这个功能的问题,而不是如何使用这些工具来查找问题。为什么" TEST"没有打印到立即窗口,并且,如果我的程序中存在语法错误,为什么编译器没有设置断点?
答案 0 :(得分:0)
再次查看您的函数,向下看End Function语句附近。要从函数返回值,需要将函数名称设置为要返回的值。所以,如果你想返回值" 1" (没有引号)你在End Function之前的最后一行应该说....
Test2 = 1
这是您的#value错误的一个可能原因。还有其他原因。但先看看。
答案 1 :(得分:0)
删除source()变体中的括号。简单来源。 您可以使用Range作为数据类型而不是Variant,因为您的输入是Range(A:A 声明一个新集合,用于向集合中添加值。 对于迭代我用于每个方法。 希望您能从以下代码中了解您的错误
Function Test2(source As Variant) As Collection
Dim c As New Collection
Dim cell As Range
Debug.Print "Hello"
Dim i As Integer
i = 0
For Each cell In source
Debug.Print cell.Value
Debug.Print cell.Count
If IsEmpty(cell) = True Then
Exit For
Else
'Set itm = cell
c.Add cell.Value
End If
Next
Set Test2 = c
End Function