我有一个vba userForm,上面有36个按钮。当我的一个价差表中的值达到某个数字时,我想禁用所有按钮。现在,每单击一个按钮,我引用的电子表格上的数字就会增加一个。当数字达到三个时,我想禁用所有按钮。
最佳答案
Dim oCtrl As Control
Dim oButton As CommandButton
For Each oCtrl In MyForm.Controls
If oCtrl.Tag = "SomeValue" Then
Set oButton = oCtrl
oButton.Enabled = False
End If
Next
Set oCtrl = Nothing
Set oButton = Nothing
如果您不想禁用其他按钮,则解决方案是使用Tag属性。将要一起启用或禁用的所有按钮上的Tag属性设置为相同的值。然后,您可以在外观中检查该值并启用/禁用它们。另一种方法是给它们命名相同的前缀或后缀,然后在代码中进行检查。
添加
顺便说一句,Control对象没有Enabled属性。因此,您必须将其“转换”到CommandButton才能禁用它。显然,Control对象确实具有Enabled属性,但是它不会以智能感知显示。但是,您仍然应该尝试将Control强制转换为CommandButton,以确保这就是您所拥有的。这是扩展版本:
Dim oCtrl As Control
Dim oButton As CommandButton
For Each oCtrl In MyForm.Controls
If oCtrl.Tag = "SomeValue" Then
On Error Resume Next
Set oButton = oCtrl
On Error GoTo 0
If Not oButton Is Nothing Then
oButton.Enabled = False
End If
End If
Next
Set oCtrl = Nothing
Set oButton = Nothing