在 VBA 中清除 UserForms 复选框的函数

Function to clear UserForms checkbox in VBA

我正在创建一个包含多个用户窗体的程序。 在程序结束时,我需要清除某些用户窗体中的每个复选框。我创建了一个函数,但它无法识别应该清除哪个用户窗体,你能帮我吗?这是代码:

Function ClearUserForm(ByVal userf As String)

Dim contr As Control

For Each contr In userf.Controls

    If TypeName(contr) = "CheckBox" Then
        contr.Value = False
    End If
Next

End Function

我是这样调用函数的,例如:

ClearUserForm ("UserForm2")

似乎无法识别应该作用于哪个用户窗体。

你不需要 Function(因为你没有返回任何参数),在你的情况下 Sub 就可以了。

您需要使用以下方法将对象限定为 User_Form

Set objUserForm = UserForms.Add(userf)

完整代码

(已测试)

Option Explicit

Sub ClearUserForm(ByVal userf As String)

Dim contr As Control
Dim objUserForm As Object

Set objUserForm = UserForms.Add(userf)

For Each contr In objUserForm.Controls

    If TypeName(contr) = "CheckBox" Then
        contr.Value = False
    End If
Next
' just to check that all checkboxes are cleared
objUserForm.Show

End Sub

Shai Rado 的建议很好,您应该看看他是如何根据 'key'.

创建对象的

我只 post 这个回答是为了检查您是否知道您可以在调用中传递对象本身。所以你的代码可能是这样的:

Option Explicit

Public Sub RunMe()
    ClearCBoxes UserForm1
End Sub

Private Sub ClearCBoxes(frm As MSForms.UserForm)
    Dim ctrl As Control

    For Each ctrl In frm.Controls
        If TypeOf ctrl Is MSForms.ComboBox Then
            ctrl.Value = False
        End If
    Next

End Sub