我是非常新的宏,我正在尝试在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
顺便说一句,这是为了好玩,而不是为了任何特殊或官方的事情。
答案 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中的工作表模块。在代码窗格顶部的左下拉列表中,找到您的控件名称(您可能希望首先重命名它 - 我没有为此示例)
当您在左下拉列表中选择控件名称并在右侧选择事件名称时,VBE会为您存储Sub和End Sub。
接下来,您需要在代码中引用您的形状。首先使用Me
关键字。当您在工作表的代码模块中时,Me
引用该工作表。然后点运算符将公开该表的所有属性和方法。在工作表上删除ActiveX控件时,将自动创建工作表的新属性,以提供对该对象的访问。你可以使用
Me.CommandButton1.BackColor = RGB(231, 230, 230)
你If
逻辑看起来很好。