如何在 excel VBA 中选择另一个用户表单或空白 space 时关闭用户表单?

How to close a userform when another userform or a blank space is selected in excel VBA?

只要人们点击用户表单上的 Debit AccountCredit Account 字段,就会弹出另一个带有 Treeview 的用户表单。但是,用户将始终必须按取消才能关闭用户窗体。当 Voucher Entry Form 用户表单区域被选中时,用户表单是否有自动关闭的方法?

如果问题是 "How to unload a user-form if it is not more the active object?" 那么所讨论的用户表单必须是无模式的。因为如果不关闭它就无法停用 window。并且因为不可能从模式用户窗体打开无模式用户窗体,主用户窗体也必须是无模式的。

示例:

有两个用户表单:

第一个用户表单被命名为 "MainForm" 并且有一个按钮控件并应用了以下代码:

Private Sub CommandButton1_Click()
 Load SubForm
 SubForm.Show vbModeless
 SubForm.Left = Me.Left + 100
 SubForm.Top = Me.Top + 100
End Sub

第二个用户表单名为 "SubForm",可以为空,但应用了以下代码:

Private Sub UserForm_Deactivate()
 Unload Me
End Sub

然后在默认模块中跟随 Sub 显示主要形式:

Sub test()
  MainForm.Show vbModeless
End Sub

现在显示主窗体后,可以通过单击按钮打开子窗体。如果 MainForm 再次获得活动窗体(再次获得焦点),则 SubForm 将卸载。