Discussion:
Referencia a objetos de vba
(demasiado antiguo para responder)
Juan B.
2003-11-18 18:28:16 UTC
Permalink
Hola, tengo la siguente duda:

tengo los siguientes objetos en una hoja:
Optionbox1;Obtionbox2;Obtionbox3;Obtionbox4;Obtionbox5,
etc.

como hago para referirme a ellos en un do while?

pensaba algo como
dim i as integer
for i = 1 to 10
optionbox&i = true
next i

de manera que se vuelvan todos true. no es este
especificamente el codigo que quiero usar, sino la idea de
como referirme a los objetos.
MUCHAS GRACIAS (anticipadas)

Juan
Marco Escobar
2003-11-19 21:03:26 UTC
Permalink
Juan,

Puedes referenciar los controles de la siguiente forma:

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 colección amplia de propiedades asociadas a Sheet1.Shapes(i)

Saludos,


Marco Escobar.
Post by Juan B.
Optionbox1;Obtionbox2;Obtionbox3;Obtionbox4;Obtionbox5,
etc.
como hago para referirme a ellos en un do while?
pensaba algo como
dim i as integer
for i = 1 to 10
optionbox&i = true
next i
de manera que se vuelvan todos true. no es este
especificamente el codigo que quiero usar, sino la idea de
como referirme a los objetos.
MUCHAS GRACIAS (anticipadas)
Juan
Héctor Miguel
2003-11-20 10:03:55 UTC
Permalink
¿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.

Continúe leyendo en narkive:
Loading...