VBA更改表格控件背景颜色

我试图通过VBA代码更改窗体控件checkbox的背景颜色。 我已经尝试过在互联网上可以find的代码的每一个变化,我仍然失败。

我目前的行是在下面,是迄今为止我发现的唯一一个不给我编译错误。 当我运行它虽然我得到一个“运行时错误'438':对象不支持此属性或方法”错误执行此行。 这是真的,无论我设置= xlBlack,RGB(255,255,255)或“11398133”(不黑我知道,但我只是想看看是否有任何颜色将工作)。

任何人都知道发生了什么,我怎么能做到这一点?

Sheets("Controls").Shapes.Range(Array("Check Box 8")).BackColor = "11398133" 

回答
我find了答案。 由于某种原因,没有一个响应的工作,但约翰尼的答案确实帮助我更接近它加载正确的对象在内存中,然后我可以使用本地窗口追查我想要的属性。

最后它是确定的约翰尼build议的对象,然后只是cb.Interior.Color = xlBlack我正在寻找。 没有.Fill和没有.DrawingObject。 不知道是什么让这不同于其他人,使这样的工作,但你去。

所以,对于任何其他人来说,最终为我工作的代码是下面的简单添加,你可以通过select它来找出对象的Excel名称是什么(checkbox8在我的情况下)录制macros。

  For Each cb In Sheets("Controls").CheckBoxes If cb.Name = "Check Box 8" Then cb.Interior.Color = xlNone Exit Sub End If Next 

这应该为你做。 按着这些次序:

  1. 在表单上制作一些表单checkbox
  2. 将下面的代码复制到一个模块(也就是F11,插入,模块)
  3. 运行SetMacro
  4. 保存并testing

码:

 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 

另一种可能是你想要设置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 

结束小组