繁体   English   中英

我可以根据另一个 Sub 是否运行来运行一个 Sub 吗?

[英]Can I run a Sub based on whether another Sub has run?

我有一个带有两个文本框的用户表单,用于根据任一文本框中的值搜索工作表。 该表单根据活动单元格填充其他框。

每个子如何检查另一个是否已执行?

伪代码:

Sub StatusTextBox_AfterUpdate()
    'Check if TransitTextBox_AfterUpdate() has run
    If yes Then End Sub
    If No Then Carry on with the rest of StatusTextBox_AfterUpdate()

这将更改TransitTextBox的值以从工作表中提取,并且我想阻止TransitTextBox_AfterUpdate()运行。

一旦TransitTextBox被填充, AfterUpdate事件就会运行并且两者发生冲突。 有没有办法防止这种情况?

解决了!

如果我打开了其他 excel 文件的鸡尾酒,我的 Workbook_Open 代码将无法工作。 它与您阅读的有关此问题的条件格式无关。 我真的不确定这是如何解决的,因为我尝试了 .activate 和 EVENT 时间延迟,但是当出现故障时,这两个都不起作用。 在此示例中,MSG 框从未打开以确认重新运行是否成功,但是通过添加以下代码解决了该问题。 只需将您的代码替换为我放置“评论”部分的位置

/CODE Public ImDone As Boolean

公共子工作簿_Open()

ImDone = True '运行代码结束子

Public Sub BoolCheck() If ImDone = True Then MsgBox "code has run" Else '重新运行代码 End Sub /Code

使用全局变量来允许两个 sub 进行通信:

Public ImDone As Boolean

Sub ShouldRunFirst()
   ImDone = True
End Sub

Sub ShouldRunSecond()
   If ImDone Then
      MsgBox "first macro has been run"
   Else
      MsgBox "first macro has not run yet"
   End If
End Sub

编辑#1:

我们需要使通信变量全面可见:

  • 在标准模块中将其变暗
  • 将声明放在模块的顶部
  • 宣布它为公众

然后它应该对潜艇和事件“可见”。 这里查看一些答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM