尝试在初始“取消”后或在红色“ X”上关闭后尝试第二次启动时,Excel用户窗体运行时错误

arooney88

问题:我正在构建一个带有“提交”和“取消”按钮的用户窗体。我希望整个表单清除所有输入的数据,如果用户单击“取消”按钮,则关闭表单,但是如果用户单击右上角的红色“ 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框架:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章