【问题标题】:order of events in userform用户表单中的事件顺序
【发布时间】:2014-02-19 16:13:47
【问题描述】:

所以, 如果我在用户表单中有此功能:

function myFunc() as String
    Me.Show vbModal
    stringVar = "Second"
end function

并且我在所述用户窗体上有单独命令按钮的单击事件:

Private Sub cmdbutton_Click()
    Unload Me
    stringVar = "First"                                                  
End Sub

我的问题是,当我从某个地方调用该函数(“MyFunc”)时,按钮的单击事件(“cmdButton”)会在允许该函数继续之前继续处理,还是基本上是抛硬币?这个stringVar 变量是用户窗体的私有变量。它在该按钮的单击事件中设置,但我想在单击发生后在函数中使用它。 (表格上会有其他组件,计算等等……)

那么在点击事件完成之前函数将继续处理是否存在任何风险?如果函数在点击事件之前继续,则变量设置不正确

【问题讨论】:

  • 如果事件没有被触发,即如果按钮没有被点击,为什么点击事件会处理任何事情?
  • 很明显它不会......但是如果按下按钮......那么在处理返回到myFunc之前点击事件会完成吗?
  • 当调用 myfunc 时,表单会以模态方式打开,因此myfunc 中的处理会停止,直到表单关闭。我只需要知道当表单在点击事件中关闭时,是否会在点击中继续处理,然后再返回myfunc
  • 那是因为你有模态形式的用户表单。使其无模式。
  • 你没有读懂我在说什么......I just need to know if when the form closes in the click event, will processing continue in the click before going back to myfunc 会不会?我想要它的方式,它可以工作,我只是想知道它是否总是有效.. 或者是否有一次处理会在完成点击之前回到myfunc,在这种情况下它会中断。

标签: events excel userform vba


【解决方案1】:

我的问题是,当我从某个地方调用该函数(“MyFunc”)时,按钮的单击事件(“cmdButton”)会在允许该函数继续之前继续处理,还是基本上是抛硬币?

让我用图片和描述来解释它

  1. 当您运行该函数时,将执行第一行。现在由于表单显示为模态,下一行 stringVar = "Second" 将在用户表单被卸载之前运行。
  2. 在上述场景中执行的下一行是Unload Me。但是,这并不意味着之后的任何代码都不会运行。 Unload Me 不像 Exit DoExit For。它只是卸载对象,绝不会阻止脚本/代码的进一步执行。
  3. 所以很明显下一行是stringVar = "First",它到达End Sub
  4. 这是控件返回函数的时间,它继续执行下一行,即stringVar = "Second"

希望这是有道理的。如果没有,请随时提出您有任何疑问。

您还可以使用 F8 单步执行代码。

进一步阅读: Debugging VBA Code

【讨论】:

  • 我确实在调试器中看到了这一点,我只是想确认它总是会以这种方式发生,而且通常不是抛硬币。一如既往地乐于助人 siddharth :)
猜你喜欢
  • 2012-08-17
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多