Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Preguntar por un control creado dinamicamente?

Estas en el tema de Preguntar por un control creado dinamicamente? en el foro de Visual Basic clásico en Foros del Web. Buenas tardes a todos; Esta tarde les vengo a consultar sobre un problema que afana y me carcome, Bueno le comento, estoy haciendo un pequeño ...
  #1 (permalink)  
Antiguo 07/11/2012, 13:42
 
Fecha de Ingreso: mayo-2011
Mensajes: 47
Antigüedad: 13 años, 5 meses
Puntos: 1
Pregunta Preguntar por un control creado dinamicamente?

Buenas tardes a todos;

Esta tarde les vengo a consultar sobre un problema que afana y me carcome,

Bueno le comento, estoy haciendo un pequeño aplicativo con VBA en donde hago una consulta dependiendo de la cantidad de resultados, genero dinamicamente unos CheckBox, para consultarlos en otro evento de la siguiente manera:

Cita:
sql = "SELECT nombre, apellidos, cargo, nivel FROM personal_base WHERE cargo = 'Electronical Tech' AND base = '" & base_programacion & " ' ORDER BY sap_number;"
rs.Open sql, cn

electronicos_disponibles = rs.RecordCount

conta = 1
bajar = 0

'si la consulta no genera resultados
If rs.EOF Then

'Si la consulta genera resultados
Else

Do While Not rs.EOF

'Se genera dinamicamente los checkbox-------------------------------
Set Cheq = UserFormProgramador.FrameElecTech.Controls.Add("Fo rms.CheckBox.1")
With Cheq
.Name = "CheckBoxElecTech0" & conta

If (rs("cargo") = "Electronical Tech" And rs("nivel") = 1) Then
.Caption = rs("nombre") & " " & rs("apellidos") & " - Lv 1"
End If

If (rs("cargo") = "Electronical Tech" And rs("nivel") = 2) Then
.Caption = rs("nombre") & " " & rs("apellidos") & " - Lv 2"
End If

.Value = True
.Width = 300
.Top = 10 + bajar
.AutoSize = True
End With

'ubica los controles en el formulario
conta = conta + 1
bajar = bajar + 22

'recorre el vector resultado
rs.MoveNext
Loop

'cierra el vector
rs.Close
End If
Hasta ahi todo bien el problema radica cuando en otra funcion pregunto por el "CheckBoxElecTech01", "CheckBoxElecTech02"... etc;

Cita:
Public Sub CommandButtonListo_Click()

electronicos_seleccionados = 0

If (UserFormProgramador.CheckBoxElecTech01.Value = True) Then
electronicos_seleccionados = electronicos_seleccionados + 1
End If

UserFormProgramador.LabelElectronicosSeleccionados .Caption = electronicos_seleccionados

End Sub
Ya que me muestra un error que dice "Error de Compilacion. No se encontro el metodo o el dato del miembro" y me ubica en el evento y mas concretamente donde se utiliza la propiedad .Value del control generado dinamicamente.

Espero haberme hecho entender, les agradezco cualquier ayuda.
  #2 (permalink)  
Antiguo 10/01/2013, 14:44
 
Fecha de Ingreso: octubre-2008
Mensajes: 127
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Preguntar por un control creado dinamicamente?

Hola,

la verdad es que yo, para crear controles dinámicamente, nunca he utilizado el nombre del componente... Siempre utilizo el mismo nombre y "juego" con el índice. De ese modo siempre conoces el número de controles que tienes y, en caso de generarse un evento, te llega el índice del control que lo ha provocado...

No sé si te puede servir como sugerencia...

Saludos.
  #3 (permalink)  
Antiguo 11/01/2013, 06:44
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: Preguntar por un control creado dinamicamente?

Hola, si no recuerdo mal, el problema es que en VBA no puede utilizarse la propiedad Index para generar controles dinamicamente.

Deberías indagar sobre el uso de For Each para recorrer los objetos del formulario y comprobar la propiedad Name para saber que es el que deseas.
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...

Etiquetas: controles, dinamicos, vba
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:41.