【发布时间】:2021-10-19 05:11:10
【问题描述】:
我创建了一个简单的用户表单进行测试,但出现了一个问题,我不知道如何解决。
是这样的: 当我第一次打开 .xlsm 文件并关闭用户窗体和工作簿时,这会关闭它们。 但是当我继续再次单击 .xlsm 文件时,关闭用户窗体和工作簿,它(用户窗体)再次弹出。 似乎工作簿没有关闭。 然后我需要再次关闭用户窗体以关闭此工作簿。
我想知道为什么用户表单再次出现?
用户窗体只有一个列表框控件。 以下代码在一个模块中:
Private Sub Auto_Open()
UserForm1.Show
MsgBox "Close2"
ThisWorkbook.Close
End Sub
用户表单包含以下代码:
Private Sub UserForm_Initialize()
Application.Visible = False
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
MsgBox "Close1"
End Sub
【问题讨论】:
-
用户窗体是模态的吗?对我来说,如果不是的话;文档关闭,我得到“Close2”,一旦我点击“OK”,useform 就终止了,没有“Close1”。否则文档似乎关闭了,但 Useform 阻止了其他任何东西的触发。当它关闭时,“Close1”触发,然后是“Close2”。这似乎是有道理的。你是说你得到了两次用户窗体?
-
@Christofer Weber ,它是用户表单模式。是的。我是说我得到了两次用户窗体。我只用列表框画了一个用户表单。然后当我打开 xlsm 文件时,我单击此用户窗体上的 x 按钮,“Close1”和“Close2”都出现并且文件被关闭。但是当我再次单击 xlsm 文件并重复上述操作(单击 x 按钮)时,“Close1”和“Close2”出现并单击“确定”,但用户表单立即再次出现。所以我说我得到了两次用户窗体。
-
我不想添加作为答案,因为它更像是一个建议......使用变量来引用模块中的表单:
Dim MyForm As UserForm1: Set MyForm = New UserForm1: MyForm.Caption = "First Form": MyForm.ListBox1.RowSource = "Sheet1!A1:A4": MyForm.Show。将ShowModal设置为 False,您可以通过重复上述代码并更改变量名称来同时打开表单两次。如果您将UserForm_QueryClose更改为Msgbox Me.Caption,它将在关闭时告诉您关闭表单的标题。