用于清除VBA中的UserForms复选框的功能

时间:2016-11-20 10:38:02

标签: vba checkbox userform

我正在创建一个包含多个UserForms的程序。 在程序结束时,我需要清除一些UserForm中的每个Checkbox。我创建了一个函数,但它无法识别它应该清除哪个UserForm,你可以帮我吗?这是代码:

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")

似乎没有认识到它应该对哪个UserForm起作用。

2 个答案:

答案 0 :(得分:2)

Shai Rado的建议很好,你应该看看他是如何用'钥匙'创造物品的。

我只发布此答案以检查您是否知道可以在通话中传递对象本身。所以你的代码可能是这样的:

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

答案 1 :(得分:0)

您不需要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