如何在Excel 2016中调试一个简单的vba函数?
我正在尝试调试一个简单的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
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时,它无法将集合返回到某个范围。