VBA Excel:以编程方式创建和放置100个按钮并设置背景色

问题描述 投票:0回答:1

我需要生成在电子表格中用数据标记的按钮,并将其放置在特定的单元格中。每个人都需要具有基于代码逻辑的背景色设置程序。我可以创建它们,调整大小,放置它们并设置字体信息:

              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

excel vba button
1个回答
2
投票

正如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
© www.soinside.com 2019 - 2024. All rights reserved.