【问题标题】:Excel VBA userform closes immediatelyExcel VBA 用户窗体立即关闭
【发布时间】:2016-09-24 06:15:07
【问题描述】:

我的用户表单有这个特殊的问题。我在 Module1 中有这段代码:

Sub dostuff()
    frmMyForm.Show False
End Sub

Sub auto() 'rename to Auto_Open in final version
    Call dostuff
    ActiveWorkbook.Close SaveChanges:=False
End Sub

问题是,如果我直接运行 dostuff(),一切正常(即显示表单,用户可以在其中输入数据等)。但是,如果我运行 auto(),窗体 frmMyForm 只会在屏幕上闪烁并立即关闭,然后调用 ActiveWorkbook.Close SaveChanges:=False 行。

目的是创建一个工作簿,该工作簿将自动打开一个带有一些输入和输出字段的表单(计划在一切正常时将 auto 重命名为 Auto_Open),用户可以在其上进行一些计算等,并且在用户关闭之后表单也关闭工作簿。

注意:如果我将代码更改为:

Sub Auto_Open()
    frmMyForm.Show False
    ActiveWorkbook.Close SaveChanges:=False
End Sub

它也以同样的方式失败(表单闪烁,然后工作簿关闭)。显然我的表单有问题,但我不明白是什么问题,因为在代码示例 1 中直接从 dostuff() 调用时它可以完美运行

调试代码发现调用了用户表单的Initialize-method并成功完成,但实际显示在屏幕上显示表单后立即失败。

似乎在 show-method 中有 false 参数(我在此处添加它以允许用户同时使用其他 Excel 工作簿)会导致调用方法继续执行,从而立即调用 ActiveWorkbook.Close。将此移动到 UserForm_Terminate 解决了这个问题。

【问题讨论】:

  • 您的答案似乎在下面,但不应该是ThisWorkbook.Close SaveChanges:=False 吗?
  • 可能是,尽管当用户关闭表单并因此导致调用 Terminate-event 时,表单所在的工作簿不是始终处于活动状态吗?
  • 你有想过这个吗?我从 Excel 2010 更新到最新的 Excel 版本,我遇到了这个确切的问题,这在 vba 7.0 excel 2010 版本中不存在。

标签: vba excel userform


【解决方案1】:

frmMyForm.Show False更改为frmMyForm.Show vbModal,否则调用后的代码将立即执行,再次关闭表单。如果你设置 vbModal,代码在你关闭表单之前不会被执行。

【讨论】:

    【解决方案2】:

    只需像这样调用表单:删除false

    Sub dostuff()
        frmMyForm.Show
    End Sub
    

    默认情况下,这会将表单作为模态表单打开,这意味着它将等到您关闭它。

    【讨论】:

    • 我故意将其更改为 false 以允许用户在表单打开时编辑其他工作簿(这是用户要求),以便他们可以打开此工作簿(=form),做一些事情,将其保留在后台,稍后在需要时返回,而无需重新打开工作簿。
    猜你喜欢
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多