vba - 连接子问题
问题描述
免责声明:我不是开发人员,只是一个试图在自己的项目中使用 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 等到前一个子结束?
解决方案
最好不要链接宏,而是从另一个子中调用它们。这样,您将清楚地了解自己在做什么,以什么顺序。
Sub AllOfIt()
macro1
DoEvents
macro2
DoEvents
macro3
End Sub
Sub macro1
...
End Sub
Sub macro2
...
End Sub
Sub macro3
...
End Sub
通常无需担心是否在前一个宏结束之前开始了某些事情。除非您执行类似使用的操作,否则不会发生这种情况Application.OnTime
推荐阅读
- typescript - Typescript - 改变 AST 并让它在 IDE 中工作
- php - Wordpress 标签云小部件 - 多个实例参数问题
- qt - QML:反射访问属性类型
- operating-system - 复制粘贴怎么可能?
- python - 一条语句中的多个 isin 查询
- regex - 匹配以指定文本开头的单词
- pci - pcie 错误如何报告给根联合体?
- ruby-on-rails - 为什么评论以灰色块呈现,里面没有文字?
- android - 在 ListView 中重复项目?它不能正常工作,第一项显示在第三个位置,并再次从第一项重复
- php - php session.save_path 没有价值