我有一个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

10-08 02:49