【发布时间】: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 版本中不存在。