Excel VBA用户表单立即关闭

时间:2016-04-01 07:09:48

标签: excel vba excel-vba userform

我的用户形态存在这个特殊问题。我在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()调用时效果很好

调试代码会显示userform的Initialize-method被调用并且成功完成,但实际的节目在屏幕上显示该表单后立即失败。

似乎在show-method中使用了false -parameter(我在那里添加了允许用户同时使用其他excel工作簿)会导致调用方法继续执行,从而立即调用ActiveWorkbook.Close。将其移至UserForm_Terminate解决了该问题。

2 个答案:

答案 0 :(得分:0)

frmMyForm.Show False更改为frmMyForm.Show vbModal,否则会立即执行调用后的代码,从而再次关闭表单。如果您设置vbModal,代码将无法执行,直到您关闭表单。

答案 1 :(得分:0)

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

Sub dostuff()
    frmMyForm.Show
End Sub

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