6

我有一个 vba userForm,上面有 36 个按钮。当我的一个电子表格上的值达到某个数字时,我想禁用所有按钮。现在,每单击一个按钮,我所引用的电子表格上的数字就会增加一个。当数字达到三个时,我想禁用所有按钮。

4

3 回答 3

5
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
于 2011-04-08T16:33:04.733 回答
5

将所有按钮放在 Frame 对象中,然后禁用整个框架。这也将禁用框架内的所有内容。

或者,根据您的最后一个问题,您可以使用以下代码:

Dim counter As Integer

Private Sub btn1_Click()
    CaptureImage (btn1.Name)
End Sub

Private Sub btn2_Click()
    CaptureImage (btn2.Name)
End Sub

Private Sub btn3_Click()
    CaptureImage (btn3.Name)
End Sub

Private Sub UserForm_Activate()
    counter = 1
End Sub

Private Sub CaptureImage(ByVal btnName As String)
    Controls("capture" & counter).Picture = Controls(btnName).Picture
    counter = counter + 1
    If counter > 3 Then
        DisableButtons
    End If
End Sub

Private Sub DisableButtons()
    Dim ctl As Control
    For Each ctl In UserForm1.Controls
        If Left(ctl.Name, 3) = "btn" Then
            ctl.Enabled = False
        End If
    Next
End Sub

理想情况下,您希望像 Thomas 建议的那样将 Control 对象转换为 Button。

于 2011-04-08T16:14:51.627 回答
0

@Mike:试试——

If Sheets("Sheet1").Range("A1").Value = 3 Then 
    UserForm1.CommandButton1.Enabled = True 
Else 
    UserForm1.CommandButton1.Enabled = False 
End If

(将Sheet1A1和替换为您的工作簿的正确值UserForm1CommandButton1

于 2011-04-08T16:16:32.100 回答