Días atrás un lector planteaba la siguiente cuestión:
Bien, lo que falló en el intento del lector fue la forma en cómo construyó y aplicó la propiedad .Caption a/los Control/es... y sobre todo en la forma en que llamaba o nombraba los Botones de opción de su formulario.
Una manera correcta sería emplear la collection .Controls dentro del UserForm.
Veamos nuestros puntos de partida.
En primer lugar tenemos un rango de tres celdas (A1:A3) con tres valores (al que hemos asignado un Nombre definido:= 'lista_nombres'):
Por otro lado tenemos el siguiente formulario de usuario (al que he renombrado como 'formulario', y el que tiene dispuestos los siguientes controles:
1- Un cuadro o Frame que contiene los tres botones de opción (llamado 'Frame1').
2- Tres botones de opción (OptionButton) llamados 'opcion_1', 'opcion_2' y 'opcion_3'.
3- Un Botón de comando, llamado CommandButton1, destinado a ejecutar el proceso....
Para resolver nuestra cuestión en particular, insertamos el siguiente código dentro de la ventana de código del UserForm desde el editor de VB:
Listo...
Si ejecutamos el UserForm, y presionamos el botón de comando, veremos como los nombres de los botones toman los valores de cada celda de la hoja de cálculo...
Igualmente podríamos haber asociado la carga de datos a un evento _Initialize del formulario:
En un formulario tengo 3 controles del tipo opción dentro de un grupo de opciones y a cada uno de ellos quiero renombrarlo (con la propiedad .Caption) en función de lo que tenga en un rango de celdas en una hoja de Excel. He probado a poner en el código cuando se activa el formulario algo así: for c=1 to lista_nombres.count a="formulario.opcion_"&c&".Caption" a=lista_nombres.offset(c-1,0).value next c pero no me hace nada. es como si no reconociera bien el nombre de la propiedad. |
Bien, lo que falló en el intento del lector fue la forma en cómo construyó y aplicó la propiedad .Caption a/los Control/es... y sobre todo en la forma en que llamaba o nombraba los Botones de opción de su formulario.
Una manera correcta sería emplear la collection .Controls dentro del UserForm.
Veamos nuestros puntos de partida.
En primer lugar tenemos un rango de tres celdas (A1:A3) con tres valores (al que hemos asignado un Nombre definido:= 'lista_nombres'):
Por otro lado tenemos el siguiente formulario de usuario (al que he renombrado como 'formulario', y el que tiene dispuestos los siguientes controles:
1- Un cuadro o Frame que contiene los tres botones de opción (llamado 'Frame1').
2- Tres botones de opción (OptionButton) llamados 'opcion_1', 'opcion_2' y 'opcion_3'.
3- Un Botón de comando, llamado CommandButton1, destinado a ejecutar el proceso....
Para resolver nuestra cuestión en particular, insertamos el siguiente código dentro de la ventana de código del UserForm desde el editor de VB:
Private Sub CommandButton1_Click() 'recorremos las celdas de nuestro rango For c = 1 To Range("lista_nombres").Count 'creamos/componemos los nombres de los botones de opción... a = "opcion_" & c 'los llamamos mediante el uso de la collection .Controls Me.Controls(a).Caption = Range("lista_nombres").Item(c).Value Next c End Sub
Listo...
Si ejecutamos el UserForm, y presionamos el botón de comando, veremos como los nombres de los botones toman los valores de cada celda de la hoja de cálculo...
Igualmente podríamos haber asociado la carga de datos a un evento _Initialize del formulario:
Private Sub UserForm_Initialize() For c = 1 To Range("lista_nombres").Count a = "opcion_" & c Me.Controls(a).Caption = Range("lista_nombres").Item(c).Value Next c End Sub
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.