我正在创建一个包含多个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起作用。
答案 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