VBA问题理解

时间:2018-09-21 09:06:46

标签: excel vba excel-vba

我被要求在 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"所创建的每个新形状,而保留为宏来创建新形状。

在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

Shape.OnAction属性是单击按钮时调用的宏的名称。

因此,此宏创建了一个新形状,为其着色,并告诉它“当有人单击您时,运行宏Etat

但是,我建议您try to avoid using Select in your code。使用Shape.DuplicateWith构造函数将更加整洁和安全:

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