如何在Excel 2016中调试一个简单的vba函数?

时间:2015-10-25 00:01:08

标签: excel vba excel-2016

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

2 个答案:

答案 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