2012-11-15 23 views
0

我对VBA非常陌生(并且只在Excel中知道它)。在我的excel页面骑自行车通过一些复选框

我想通过一些(但不是全部)复选框循环。它们目前通过CheckBox15命名为CheckBox1。 Howe循环说CheckBox5到CheckBox10吗?

我想我希望有一个'方法'类似'CheckType'的控件,将允许我检查名称?

这是我试过的。导致编译错误 - 未定义子或函数,并突出显示工作表。

Private Sub BoxCheck() 
atLeastOneChecked = False 
    For i = 2 To 4 
     If Worksheets("ActiveX").Controls("Checkbox" & i).Value = True Then 
      atLeastOneChecked = True 
     End If 
    Next i 
End Sub 

虽然上述不工作,下面是什么呢:

Private Sub BoxCheck() 
    atLeastOneChecked = False 

    For i = 1 To 2 
     If Sheet2.CheckBox2.Value = True Then 
       atLeastOneChecked = True 
     End If 
    Next i 

End Sub 

当然,在循环没有对结果的影响,但它编译和atLeastOneChecked从假变为真时Checkbox2是真正。请注意,Sheet2已被命名为ActiveX。我显然不明白Worksheet和Controls如何工作。有人可以帮忙吗?

修复下面所述的错误后,这仍然不起作用。我简化如下:

Private Sub BoxCheck() 
    Dim ole As OLEObject 

    atLeastOneChecked = False 
    Set ole = Sheets("ActiveX").OLEObjects("Checkbox2") 
    If ole.Value = True Then 
     atLeastOneChecked = True 
    End If 
End Sub 

这是行不通的。它未能在:

If ole.Value = True Then 

的错误状态:对象不支持此属性或方法

这是OLEObjects真实的,而不是复选框。当我查看ole的属性时,我看到它的Object属性设置为Object/Checkbox,并且此Object具有一个值。我想这就是我在if语句中应该引用的内容,但我不知道如何。

+1

您遇到的一个错误是您在使用'Worksheets'时正在使用'Worksheet'。为了赶上这一点,在模块的顶部输入“Option Explicit”。 – Brad

+0

谢谢 - 改变了,但它仍然无法正常工作。我知道为什么,但我不知道解决问题的办法。问题在于Worksheet没有“控件”成员。它有OLEobjects和Shapes,但我似乎无法让它工作。 – RoryG

回答

1

我想我解决了这个问题。

复选框的值是通过引用我设定的OLEOBJECT内的对象属性...喜欢这个访问:

If ole.Object.Value = True Then 

感谢您的帮助。如果有人有更优雅的解决方案,我仍然希望看到它。

+0

啊,好的。 'ole.Value = True'对我来说没有任何错误,但是因为这对你有用,所以这是最好的答案。 :-) –

+0

Thx,这也是我的伎俩。如果(wsActions.OLEObjects(“chkOpt1”).Object.Value)Then doit(1)else doit(0)/ wsActions.OLEObjects(“chkOpt1”)。Object.Value = False – Whome

0

使用CheckBox.Name

例子:

For Each cb In ActiveSheet.CheckBoxes 
    If cb.Name = "CheckBox5" 
     ' Do stuff 
    End If 
Next cb 
0

要在@Parker的回答拓展:

Private Sub BoxCheck() 
    atleastonechecked = False 
    Dim oles As OLEObject 
    For i = 2 To 4 
     'If you're using Shapes Controls: 
     If ThisWorkbook.Worksheets("ActiveX").Shapes("Check Box " & i).Value = True Then 
      atleastonechecked = True 
     End If 
     ' If you're using ActiveX Controls 
     Set oles = ThisWorkbook.Worksheets("ActiveX").OLEObjects("CheckBox" & i) 
     If oles.Value = True Then 
      atleastonechecked = True 
     End If 
    Next i 
End Sub 

不好意思,刚才放在一起以前的答案未经测试 - 这总是失败。只需根据您使用的控件类型使用If循环。

+0

当我尝试此操作时,出现错误...它不识别工作表。我编辑了我的原始问题,包括我试过的内容 – RoryG

+0

对不起,只是更新了代码。 –

+1

这仍然不适合我。我对错误 - '对象不支持这种方法或属性',当我调试发生在行if'ole.Value = True然后当我检查ole的属性,我看到它是一个OLEObject /复选框,并在对象属性中,它确实有一个值? – RoryG

相关问题