我可以根据另一个Sub是否运行来运行Sub? (EXCEL VBA)

时间:2015-06-10 15:35:35

标签: excel excel-vba subroutine vba

全部, 我有一个用户表单,我试图让我的用户使用两个不同的文本框来根据文本框中的值搜索工作表。表单根据活动单元格填充其他框。我的问题是: 我可以编写两个子代码来检查另一个子代码是否已执行?我的伪代码如下:

>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事件就会运行并且两者发生冲突。有没有办法阻止这种情况?

2 个答案:

答案 0 :(得分:1)

解决了!

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

/代码 公开 ImDone 作为布尔值

公共子工作簿_Open()

ImDone = 真 '运行代码 结束子

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

答案 1 :(得分:0)

使用全局变量允许两个潜水员进行沟通:

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:

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

  • 在标准模块中
  • 将声明置于模块顶部
  • 将其声明为 Public

然后它应该是"可见"潜艇和事件。查看一些答案Here