我可以根据另一个 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 事件就会运行并且两者发生冲突。有什么办法可以避免这种情况吗?

使用全局变量允许两个潜艇进行通信:

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:

我们需要让 communication 变量全面可见:

  • 在标准模块中调暗
  • 将声明放在模块的顶部
  • 声明为 Public

然后应该 "visible" 订阅和活动。查看部分答案Here

已解决!

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

的地方替换你的代码

/代码 Public ImDone As Boolean

Public 子 Workbook_Open()

ImDone = 真 '运行代码 结束子

Public Sub BoolCheck() 如果 ImDone = True 那么 MsgBox "代码有 运行" 别的 '重新运行代码 结束子 /代码