【问题标题】:Execute code when form is closed in VBA (Excel 2007)在 VBA 中关闭表单时执行代码(Excel 2007)
【发布时间】:2010-08-18 12:13:01
【问题描述】:

当用户使用窗口右上角的 x 按钮关闭表单时,我想执行一些代码(我在打开 excel 电子表格时加载了表单,它隐藏了 Excel。我想退出关闭表单后显示 excel,或者至少再次显示 excel,以便用户可以手动退出)

查看表单属性,Unload 属性不存在,我也无法弄清楚如何创建一个在表单关闭时执行的函数。

不幸的是,在 VB 中编码这不是一种选择,它必须是 VBA。

我知道取消隐藏或完全退出 Excel 所需的代码,只是不知道如何将其与卸载事件联系起来。

【问题讨论】:

    标签: forms vba excel


    【解决方案1】:

    您可以使用 UserForm 的 QueryClose 事件如下:

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
        If CloseMode = 0 Then
            ' Your codes
            ' Tip: If you want to prevent closing UserForm by Close (×) button in the right-top corner of the UserForm, just uncomment the following line:
            ' Cancel = True
        End If
    End Sub
    

    你也可以像这样使用 vbFormControlMenu:

    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
        If CloseMode = vbFormControlMenu Then
            'Your code goes here
        End If
    End Sub
    

    【讨论】:

      【解决方案2】:

      一位同事能够提供答案,包括此处为其他所有人提供的示例

      Private Sub userform_terminate()
      
          'Code goes here
      
      End Sub
      

      【讨论】:

      • 请注意,隐藏表单时也会触发此操作。如果您只想捕获右上角的关闭按钮 (x),请使用 MRS1367 的答案!
      • 如果任何自定义操作执行Unload me 来关闭表单,也会触发事件Terminate,因此使用事件QueryClose 更适合仅检查如果按下 x 按钮,如 OfficialBAMM 所述。查看 MRS1367 给出的答案。
      【解决方案3】:

      您可以在 VBA 中使用Unload Me 来关闭表单。只需在此之后立即将代码关闭 Excel。

      【讨论】:

      • 谢谢,但是当用户单击 x 按钮时,这如何让我执行代码?也许我没有把问题说清楚,我现在编辑一下。
      • 哦,我明白了,我(错误地)假设用户是通过单击表单按钮而不是窗口上的 x 按钮退出的。
      【解决方案4】:
      Private Sub Form_Unload(Cancel As Integer)
          Dim msgRes As VbMsgBoxResult
          msgRes = MsgBox("Exit form ?", vbYesNo)
          If msgRes = vbYes Then
              'optional code
          ElseIf msgRes = vbNo Then
              Cancel = True
          End If
      End Sub
      

      【讨论】:

      • 目前尚不清楚这如何提供问题的答案。请详细说明此答案以指出原始问题和您的特定解决方案。
      【解决方案5】:

      当单击 X 按钮时,我可以使用以下方法阻止表单关闭:

      Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
         Cancel = MsgBox("Please confirm cancellation", vbOKCancel + vbQuestion) = vbCancel
      End Sub
      

      【讨论】:

        【解决方案6】:

        试试这样的:-

        Private Sub Form1_FormClosing(sender as Object, e as FormClosingEventArgs) _ 
            Handles Form1.FormClosing
        
            //Code you want to execute
        
        End Sub
        

        【讨论】:

        • 当您查看源代码时,应该有一个 FormClosing 事件,您可以为您的表单选择。这是一个示例的链接:img385.imageshack.us/img385/3966/wat3am9.jpg
        • UserForm (Excel VBA) 中没有 FormClosing 事件。
        猜你喜欢
        • 2012-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多