我在Excel中使用VBA窗体时遇到了一些奇怪的行为。我有一个调用其他窗体的模式窗体,作为一个集线器。其他窗体是以模态方式调用的。问题是,只要子窗体隐藏或卸载,父模态窗体也会关闭。
我试图找到答案,但即使有类似的问题存在,也没有一个提供有效答案的问题。
经过一番测试,我确定任意数量的打开模式窗体都会以同样的方式关闭。此外,我无法在新工作簿的最小模型中重现这个问题。之后,我开始逐步添加原始工作簿的所有组件(有几个模块、10-20个类和几个窗体),以查看问题何时出现。
当我发现即使我将所有东西都导入回来,问题仍然没有重新出现时,我既宽慰又烦恼。我的结论是这是某种偶然事件,不会再困扰我。但是,不久之后,当我添加了另一个具有相同调用代码的子窗体时,同样的问题又出现了,但旧的窗体没有出现这个问题。
然后我导出了出现问题的窗体,从工作簿中删除它,然后再次导入它。嗯,它又可以工作了。
有没有遇到过这种行为的人?我做错了什么吗?或者我应该把这个当作一个恼人但可避免的错误吗?
请在下面找到问题的最小模型,不包括所有内容:
调用主窗体的模块:
我试图找到答案,但即使有类似的问题存在,也没有一个提供有效答案的问题。
经过一番测试,我确定任意数量的打开模式窗体都会以同样的方式关闭。此外,我无法在新工作簿的最小模型中重现这个问题。之后,我开始逐步添加原始工作簿的所有组件(有几个模块、10-20个类和几个窗体),以查看问题何时出现。
当我发现即使我将所有东西都导入回来,问题仍然没有重新出现时,我既宽慰又烦恼。我的结论是这是某种偶然事件,不会再困扰我。但是,不久之后,当我添加了另一个具有相同调用代码的子窗体时,同样的问题又出现了,但旧的窗体没有出现这个问题。
然后我导出了出现问题的窗体,从工作簿中删除它,然后再次导入它。嗯,它又可以工作了。
有没有遇到过这种行为的人?我做错了什么吗?或者我应该把这个当作一个恼人但可避免的错误吗?
请在下面找到问题的最小模型,不包括所有内容:
调用主窗体的模块:
Sub testA()
Dim main1 As MainForm1
Set main1 = New MainForm1
main1.Show (vbModeless)
End Sub
主表单:
Option Explicit
Dim formobject As frmPickInjection
Private Sub CommandButton1_Click()
Set formobject = New frmPickInjection
With formobject
.Show (vbModal)
Label1.Caption = CStr(.SelectedInjection)
End With
End Sub
子表单:
Option Explicit
Public passvar As Boolean
Private Sub CheckBox1_Click()
passvar = CheckBox1.Value
End Sub
操作系统:Microsoft Windows 7企业版 6.1.7601(服务包1版本号7601)
Excel 版本:Office365 Excel 2016(16.0.6729.1014),64 位
VBA 版本:7.1