我的用户形态存在这个特殊问题。我在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解决了该问题。
答案 0 :(得分:0)
将frmMyForm.Show False
更改为frmMyForm.Show vbModal
,否则会立即执行调用后的代码,从而再次关闭表单。如果您设置vbModal,代码将无法执行,直到您关闭表单。
答案 1 :(得分:0)
只需像这样调用表单:删除false
。
Sub dostuff()
frmMyForm.Show
End Sub
默认情况下,这将打开表单作为模式表单,这意味着它会等到你关闭它。