我正在尝试通过VBA代码更改表单控件复选框的背景颜色。我已经尝试了我可以在互联网上找到的每种代码变体,但仍然会出现故障。
我目前的线路在下面,是迄今为止我发现的唯一一个不会给我编译错误的线路。当我运行它虽然我得到一个“运行时错误'438':对象不支持此属性或方法”执行此行时出错。这是真的,无论我将它设置为xlBlack,RGB(255,255,255)还是“11398133”(我知道不是黑色,但我只是想看看是否有任何颜色可用)。
任何人都知道发生了什么以及我如何实际做到这一点?
Sheets("Controls").Shapes.Range(Array("Check Box 8")).BackColor = "11398133"
答案
我找到了答案。由于某些原因,没有一个响应有效,但Johnny的回答确实帮助我通过在内存中加载正确的对象来接近它,然后我可以使用Locals窗口来追踪我想要的属性。
最后,它确定了Johnny建议的对象,然后只是cb.Interior.Color = xlBlack我正在寻找。没有.Fill和没有.DrawingObject。不知道是什么让这种情况与那些能够以这种方式工作的人不同,但是你去了。
所以,对于任何其他人来看,最终为我工作的代码是下面的简单添加,你可以找到对象的Excel名称(在我的情况下,复选框8)在录制宏时选择它。
For Each cb In Sheets("Controls").CheckBoxes
If cb.Name = "Check Box 8" Then
cb.Interior.Color = xlNone
Exit Sub
End If
Next
答案 0 :(得分:3)
这应该为你做。请按照以下步骤操作:
代码:
Sub SetMacro()
Dim cb, ws
For Each ws In ThisWorkbook.Sheets
For Each cb In ws.CheckBoxes
If cb.OnAction = "" Then cb.OnAction = "CheckedUnchecked"
Next cb
Next ws
End Sub
Sub CheckedUnchecked()
With ActiveSheet.Shapes(Application.Caller).DrawingObject
If .Value = 1 Then
.Interior.ColorIndex = 4
Else
.Interior.ColorIndex = 2
End If
End With
如果您只想在活动工作表上执行此操作,请改用此块:
Sub SetMacro()
Dim cb
For Each cb In ActiveSheet.CheckBoxes
If cb.OnAction = "" Then cb.OnAction = "CheckedUnchecked"
Next cb
End Sub
Sub CheckedUnchecked()
With ActiveSheet.Shapes(Application.Caller).DrawingObject
If .Value = 1 Then
.Interior.ColorIndex = 4
Else
.Interior.ColorIndex = 2
End If
End With
End Sub
答案 1 :(得分:0)
另一种可能性是你想要设置ForeColor而不是BackColor。
非常简单:
Sub changegColor()
Dim wb As Workbook Dim ws As Worksheet Dim cb As Object Dim rng As Range Set wb = ActiveWorkbook Set ws = wb.ActiveSheet Set cb = ws.Shapes.Range(1) With cb.Fill .Solid .ForeColor.RGB = RGB(0, 255, 0) End With
End Sub