首页 > 解决方案 > 连接子问题

问题描述

免责声明:我不是开发人员,只是一个试图在自己的项目中使用 VBA 的普通人。我第一次在stackoverflow上发帖,如果我违反了任何不成文的社区规则,请原谅我..

大家好,我正在尝试让一堆潜艇按顺序运行,所以下一个只有在前一个完成后才开始。

问题是excel在执行过程中不断崩溃,而如果我手动运行每个子程序,它们根本没有问题。

到目前为止,我一直在使用这种方法:首先我有一个 mini sub 将 value=1 分配给全局变量“oneclick”,然后调用链的第一个宏

然后,在每个子中,在结尾之前都有一小块:

sub macro1()

...macro code...

if oneclick=1 then
  call macro2
end if

end sub

以此类推,直到最后一个 sub 将 oneclick 变量重置为零。

我不知道为什么这会一直崩溃。我可以看到实际上这些潜艇都没有真正关闭,直到最后一个结束,这会遇到任何类型的代码限制吗?实际上,我会更高兴有一个主子来指导这个过程,而不是依赖像这样的拼凑!有什么建议吗?

编辑:哦,哇已经有这么多答案了..现在我要尝试其中的一些。回答你的一些问题:

1)崩溃确实是突然的,甚至没有错误消息,只是excel退出并重新打开,与宏链首次启动时的状态相同。

2)我同意你们的观点,应该有一个主子调用较小的子,但是上次我尝试遇到了一系列问题,因为一个宏需要处理前一个宏的结果,依此类推。你如何告诉 vba 等到前一个子结束?

标签: vba

解决方案


最好不要链接宏,而是从另一个子中调用它们。这样,您将清楚地了解自己在做什么,以什么顺序。

Sub AllOfIt()
    macro1
    DoEvents

    macro2
    DoEvents

    macro3
End Sub

Sub macro1
    ...
End Sub

Sub macro2
    ...
End Sub

Sub macro3
    ...
End Sub

通常无需担心是否在前一个宏结束之前开始了某些事情。除非您执行类似使用的操作,否则不会发生这种情况Application.OnTime


推荐阅读