Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.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
在vba中调用自身的函数_Vba - Fatal编程技术网

在vba中调用自身的函数

在vba中调用自身的函数,vba,Vba,这是我在Latch的帮助下在最后得到的代码,这将是一个以递归方式更改全局集合中的值的subrutine的简单示例,现在已经完全实现了功能 Public List_of_data As New Collection Sub main() ClearCollection List_of_data List_of_data.Add 7.5 List_of_data.Add 1 Recursive_function List_of_data End Sub Public Sub Clear

这是我在Latch的帮助下在最后得到的代码,这将是一个以递归方式更改全局集合中的值的subrutine的简单示例,现在已经完全实现了功能

Public List_of_data As New Collection

Sub main()

ClearCollection List_of_data

List_of_data.Add 7.5

List_of_data.Add 1

Recursive_function List_of_data

End Sub

Public Sub ClearCollection(parmCol As Collection)

Set parmCol = New Collection

End Sub

Public Function Recursive_function(ByRef List_of_data As Collection)

Dim x1

x1 = List_of_data.Item(1)

Dim x2

x2 = List_of_data.Item(2)

If x1 > x2 Then

ClearCollection List_of_data

List_of_data.Add x1

List_of_data.Add x2 + 1

Call Recursive_function(List_of_data)

End If

End Function
不能“调用”函数。函数提供结果;您需要将一些变量设置为等于您的函数。如果您只需要运行代码,而不需要它为您提供特定的变量结果,那么请将其设置为sub,而不是函数


另外,在您为我们复制的最后一行下面是否有“End Function”?

您正在将一个参数传递给一个不接受任何参数的函数。将功能更改为:

Public Function Calculo_de_Dientes_Epicicloidales(byref lista_de_datos)
我会告诉你你想要的结果

此外,您可以简单地执行以下操作,而不是循环清空集合:

Public Sub ClearCollection(parmCol As Collection)

    set parmCol = new collection

End Sub

如果函数调用自身,它将永远不会结束。设想一个12步计划。如果第11步是“转到12步程序的第1步”,你会完成你启动的第一个程序吗?调用自己的概念被称为递归,这在函数语言中很常见,不应该与全局变量一起使用。@Grade'Eh'Bacon:只有在调用是无条件的情况下才可以。据我所知,它不在这里。啊,米格尔,顺便说一下:在你的问题中添加一个标记,指定你正在使用哪个版本的VBA!对vba错误有帮助:如果按“调试”,错误会发生在哪一行?
您不能“调用”函数
-我认为这可能夸大了它:您可以在运行函数时使用
调用
,它不会出错。我做了您在ClearCollection中建议的更改,它很有魅力,不幸的是,byref lista_datos与其他子rutines发生冲突,我将按照我现在的方式编辑原始代码您似乎忘记翻译x2=lista_de_datos,因此如果您的代码中也有,这将导致错误。您还应该更改set paramCol(请参阅我文章中的编辑),这是我的一个错误。好的,我还翻译了“lista_de_datos”,并在clearcollection中创建了该集,但现在我得到一个编译错误,该错误表示“ByRef参数类型不匹配”,您可以添加“as collection”在byref List_of_data之后,或者干脆不使用clearcollection函数,并将set List_of_data=new collection放在函数调用所在的代码中。我这样说:“Public function Recursive_function(byref List_of_of_data As collection)”,正如您所说,它现在可以工作了!!thx很多时候,我会按照我现在的方式编辑代码,不会出错,通过这个例子,我想我将能够完成我以前试图实现的更复杂的代码