Form控制在代码中使用.shapes和使用.buttons的区别?

时间:2017-11-17 20:02:38

标签: excel vba excel-vba

我在这个宏中放了几个按钮,一切都很好看,看起来不错,但我对代码有疑问。正如您在下面的代码片段中所示,在使用With Activesheet时,代码会使用.Shapes AND .BUTTONS。看起来.Shapes更多地与放置按钮后调整大小有关?而.BUTTONS更多地与它的外观及其作用有关?

我只是想知道它们之间的区别是什么,因为我一度使用.BUTTONS添加按钮,然后我使用.shapes来改变按钮的大小。但是,我使用.Shapes告诉它在点击而不是OnAction时该做什么.BUTTONS。这些属性的区别究竟是什么? (或者其他所谓的我不确定)它们似乎有点交织在一起,我不太确定使用哪个以及何时使用。

With Activesheet
    .BUTTONS.Add(53.25, 36.75, 190.5, 41.25).Select
    .Shapes("Button 6").IncrementLeft 222.75
    .Shapes("Button 6").IncrementTop 147
    .BUTTONS("Button 6").Text = "Mexmo MFG"

    .BUTTONS("Button 10").Text = "10"
    .BUTTONS("Button 10").name = "Button 10"
    .BUTTONS("Button 11").Text = "11"
    .BUTTONS("Button 11").name = "Button 11"
    .BUTTONS("Button 12").Text = "12"
    .BUTTONS("Button 12").name = "Button 12"

    .Shapes("Atlanta MFG").OnAction = "Atlanta"
    .Shapes("Denver MFG").OnAction = "Denver"
    .Shapes("Jackson MFG").OnAction = "Jackson"
    .Shapes("Louisville MFG").OnAction = "Louisville"
End With

2 个答案:

答案 0 :(得分:4)

某些属性仅可用,只能使用Shape对象进行调整。这就是您的代码拥有ButtonsShapes个集合的原因。

Shapes继承的大多数对象通常会公开返回Shape对象的ShapeRange属性。您只需使用它并访问所有相关属性即可。

示例:

Sub test()
    With ActiveSheet
    .Buttons.Add(53.25, 36.75, 190.5, 41.25).Select
    .Shapes("Button 6").IncrementLeft 222.75

    '/ This works same as Shapes("Button 6")
    .Buttons("Button 6").ShapeRange.IncrementTop 147

    .Shapes("Button 6").IncrementTop 147
    End With
End Sub

答案 1 :(得分:0)

扩展@ cyoashu的回答,值得注意的是.Buttons.Add()方法返回添加的按钮,因此您可以直接在{{1阻止:

With

...这使您无需了解刚刚添加按钮的名称。