UserForm.Hide 不会隐藏

问题描述 投票:0回答:1

我有一个包含多个用户表单的工作簿,可以打开/关闭其他用户表单。以前我是这样硬编码的:

UserForm1.Hide

这就像一个魅力,毫无问题。但现在我尝试使用用户窗体的名称关闭它们。为此,我使用这个函数:

Public Function Close_UserForm(ByVal UserForm_Name As String) As Boolean
    
    PrintSearchHistory "CLOSE", "Close_UserForm()", UserForm_Name
    If IsOpen_UserForm(UserForm_Name) = False Then
        Close_UserForm = True
        PrintSearchHistory "SUCCESS", "Close_UserForm()", UserForm_Name
        Exit Function
    End If
    Dim obj As Object

    On Error Resume Next
        Set obj = VBA.UserForms.Add(UserForm_Name)
    On Error GoTo 0

    If obj Is Nothing Then
        ErrorShow 0, 10, UserForm_Name
        Exit Function
    End If
    obj.Hide
    Close_UserForm = True
    PrintSearchHistory "SUCCESS", "Close_UserForm()", UserForm_Name
    
End Function

PrintSearchHistory 是一个自定义的 Errorhandler,ErrorShow 也是如此 IsOpen_Workbook 检查工作簿是否已关闭,如果是则跳过该函数。

我的问题是 Obj.Hide。

它执行时没有问题,但用户窗体没有任何反应。

我对 Open_UserForm 有相同的函数,唯一的区别是 Obj.Show 而不是 Obj.Hide。该功能有效。

所有用户窗体都是无模式的,并且所有用户窗体都有几个不同的按钮来关闭用户窗体:始终至少有 1 个 X 按钮和 1 个命令按钮。 对于每个用户窗体,我有 1 个函数,所有关闭按钮都会调用该函数。 例如:Booking_UserForm有X-Button和Close_Button,它们调用Close_Booking。 Close_Booking 有用于用户表单处理的特殊函数,作为最后一个函数,它有 Close_UserForm“Booking_UserForm”

Private Sub CloseBooking()

    Set_UserFormSettings ConstBooking
    ClearBundleArray
    Activate_Workbook RMS_Name, Interface_Sheet
    Close_UserForm ConstBooking
    
End Sub

使用 X 按钮可以,但只是因为它在功能完成后关闭 我尝试过的其他事情是:

将 Obj.Hide 移至函数的最后一行。

将 Obj.Hide 替换为:

卸载我

卸载 Obj(使用此方法会通过调用 UserForm_QueryClose->Close_Workbook->UserForm_QueryClose 等导致堆栈溢出)

excel vba
1个回答
0
投票

不确定您想要什么,但为了隐藏所有打开的用户,您可以使用以下代码

Function hideAllUserforms()
    Dim frm
    ' Loop through all open Userforms
    For Each frm In VBA.UserForms
        frm.Hide
    Next frm
End Function
© www.soinside.com 2019 - 2024. All rights reserved.