使用VBA设置旋转按钮表单控件的最小/最大值

时间:2013-12-02 17:00:28

标签: excel vba excel-vba

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

我使用了Excel的宏录制器并更改了旋转按钮的最小值和最大值,并记录了以下内容:

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

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

3 个答案:

答案 0 :(得分:2)

您可以使用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

答案 1 :(得分:1)

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

Excel-VBA: Getting the values from Form Controls

正如我在上面的评论中提到的那样,它很奇特。 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

答案 2 :(得分:0)

您可以尝试以下方法:

Private Sub SpinButton1_SpinDown()
    TextBox3.Text = val(TextBox3.Text) - 1
    If TextBox3.Text < 0 Then TextBox3.Text = 0
End Sub