子调用第一个子但不调用第二个子
Posted
技术标签:
【中文标题】子调用第一个子但不调用第二个子【英文标题】:Sub calls First Sub but does not call second sub 【发布时间】:2019-05-08 21:08:28 【问题描述】:我正在尝试让一个潜艇运行一系列其他潜艇,但运气不佳。 Sub 看起来像这样:
Private Sub OKCommand_Click()
new_tab
metric_transfer
End Sub
当我注释掉第一个 sub 时,第二个 sub 运行。我在第二个 sub 的上方和下方放置了 Debug.Print cmets 并观察它在 sub 上运行而没有调用它。我尝试将Call
和Application.Run
放在前面,但前者什么也没做,而后者是错误的方法。我的示例遵循this,但尚不清楚在这种情况下问题是否得到解决。我没有尝试this 延迟技术,因为它似乎也不适合他们。任何帮助将不胜感激。
【问题讨论】:
Put a breakpoint 在metric_transfer
行。当它被击中时,按住 F8。
Call
没用。将Option Explicit
放在模块顶部。如果代码不再编译,则说明某处存在拼写错误。手续在哪里?你能edit你的帖子包括他们吗?
对于你如何描述它,似乎过程new_tab
中的代码做了一些使子metric_transfer
应该做的事情无效。您可能应该逐步调试new_tab
中的代码,看看会发生什么导致您的代码崩溃/退出。此外,通过子 new_tab
的名称,有些东西告诉我你正在向工作簿添加一个新工作表......当焦点在这个新工作表上时,metric_transfer
的代码是否可能不起作用?请分享new_tab
中的代码,为我们提供更多线索。
发布 new_tab 和 metric_transfer 的代码
“显然,Unload Me
在 new_tab
中导致它跳过子”。嗯,当然!如果您阅读文档,您会看到当一个对象被卸载时,它会从内存中删除,并且与该对象关联的所有内存都会被回收。你的宏 OKCommand_Click
是用户表单的一部分,所以如果你 Unload
用户表单,内存就会被释放,OKCommand_Click
的执行就会停止(这就是你从不执行第二个的原因)。
【参考方案1】:
非常感谢@Matteo 为我指明了正确的方向。我遇到的问题是Unload Me
子中的Unload Me
行的结果。所有这些程序都在用户表单上。当Unload Me
执行时,它会按照here 的描述从内存中擦除用户表单。使用form1.Hide
隐藏表单似乎是更好的选择。不仅因为这里引起的问题,还因为我以后需要此表格中的信息。
【讨论】:
以上是关于子调用第一个子但不调用第二个子的主要内容,如果未能解决你的问题,请参考以下文章