【发布时间】:2012-11-18 04:51:32
【问题描述】:
我对 VBA 非常陌生(并且只在 excel 中知道它)。
我正在尝试循环浏览一些(但不是全部)复选框。它们目前被命名为 CheckBox1 到 CheckBox15。如何循环通过 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
当然,循环对结果没有影响,但是当 Checkbox2 为 True 时,它会编译并且 atLeastOneChecked 从 False 变为 True。请注意,Sheet2 已被命名为 ActiveX。我显然不明白工作表和控件是如何工作的。有人可以帮忙吗?
修复下面描述的错误后,这仍然不起作用。我简化为:
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
错误状态:对象不支持此属性或方法
这适用于 OLEObject,但不适用于复选框。当我查看 ole 的属性时,我看到它的 Object 属性设置为 Object/Checkbox 并且这个 Object 有一个值。我想这就是我应该在 if 语句中引用的内容,但我不知道如何。
【问题讨论】:
-
您遇到的一个错误是您使用
Worksheet,而您应该使用Worksheets。要早点发现这一点,请在模块顶部输入Option Explicit。 -
谢谢 - 改变了,但它仍然不起作用。我知道为什么,但我不知道问题的解决方案。问题是 Worksheet 没有“控件”成员。它有 OLEobjects 和 Shapes,但我似乎也无法让它工作。
标签: vba