Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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 VBA)_Vba_Excel - Fatal编程技术网

函数顺序(Excel VBA)

函数顺序(Excel VBA),vba,excel,Vba,Excel,也许这是一个直截了当的问题,但我需要100%验证这一点。我有一个函数(Execute),它按顺序调用不同的模块。。像这样: Private Sub Execute() Call Func1 Call Func2 Call Func3 End Sub 函数1和2是非常复杂的函数,用于绘制和处理数据。非常重要的是在运行功能3之前执行功能1和功能2并完成 目前,我这样做的一种方法是,在函数3之前强制执行1秒的延迟,以确保完成1和2,如下所示: Private Sub Execute() Call F

也许这是一个直截了当的问题,但我需要100%验证这一点。我有一个函数(Execute),它按顺序调用不同的模块。。像这样:

Private Sub Execute()
Call Func1
Call Func2
Call Func3
End Sub
函数1和2是非常复杂的函数,用于绘制和处理数据。非常重要的是在运行功能3之前执行功能1和功能2并完成

目前,我这样做的一种方法是,在函数3之前强制执行1秒的延迟,以确保完成1和2,如下所示:

Private Sub Execute()
Call Func1
Call Func2
Application.Wait (Now + TimeValue("0:00:01"))
Call Func3
End Sub
我正在考虑消除1秒的延迟,但我真的想确保函数以同步的方式运行和完成


谢谢

我非常确定VBA函数调用是同步的,但一种简单的方法是在函数中放入
debug.print
语句。在
Func1
中,将
debug.print“输入Func1”
作为第一条语句,将
debug.print“退出Func1”
作为最后一条语句。在其他两个函数中放置等效语句。运行
Execute
函数后,检查调试窗口以检查所有消息是否按预期顺序显示。

VBA是单线程的,因此不需要
.Wait()
。如果我们可以并行运行,那将是一件多么美妙的事情。你看,我正在加载和处理大量从SQL到Excel的函数1和函数2。在尝试功能3之前,我需要确保它已全部完成并加载。。你知道我的意思吗?我不希望在尝试运行func 3时数据仍加载到内存中。一个警告是,如果在其中一个函数中使用Power Query。默认情况下,VBA不等待PQ。你可以强迫它;(backgroundRefresh=False,Application.calculateUnitilasyncqueriesDone等)幸运的是,我没有使用Power Query。我只将ADODB用于SQL Server连接和Excel&VBA中的标准函数。删除
Call
关键字,它是多余的、无用的和过时的。另外,如果没有任何
函数
过程返回任何内容,则它们可能应该是
Sub
过程。最后,
应用程序中参数列表周围的括号。Wait
call(为什么没有
call
调用?!我喜欢
call
支持者的一致性),强制评估
Now+TimeValue(“0:00:01”)
作为值,并强制传递结果
ByVal
。如果这个无关的括号是一种习惯,您将不可避免地遇到由它引起的“需要对象”错误。