将复选框Name,Value和GroupName发送到方法OnClick

时间:2012-07-04 11:03:44

标签: vba vbscript excel-vba checkbox excel

我正在尝试在复选框的onclick事件中调用Sub。我想要做的是获取我单击的复选框的groupName,Name和Value参数,并将它们提供给一个sub,该子使用变量将组中其余复选框切换为隐藏或取消隐藏。但是,我希望有多个组复选框具有相同的功能,而不是为每个onclick事件创建多个函数,我希望每次只能调用处理可见性变化的sub。

Application example

考虑上面的图片。如果我将“管理员”复选框设置为false,则应隐藏同一框中的“旧版本”复选框。如果我将其检查为true,则应再次显示。我也想对客户端盒做同样的事情。我看过网上很多人建议使用ActiveControl.Value或Application.Caller,但这些似乎都不起作用。我到目前为止使用的两个潜艇可以在下面找到。在它的当前状态,

处的应用程序错误
    admin_value = ActiveControl.Value

以下是完整的代码段:

  Private Sub admin_toggle_Click()

      Dim admin_group As String
      Dim admin_name As String
      Dim admin_value As String

      admin_value = ActiveControl.Value
      admin_name = ActiveControl.Name
      admin_group = ActiveControl.GroupName

     Call toggle_options

  End Sub

  Private Sub toggle_options()

  Dim ctl As Control

  For Each ctl In Me.Controls

    If TypeOf ctl Is MSForms.CheckBox Then
        If ctl.GroupName = admin_group Then
        If ctl.Name <> admin_name Then
            If admin_value = True Then
            ctl.Visible = True
            Else
            ctl.Visible = False
            End If
        End If
        End If
    End If

Next ctl

End Sub  

提前致谢。

1 个答案:

答案 0 :(得分:1)

这是你在尝试的吗?

Private Sub admin_toggle_Click()
    Dim ctl As Control

    Set ctl = admin_frame.ActiveControl
    ShowHideControls admin_frame, ctl
End Sub

Sub ShowHideControls(frme As Control, cb As Control)
    Dim c As Control

    For Each c In frme.Controls
        If TypeOf c Is MSForms.CheckBox Then
            If c.Name <> cb.Name Then
                If cb.Value = True Then
                    c.Visible = True
                Else
                    c.Visible = False
                End If
            End If
        End If
    Next
End Sub