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