events - 用户表单中的事件顺序

标签 events excel userform vba

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

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

我在所述用户窗体上有单独命令按钮的单击事件:
Private Sub cmdbutton_Click()
    Unload Me
    stringVar = "First"                                                  
End Sub

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

那么在点击事件完成之前该函数是否有继续处理的风险?如果函数在点击事件之前继续,那么变量将不会被正确设置

最佳答案

My question is, when I call that function ("MyFunc") from somewhere, will the click event of the button ("cmdButton") continue processing before the function is allowed to continue, or is it basically a coin toss?



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

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

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

    您还可以使用 F8 单步执行代码来查看代码的执行情况。

    进一步阅读: Debugging VBA Code

    关于events - 用户表单中的事件顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21886108/

    相关文章:

    javascript - 设置多个属性时如何限制号码变化事件?

    events - 将 OCaml 转换为 F# : F# equivelent of Pervasives at_exit

    vba - 具有无限参数的 UDF

    vba - 从 Excel 2010 中的命令行传递参数

    arrays - 从 EXcel VBA 中的 Join() 函数中删除分隔符

    javascript - 为什么 onpropertychange 对我不起作用?

    java - 是否可以在前端和后端使用服务器发送的事件并从其他后端监听它,而不使用前端浏览器?

    python - 如何使用Python更改Excel中的列格式

    excel - VBA 查找值并在消息框中报告并更改同一行单元格中的值

    excel - 将用户表单导入 VBComponents 后,无法读取属性