¿que tal, chicos?
Juan B. escribio en el mensaje ...
tengo los siguientes objetos en una hoja: Optionbox1;Obtionbox2;Obtionbox3;Obtionbox4;Obtionbox5, etc.
como ... referirme a ellos en un do while? ... pensaba algo como
dim i as integer
for i = 1 to 10
optionbox&i = true
next i
... que se vuelvan todos true. no es ... el codigo que quiero usar, sino la idea de como referirme a los objetos.
Marco Escobar escribio en el mensaje ...
Sheet1.Shapes(i)
Donde i es el indice del control dentro de la hoja "Sheet1"
Puedes referirte al nombre del control a través de Sheet1.Shapes(i).Name.
Existe una coleccion amplia de propiedades asociadas a Sheet1.Shapes(i)
como menciona Marco, 'casi' todo objeto 'pasa' por la coleccion 'shapes' [sin embargo] ...
NO todos 'comparten' LAS MISMAS propiedades y metodos :(( [p.e.]
a) no se si por 'optionbox' te refieres a 'optionbuttons' o 'checkboxes'
b) son 'diferentes' las propiedades de 'esos' objetos [cualquiera] segun su 'tipo'
[si los creaste con la barra de herramientas 'formularios' o 'cuadro de controles']
c) los de formularios pasan por un 'shape.type' => msoFormControl <=
y su propiedad =>shape.ControlFormat[.value 'por omision']<= es 1 -si activado- o 0 ['cero' o -4146] si no
d) los de cuadro de controles pasan por un 'shape.type' => msoOLEControlObject <= [y -algunos- otros 'filtros']
y su propiedad =>Hoja.OLEObjects(shape).Object[.value 'por omision']<= es 'True' -si activado- o 'False' si no
e) [creo que] seria mejor 'descartar' los objetos de tipos 'diferentes' [al 'recorrer' la coleccion] para 'minimizar' errores :))
el siguiente ejemplo dejara 'activados' [todos] los objetos [de 'esos' tipos] en la hoja activa
[si alguno 'comparte' la 'celda vinculada' -o un 'grupo' si el caso-, el ultimo [en su serie] sera el 'agraciado'] :))
__________
Sub Marcar_Opciones()
Application.ScreenUpdating = False
Dim Fig As Shape
For Each Fig In ActiveSheet.Shapes
If Fig.Type = msoFormControl Then
Select Case Fig.FormControlType
Case xlCheckBox, xlOptionButton: Fig.ControlFormat = 1
End Select
ElseIf Fig.Type = msoOLEControlObject Then
Select Case Fig.OLEFormat.ProgId
Case "Forms.CheckBox.1", "Forms.OptionButton.1": Fig.Parent.OLEObjects(Fig.Name).Object = True
End Select
End If
Next
End Sub
šššššššššššššššššššš
saludos,
Héctor.