【问题标题】:vba - why does userform come up twice after closing thisworkbookvba - 为什么关闭此工作簿后用户窗体出现两次
【发布时间】: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,它将在关闭时告诉您关闭表单的标题。

标签: vba userform


【解决方案1】:

您可以尝试将其放入工作簿代码部分,如下所示。 并且不要放在单独的模块中。

Private Sub Workbook_Open()
   Application.Visible = False
   userform1.Show
   MsgBox "Close2"
   ThisWorkbook.Close

End Sub

您可以删除用户表单初始化的代码。

这个东西是隐藏的,你可能会打开它两次,因为你确实会导致它没有直接响应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多