2012-07-03 82 views
1

我遇到了vba表单中复选框的onclick事件问题。基本上我想要做的是将特定选项卡上所有复选框的值设置为与主复选框相同的值。在这种情况下,它是'Use Online'标题复选框(在代码中为online_toggle),一旦点击,它应该在'on'或'off'选项卡上切换其他复选框。目前,我有以下的代码,但它不断产生错误的“对于每一个OBJ在online.OLEObjects”根据主复选框选项切换选项卡中的复选框

My user form

Private Sub online_toggle_Click() 

Dim ctl As Control 

For Each ctl In Me.MultiPage1.Pages(6).Controls 

    If TypeOf ctl Is MSForms.CheckBox Then 
     If ctl.GroupName = "online_variants" Then 
     If ctl.Name <> "online_toggle" Then 
      ctl.Value = online_toggle.Value 
     End If 
     End If 
    End If 

Next ctl 

End Sub 

注:在线是所有复选框所在的选项卡的名称。如果它可以帮助受主复选框的复选框都被归为online_variants

干杯,

杰森

+0

这是您正在使用的多页面还是Tabstrip? –

+0

我认为这是一个标签条。如果有帮助,那么需要更改的复选框以名称online_variants分组。 – jezzipin

+0

在这种情况下,我认为这是一个多页面。在设计时,在Tabstrip中,Tab1中的控件在Tab2中可见,而在Multipage中,当您在标签之间切换时,您可以看到独立的控件... –

回答

1

在Mutipage页码从0开始,所以如果你想指的复选框中Online标签(第7个标签)然后使用这个

Dim ctl As Control 

For Each ctl In Me.MultiPage1.Pages(6).Controls 
    If TypeOf ctl Is MSForms.CheckBox Then 
     '~~> Your code here 
     Debug.Print ctl.Name 
    End If 
Next 
+0

如果我理解正确的话,这是现在我已经在那里代码:Private Sub online_toggle_Click() 昏暗的CTL作为控制 对于每个CTL在Me.MultiPage1.Pages(6).Controls 如果TypeOf运算CTL是MSForms.CheckBox然后 如果ctl.Name <> “online_toggle” 然后 ctl.Object.Value = online.online_toggle.Value 结束如果 结束如果 接下来CTL 结束Sub - 这不工作,虽然。 – jezzipin

+1

'ctl.Object.Value = online.online_toggle.Value'不正确。您可以使用'Ctl.Value',而不是直接使用复选框名称,例如'Ctl.Value = online_toggle.Value' –

+0

这很棒。现在它已经解决了这个问题,因为我将在选项卡上有多个主复选框,我只希望那些分配给指定组的用户受到切换的影响。我猜这只是另一个IF条件,以某种方式引用组? – jezzipin