循环使用多个命令按钮以根据单元格值更改其属性

时间:2014-08-12 14:00:14

标签: vba excel-vba commandbutton excel

我有一个交互式表格,里面装满了100多个不同的命令按钮,每个按钮都为变量赋值,然后使用自定义函数计算它们的输出。他们引用第二张表上的表格来获取他们分配的值。有没有办法根据单元格是否包含内容,更改每个按钮的颜色?到目前为止,这就是我所拥有的(当然是非功能性的)。

Sub Auto_Open()
Dim n As Integer
n = 2
Do Until n = 114
    If Sheet2.Cells(n, 4) = vbNullString Or Sheet2.Cells(n, 5) = vbNullString Or Sheet2.Cells(n, 8) = vbNullString Or Sheet2.Cells(n, 9) = vbNullString Or Sheet2.Cells(n, 10) = vbNullString Or Sheet2.Cells(n, 11) = vbNullString Then
        ActiveSheet.Shapes.Range(Array("CommandButton" & (n - 1))).Select
        Range.Array(Selection).BackColor = 500
    Else
        ActiveSheet.Shapes.Range(Array("CommandButton" & (n - 1))).Select
        Range.Array(Selection).BackColor = 300
    End If
n = n + 1
Loop

End Sub

编辑: 我不能明确说明每个命令按钮的颜色,而不必写入超过100种不同的情况。我有112个不同的命令按钮;我必须编写112个单独的IF语句。

1 个答案:

答案 0 :(得分:1)

一个命令按钮的示例:

Dim cb As CommandButton
Set cb = Sheet1.CommandButton1
With Sheet2.Range("A1")
    If .Value = "Red" Then
        cb.BackColor = RGB(255, 0, 0)
    ElseIf .Value = "Green" Then
        cb.BackColor = RGB(0, 255, 0)
    Else
        cb.BackColor = RGB(155, 155, 155) ' gray
    End If
End With

如果要循环浏览许多命令按钮,可以执行以下操作。在这个例子中,我查看Sheet2上的单元格A1:A5,并相应地设置Sheet1的命令按钮1到5的颜色。

Dim cb As CommandButton
Dim i As Long

For i = 1 To 5
Set cb = Sheet1.Shapes("CommandButton" & i).OLEFormat.Object.Object ' Ouch!
    With Sheet2.Range("A1").Cells(i, 1)
        If .Value = "Red" Then
            cb.BackColor = RGB(255, 0, 0)
        ElseIf .Value = "Green" Then
            cb.BackColor = RGB(0, 255, 0)
        Else
            cb.BackColor = RGB(155, 155, 155) ' gray
        End If
    End With
Next i

我从here获得的.Object.Object技巧。