我的工作表上有一个旋转按钮(不是用户表单),我需要在VBA中设置最小值和最大值。很简单,对吧?我尝试了worksheetName.Shapes("shapeName").Min = x
,但得到运行时错误438:对象不支持此属性或方法。
我使用了Excel的宏记录器,并更改了旋转按钮的最小值和最大值,它记录了以下内容:
ActiveSheet.Shapes("shapeName").Select
With Selection
.Min = x
.Max = y
End With
如果我选择了形状,我可以访问它的属性,但如果我直接引用形状,我就无法访问相同的属性,这是怎么回事?这对我来说没有意义。显然,我希望避免选择形状和引用"选择",因为这通常不是最佳实践。
您可以使用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
同样,如果你有多个控件,你可以delcare一个变量并迭代:
Dim spinbtn as Spinner 'or As Variant
For each spinbtn in ActiveSheet.Spinners
spinbtn.Min = x
spinbtn.Max = y
Next
等等。
您可以简单地尝试以下操作:
Private Sub SpinButton1_SpinDown()
TextBox3.Text = val(TextBox3.Text) - 1
If TextBox3.Text < 0 Then TextBox3.Text = 0
End Sub