Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Excel 2016中调试一个简单的vba函数?_Excel_Vba_Excel 2016 - Fatal编程技术网

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

如何在Excel 2016中调试一个简单的vba函数?,excel,vba,excel-2016,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).Val

我正在尝试调试一个简单的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)
将数组传递给该函数时,我得到一个
#值错误,在即时窗口中看不到任何打印内容


我对找出这个函数的错误不感兴趣,而对如何使用这些工具来发现问题感兴趣。为什么“TEST”没有打印到即时窗口,如果我的程序中有语法错误,为什么编译器没有设置断点?

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

Test2 = 1

这可能是您的#值错误的原因之一。可能还有其他原因。但先看看这个

删除source()变量中的那些括号。只是来源。 您可以使用范围作为数据类型,而不是变量,因为您的输入是范围(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

通过从测试子项调用函数比从工作表调用函数更容易调试函数。如果您能准确描述如何调用它,这会有所帮助。您在工作表上输入了什么?是的,正如Tim所说,从子项调用函数。此外,您在函数中声明了一个与函数同名的变量(Test2).也不去上班,我=我???或者真的是说我=1@TimWilliams我已经添加了如何调用此函数的说明。我不确定如何使用Sub,但我想我能找到它。到目前为止,我对vba程序员可用的工具的质量非常失望。我应该使用VS还是其他什么?如果是,是否有我们的指南使用excel处理VS?@MacroMarc我想我已经解决了您的评论,但仍然不起作用。我将尝试使用此“Sub”想法。这不是原因。函数可以将集合返回到调用过程,这样的函数不需要像您所描述的那样在末尾将函数名设置为集合。这里的问题是,当函数用作UDF时,它无法将集合返回到某个范围。