使用VBA设置旋钮模式控制的最小/最大值

我的工作表上有一个旋转button(不是用户窗体),我需要在VBA中设置最小值和最大值。 很简单,对吧? 我尝试了worksheetName.Shapes("shapeName").Min = x但我得到运行时错误438:对象不支持此属性或方法。

我使用了Excel的macroslogging器,并更改了旋钮的最小和最大值,并logging下如下内容:

 ActiveSheet.Shapes("shapeName").Select With Selection .Min = x .Max = y End With 

怎么样,如果我select形状,我可以访问它的属性,但如果我直接引用形状,我无法访问相同的属性? 这对我来说没有意义。 显然,我想避免select形状和参考“select”,因为这通常不是最佳实践。

您可以使用Shape.ControlFormat属性:

 Sub test() Dim shp As Excel.Shape Set shp = ActiveSheet.Shapes("Spinner 1") With shp.ControlFormat .Min = 2 .Max = 33 End With End Sub 

这个答案会很有帮助,虽然不是特别直观

Excel-VBA:从窗体控件获取值

正如我在上面的评论中提到的,这是奇特的。 SpinButton是工作表Shapes集合的成员,但它不允许你直接作为形状访问这些属性(请参阅Doug的答案,如何以更好的方式做到这一点)。

尝试:

 With ActiveSheet.Spinners("spinbutton1") .Min = x .Max = y End With 

同样,如果你有多个这样的控件,你可以删除一个variables并迭代:

 Dim spinbtn as Spinner 'or As Variant For each spinbtn in ActiveSheet.Spinners spinbtn.Min = x spinbtn.Max = y Next 

等等。