我有一个交互式表格,里面装满了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语句。
答案 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
技巧。