Configure Min / Max of Spin Button Form Control con VBA

Tengo un button de giro en mi hoja de trabajo (no en una forma de usuario), y necesito establecer los valores mínimo y máximo en VBA. Fácil, ¿verdad? Intenté worksheetName.Shapes("shapeName").Min = x pero recibo el error 438 en time de ejecución: el object no admite esta propiedad o método.

Utilicé la grabadora de macros de Excel y cambié el mínimo y el máximo del button de giro, y grabé lo siguiente:

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

¿Cómo es que si selecciono la forma, puedo acceder a sus properties, pero si hago reference a la forma directamente, no puedo acceder a las mismas properties? Esto no tiene sentido para mi. Obviamente, me gustaría evitar seleccionar la forma y hacer reference a la "selección", ya que generalmente esta no es la mejor práctica.

Puede usar la propiedad 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 

Esta respuesta será útil, aunque no particularmente intuitiva …

Excel-VBA: obteniendo los valores de los controles de formulario

Como menciono en los comentarios anteriores, es peculiar. El SpinButton es un miembro de la colección Shapes de la hoja de trabajo, pero no le permite acceder directamente a esas properties como una forma (consulte la respuesta de Doug para saber cómo hacerlo de otra manera, que probablemente sea mejor).

Tratar:

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

Del mismo modo, puede cuidar una variable e iterar si tiene múltiples controles como este:

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

Etc.