问题:我正在构建一个带有“提交”和“取消”按钮的用户窗体。我希望整个表单清除所有输入的数据,如果用户单击“取消”按钮,则关闭表单,但是如果用户单击右上角的红色“ X”,我也试图建立相同的功能。我不清楚我需要在哪里卸载表格。目前,我已将其放置在btnCancel_Click()
方法中,并且能够启动表单,输入一些数据,然后单击“取消”,它将关闭表单。
但是,当我第二次尝试重新启动表单时,出现错误(附有该消息的图片),内容为
“运行时错误'-2177418105(80010007):自动化错误-被调用方(服务器[非服务器应用程序])不可用并消失;所有连接无效。该调用可能已执行。
如果我Unload Me
从中删除btnCancel_Click()
该表格,则可以正常关闭并重新打开它,但是我第一次输入的任何数据仍将保留在表格中,并且无法正确清除。我想知道这是Unload Me
错误还是初始化表单时需要重置所有表单控件?
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
' how was the form closed?
' vbFormControlMenu = X in corner of title bar
If CloseMode = vbFormControlMenu Then
' cancel normal X button behavior
Cancel = True
' run code for click of Cancel button
btnCancel_Click
End If
End Sub
'******************************************************************
Private Sub btnCancel_Click()
mbCancel = True
Me.Hide
Unload Me
End Sub
'*********************************************************************
Private Sub UserForm_Initialize()
'Populate values for 2 combo boxes
lastEmp = Sheets("Form_Ref").Cells(Rows.Count, 1).End(xlUp).Row
Me.cmbBoxEmpName.List = Sheets("Form_Ref").Range("A2:A" & lastEmp).Value
lastBld = Sheets("Form_Ref").Cells(Rows.Count, 2).End(xlUp).Row
Me.cmbBoxBuildingName.List = Sheets("Form_Ref").Range("B2:B" & lastBld).Value
End Sub
'******************************************************************
Public form As New CheckOutForm
Sub testFormOptions()
'Button pressed within Excel will start program and show the userform
form.Show
End Sub
这是最简单快捷又肮脏的解决方案:
Public form As New CheckOutForm
从代码中删除。然后将其添加到testFormOptions()
:
Sub testFormOptions()
Dim form As New CheckOutForm
form.Show
End Sub
一些不好的VBA书籍/教程甚至会像这样,但这很残酷:
Sub testFormOptions()
CheckOutForm.Show
End Sub
无论如何,现在解决了表单中预定义值的问题。
对于干净且不太容易的解决方案,请考虑围绕以下形式编写MVC框架:
https://codereview.stackexchange.com/questions/154401/handling-dialog-closure-in-a-vba-user-form
这个博客文章(免责声明-我的!),其中几乎说出了以上链接的建议,但没有出现问题的错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句