VBA,点击按钮填充形状

时间:2016-06-15 20:48:08

标签: excel vba excel-vba

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

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

顺便说一句,这是为了好玩,而不是为了任何特殊或官方的事情。

3 个答案:

答案 0 :(得分:2)

以下是您要查找的代码:

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

请确保将上述代码调整为正确的形状名称(在此示例中为“Rectablge 1”,位于Sheet(1)上)。

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

下次,我建议您(在第一步中)使用VBA宏录制器记录您希望Excel为您执行的操作:https://www.youtube.com/watch?v=Q_HQGHPBYoo然后,查看代码并尝试理解它通过突出显示VBA关键词并按F1。另外,我建议你阅读:http://www.homeandlearn.org/之后你应该写一些相当奇特的宏。

答案 1 :(得分:1)

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

编辑:对不起,我原本以为你想要改变实际的按钮颜色。我借用拉尔夫的答案来解释形状是颜色变化的对象,但是在这下面是一个ActiveX控件(如你所要求的)而不是表单按钮:

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

答案 2 :(得分:0)

是的,您需要一个按钮名称。删除工作表上的ActiveX控件,然后转到VBE中的工作表模块。在代码窗格顶部的左下拉列表中,找到您的控件名称(您可能希望首先重命名它 - 我没有为此示例)

enter image description here

当您在左下拉列表中选择控件名称并在右侧选择事件名称时,VBE会为您存储Sub和End Sub。

接下来,您需要在代码中引用您的形状。首先使用Me关键字。当您在工作表的代码模块中时,Me引用该工作表。然后点运算符将公开该表的所有属性和方法。在工作表上删除ActiveX控件时,将自动创建工作表的新属性,以提供对该对象的访问。你可以使用

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

If逻辑看起来很好。