Excel - Referenciar un control desde una variable

 
Vista:

Referenciar un control desde una variable

Publicado por Ricardo  (2 intervenciones) el 16/01/2008 17:18:14
Hola, buenas tardes;

Tengo un problema con el Excel que me está trayendo de cabeza, a ver si alguien me sabe echar una mano...

Estoy creando una encuesta en una hoja Excel, cada pregunta tiene 3 posibles respuestas que se marcan chequeando o deschequeando su correspondiente checkbox. Después estoy intentando crear una macro que recopile los resultados en el formato que yo quiero en una pestaña oculta dentro de la misma hoja.

Los nombres de los checkbox siguen un patrón:

chkPregunta01_01
chkPregunta01_02
chkPregunta01_03
chkPregunta02_01
chkPregunta02_02
chkPregunta02_03
...

Intentaba que la macro sea reutilizable, no me gustaría tener que acabar haciendo una lista de ifs que evalúen los checks uno por uno, ya que en el futuro necesitaré hacer más encuestas y todo lo que sea reutilizable mejor...

Mi intención es construir el nombre dinámicamente, concatenando constantes y variables para luego preguntar en un If si su valor es verdadero o no, y de esta manera automatizar bastante el proceso.

Intento algo tal que así:

'Construyo el nombre y lo almaceno en la variable
strNombreCheck = "chkPregunta" & intNumPregunta & "_" & intNumRespuesta

'Y, después, intento evaluar la propiedad su Value
If strNombreCheck.Value = "Verdadero" Then

El problema que tengo es que claro, strNombreCheck es una variable de tipo cadena y me la reconoce como tal... e intentado desde poner paréntesis (strNombreCheck).Value, a que esa variable sea de tipo Object; incluso de tipo Checkbox, pero no hay manera.

También e intentado usar un bucle For Each, pero e seguido sin conseguir nada:

For Each objNombreCheck In Worksheets("Hoja4")

Este caso lo he probado declarando objNombreCheck como Object, como Control e incluso como Checkbox, pero nada...

Y, el caso es que yo creo que esto en Visual Basic puro y duro sí que se puede hacer, no??

Agradecería cualquier ayuda, que me estoy volviendo loco con esto ya...

Gracias por anticipado y un saludo, Ricardo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Referenciar un control desde una variable

Publicado por JuanC (792 intervenciones) el 16/01/2008 19:40:44
en principio lo que querés hacer no se puede, creo que la única opción es
trabajar con un Array, Matriz o Colección de objetos y hacer un ciclo para ver
el estado de cada uno

veamos si algo de esto sirve... (los 2 códigos hacen lo mismo)


Option Explicit
Option Base 1

'//By JuanC - Ene. 2008

Sub test()
Dim chb As Object
Dim a() As Variant
Dim i&
For Each chb In Sheets(1).OLEObjects
i = i + 1
ReDim Preserve a(i) As Variant
a(i) = chb.Name
Next
For i = 1 To UBound(a)
MsgBox a(i)
Next
Set chb = Nothing
If IsArray(a) Then Erase a
End Sub

Sub test2()
Dim v As Variant
Dim chb As Object
Set v = Sheets(1).OLEObjects
For Each chb In v
MsgBox chb.Name
Next
Set v = Nothing
End Sub

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Referenciar un control desde una variable

Publicado por JuanC (792 intervenciones) el 16/01/2008 19:57:37
otra ayudita...

Sub Tildar_todos_los_CheckBox()
Dim vObjects As Variant
Dim Obj As Object
Dim chbCheck As MSForms.CheckBox
'//Toma todos los objetos
Set vObjects = Sheets(1).OLEObjects
On Error Resume Next
'//Recorre todos los objetos
For Each Obj In vObjects
Err.Clear
'//Intenta asignar objeto CheckBox
Set chbCheck = Obj.Object
If Err.Number = 0 Then
'//Si el objeto es un CheckBox lo 'tilda'
chbCheck.Value = True
End If
Next
Set vObjects = Nothing
Set Obj = Nothing
Set chbCheck = Nothing
End Sub

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Referenciar un control desde una variable

Publicado por Ricardo (2 intervenciones) el 17/01/2008 09:48:44
Juan, eres un maestro!!

Muchísimas gracias por tu ayuda, el código que me has pasado funciona a la perfección!!

En mi próximo viaje a Buenos Aires te invito a una cerveza!! :P

Gracias de nuevo, te mando un abrazo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Referenciar un control desde una variable

Publicado por JuanC (792 intervenciones) el 17/01/2008 14:18:26
de nada; cuando quieras, avisame que la cerveza no va a faltar!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Referenciar un control desde una variable

Publicado por Pilar Loiti (3 intervenciones) el 28/01/2008 23:35:03
Hola JuanC

Estoy buscando algo parecido a la repuesta que le indicas a Ricardo, tengo varios checkbox en un formulario y quisiera ver su estado para realizar alguna acción, he tratado de aprovechar tu código pero me aparece un error al ejecutar desde el formulario, Set v = Sheets(1).OLEObjects , cambio la línea por Set v = UserForm1.OLEObjects pero sale el mensaje "No se encontro el metodo o el dato miembro"...¿podrías ayudarme ?, no se como hacer que funcione en un formulario.

saludos y gracias

Pili
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Referenciar un control desde una variable

Publicado por Ricardo (1 intervención) el 29/01/2008 09:34:37
Buenos días,

Te comento lo que yo hice por si sirve de algo, en lygar de poner el íncide de la pestaña en la que se encuentran los controles; prueba a poner el nombre completo entre comillas; algo así:

Sheets("NombreSheet").OLEObjects

A mi me funcionó :P espero que a tí también.

Un saludo, Ricardo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Referenciar un control desde una variable

Publicado por JuanC (792 intervenciones) el 29/01/2008 21:48:43
Sheets(1).OLEObjects hace referencia a los objetos que están en la hoja, no en un formulario
para eso usa
Dim Obj As MSForms.Control
For Each Obj In UserForm1.Controls
Next

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar