Vba Selection.shaperage不是';t使用ActiveX命令按钮

Vba Selection.shaperage不是';t使用ActiveX命令按钮,vba,excel,Vba,Excel,我使用ActiveX CommandButton,但在测试Shaperage的选择时遇到问题。我应该更改/修复什么? 提前感谢问题解释 CommandButton没有属性shaperage 因此,错误总是会出现 另一方面,如果更改按钮的对象(表单集合下的对象),则不会出现该问题,因为该属性存在于该对象中 请注意,即使它们在外观上相似,但它们是完全不同的对象,因此,一个属性可能不存在于另一个属性中,或者在另一个属性中的行为类似。 您可以找到有关使用此按钮可以做什么以及如何做的更多信息 解决方

我使用ActiveX CommandButton,但在测试Shaperage的选择时遇到问题。我应该更改/修复什么? 提前感谢

问题解释

CommandButton没有属性
shaperage

因此,错误总是会出现

另一方面,如果更改按钮的对象(表单集合下的对象),则不会出现该问题,因为该属性存在于该对象中

请注意,即使它们在外观上相似,但它们是完全不同的对象,因此,一个属性可能不存在于另一个属性中,或者在另一个属性中的行为类似。 您可以找到有关使用此按钮可以做什么以及如何做的更多信息

解决方案/解决方案

我可以看到,您正在调用另一个子系统来“个性化”创建的按钮,因为它是未知的,您需要根据对象进行更改,以提供所需的格式。 您还需要颠倒代码中的顺序以进行正确的处理

Sub sampleButton_Click()
On Error GoTo ErrorHandler

With Selection.ShapeRange
    If .Type = msoGroup Then
        Call setStyleTest(.GroupItems(.GroupItems.Count))
    Else
        For Each shp In ActiveWindow.Selection.ShapeRange
            Call setStyleTest(shp)
        Next shp
    End If
End With
Exit Sub

ErrorHandler:
    MsgBox "Error", vbExclamation

End Sub
进一步思考


我无法想象您需要使用active X而不是form button collection的场景,因此我建议将所有按钮都更改为active X。

这对我来说很好

msoGroup
的值为
6

在选择组之前,您的代码将一直有效。一旦退出设计模式且未选择组,代码将无法工作

是的,上面两个命令按钮是ActiveX,而不是表单控件


我的建议:坚持使用表单控件。

选择是否为有效的形状范围对象?如果不是,else无法处理,则需要使用“on error”语句Yes。当我选择形状对象并调试它时,问题出在With Selection.shaperage中。如果我用shape按钮更改active-X按钮(在macro中指定它并使用下面的代码),程序将平稳运行。使用
Selection.shaperange(1)
,您还可以将其影响为形状类型变量。
...
    If .Type = msoGroup Then
With Selection.ShapeRange
...