我需要生成在电子表格中用数据标记的按钮,并将其放置在特定的单元格中。每个人都需要具有基于代码逻辑的背景色设置程序。我可以创建它们,调整大小,放置它们并设置字体信息:
Set rt = WSOut.Range(sButtonCol & k).Cells
Set btn = WSOut.Buttons.Add(rt.Left + 1, rt.Top + 1, 60, 8)
btn.Select
With btn
.OnAction = "ButtonAction"
.Caption = sTicker
.Name = sTicker
.Font.ColorIndex = 1
.Font.Bold = True
.Font.Size = 7
End With
但是我似乎找不到如何设置按钮的背景色。这对于从表中的100个左右快速挑选所需的按钮组至关重要。我已经尝试过
btn.Interior.Color = RGB(0, 255, 0)
但是这似乎适用于某些手动创建的按钮
此工作表需要经常用新数据重新生成,并从数据中重新创建按钮。正常工作,除了100个按钮都是相同的颜色。
感谢任何帮助。我花了2个小时与Goog博士狩猎,但没有运气。
Pete A
正如BigBen在他的评论中所写,您正在创建Form控件按钮。为此,既不能通过VBA也不能从Excel中更改背景颜色。
第一种选择是创建ActiveX按钮。 This answer显示操作方法。缺点:每个按钮都需要一个单独的事件例程。答案包括动态创建此类例程所需的代码。它使用VBE库注入代码。但是,通常在计算机上禁止使用VBE。
第二种选择是创建简单的形状而不是按钮。您可以将宏分配给它们,就像“表单”按钮一样。创建这种形状的代码:
Dim btn as Shape
Set btn = ws.Shapes.AddShape(msoShapeRoundedRectangle, 200, 200, 100, 50)
With btn
.Name = sTicker
.OnAction = "ButtonAction"
With .TextFrame.Characters
.Text = sTicker
.Font.Bold = True
.Font.Size = 7
.Font.Color = vbBlue
End With
.Fill.ForeColor.RGB = vbRed
End With
Update:要将形状放置到单元格中,可以使用单元格的left / top / width / height属性。要将形状“粘合”到单元格,请使用Placement
属性。看看
Sub CreateShape(r As Range, caption As String, color As Long)
Dim btn As Shape
Set btn = r.Parent.Shapes.AddShape(msoShapeRoundedRectangle, _
r.Left, r.Top, r.Width, r.Height)
With btn
.Name = "Btn" & caption
.TextFrame.Characters.Text = caption
.Placement = xlMoveAndSize
.Fill.ForeColor.RGB = color
End With
End Sub