关于excel:VBA,单击按钮填充形状

VBA, Fill shape with button click

我对宏非常陌生,我正在尝试在excel 2013中自学VBA,并且可能会使用很多帮助。我想知道如何在单击ActiveX按钮时更改形状填充颜色(而不是单元格)。这是我的想法:

1
2
3
4
5
6
onClick()                            <-- Do I need a button name?
if shape.color = RGB(231,230,230)    <-- this is the starting color
    shape.color = RGB(0,0,0)         <-- this is what I want to change it to
else
    shape.color = RGB(231,230,230)   <-- if color is black change to this
end if

顺便说一句,这是为了娱乐,而不是为了任何特殊或正式的事情。


这是您要查找的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Option Explicit

Sub ButtonClick()

Dim shp As Shape

Set shp = ThisWorkbook.Worksheets(1).Shapes("Rectangle 1")

If shp.Fill.ForeColor.RGB = RGB(231, 230, 230) Then
    shp.Fill.ForeColor.RGB = RGB(0, 0, 0)
Else
    shp.Fill.ForeColor.RGB = RGB(231, 230, 230)
End If

End Sub

只需确保将上面的代码调整为正确的形状名称(在此示例中为Sheet(1)上的" Rectablge 1 ")。

然后,在该工作表上创建一个按钮,并将此宏分配给该按钮以使其起作用,并在黑色和灰色之间切换形状颜色。

下次,我建议您(第一步)使用VBA宏记录器记录您希望Excel为您做的事情:https://www.youtube.com/watch?v=Q_HQGHPBYoo之后,请查看代码并通过突出显示VBA关键字并按F1尝试理解它。另外,我建议阅读以下内容:http://www.homeandlearn.org/之后,您应该设置为编写一些相当漂亮的宏。


将其放在包含按钮的工作表模块中:

编辑:对不起,我原本以为您希望更改按钮的实际颜色。我借用了拉尔夫(Ralph)的答案以说明形状是颜色更改的对象,但是在此之下是针对ActiveX控件(如您所要求的)而不是表单按钮:

1
2
3
4
5
6
7
8
9
Private Sub CommandButton1_Click() ' Yes, you do need to specify the button
    Dim shp As Shape
    Set shp = ThisWorkbook.Worksheets(1).Shapes("Rectangle 1")
    If shp.Fill.ForeColor.RGB = RGB(231, 230, 230) Then
        shp.Fill.ForeColor.RGB = RGB(0, 0, 0)
    Else
        shp.Fill.ForeColor.RGB = RGB(231, 230, 230)
    End If
End Sub

是的,您需要一个按钮名称。将ActiveX控件放在工作表上,然后转到VBE中工作表的模块。在代码窗格顶部的左侧下拉列表中,找到您的控件名称(您可能想先对其重命名-在此示例中我没有使用该名称)

enter

1
Me.CommandButton1.BackColor = RGB(231, 230, 230)

您的If逻辑看起来不错。