我被要求在 VBA Excel上的以下代码继续上的代码:
Sub Ajout_45()
Ajout (45)
End Sub
Sub Ajout_60()
Ajout (60)
End Sub
Sub Ajout(diametre)
Dim nomforme As String
Dim basenom As String
basenom = "Forme_"
If (diametre = 45) Then
nomforme = basenom + "45"
ElseIf (diametre = 60) Then
nomforme = basenom + "60"
End If
ActiveSheet.Shapes(nomforme).Copy
Application.Wait (Now + TimeValue("0:00:01"))
ActiveSheet.Paste
Selection.ShapeRange.Fill.ForeColor.RGB = RGB(255, 204, 153)
Selection.ShapeRange.Name = compt
compt = compt + 1
Selection.OnAction = "Etat"
End Sub
这是我第一次使用VBA,所以我试图理解代码。 我基本上了解的是,它基于已经存在的形状创建形状。复制并粘贴。然后用给定的RGB填充新形状的颜色。然后给新形状起个名字。然后调用单击宏Etat。 如果我错过了某件事或某处我错了,请告诉我。
我的第二个问题是,为什么要注释行Selection.OnAction = "Etat"
所创建的每个新形状,而保留为宏来创建新形状。
在此先感谢您的帮助!
答案 0 :(得分:0)
Shape.OnAction
属性是单击按钮时调用的宏的名称。
因此,此宏创建了一个新形状,为其着色,并告诉它“当有人单击您时,运行宏Etat
”
但是,我建议您try to avoid using Select
in your code。使用Shape.Duplicate
和With
构造函数将更加整洁和安全:
Sub Ajout(diameter AS Long)
Dim nomforme As String
Dim basenom As String
basenom = "Forme_"
If (diametre = 45) Then
nomforme = basenom + "45"
ElseIf (diametre = 60) Then
nomforme = basenom + "60"
End If
With ActiveSheet.Shapes(nomforme).Duplicate 'Duplicate Shape
.Name = compt 'Set Name
.Fill.ForeColor.RGB = RGB(255, 204, 153) 'Set Colour
.OnAction = "Etat" 'Set the "click" macro
compt = compt + 1 'Increase counter
End With
End Sub
(使用ActiveSheet
也会引起问题-如果您始终在特定的工作表上使用它,请尝试直接引用它,例如Sheet1.Shapes
而不是ActiveSheet.Shapes
)