2

我正在尝试调试一个简单的 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”没有打印到即时窗口,如果我的程序中有语法错误,为什么编译器没有设置断点?

4

2 回答 2

0

再次查看您的函数,向下查看 End Function 语句附近。为了从函数返回值,您需要将函数名称设置为要返回的值。因此,如果您想返回值“1”(不带引号),您在 End Function 之前的最后一行应该说 ...。

Test2 = 1

这是您的 #value 错误的一个可能原因。也可能有其他原因。但先看看那个。

于 2015-10-25T01:17:08.127 回答
0

删除 source() 变体中的那些括号。简单的来源。您可以使用 Range 作为数据类型而不是 Variant,因为您的输入是 Range(A:A 声明一个新集合以向集合添加值。对于迭代,我使用了 For each 方法。希望您能从中了解您的错误下面的代码

  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
于 2015-10-25T04:41:25.560 回答