【问题标题】:Function to clear UserForms checkbox in VBA在 VBA 中清除用户窗体复选框的功能
【发布时间】:2017-04-03 20:05:37
【问题描述】:

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

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

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

【问题讨论】:

  • 试试下面的代码,让我知道它是否像你想要的那样工作

标签: vba checkbox userform


【解决方案1】:

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

【讨论】:

  • LOL :) 反正我的自尊心太大了,我什至感觉不到 ;) 。但是您还通过Object +1 添加了一件好事
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    相关资源
    最近更新 更多