sábado, julio 21, 2007

Agrupar controles botones de opción en hojas Excel.

En la entrada sobre Agregando controles en hojas de cálculo mostré como agregar controles, tal como botones de opción o barras de desplazamiento, en una hoja de Excel.

Últimamente he recibido varias consultas sobre como crear grupos de botones de opción.
Cuando agregamos varios botones de opción en una hoja, Excel acepta una sola celda vinculada para todos los controles. Es decir, Excel agrupa todos los botones de opción en un solo grupo, no importa dónde o como los ubiquemos. Inclusive si definimos para cada botón una celda vinculada distinta, veremos que en todos los controles aparece como celda vinculada la última que hemos definido.

La técnica para superar este inconveniente depende de qué tipo de control estemos usando. Excel permite agregar dos tipos de controles directamente en la hoja: los controles de la barra de Formularios y los del cuadro de controles (controles ActiveX).




Supongamos que queremos crear un formulario para definir nuevos clientes. En este formulario definimos el nombre del cliente, el tipo (mayorista o minorista) y el tipo de crédito (15, 30 o 45 días). Nuestro formulario se verá así


Si usamos los controles de la barra de formularios, el truco consiste en poner cada uno de los grupos de botones de opción dentro de controles "cuadro de grupo" distintos. Para crear el formulario seguimos estos pasos:

1 – Ponemos un fondo gris al rango B2:F20
2 – Seleccionamos la celda C4 y ponemos "Nombre"
3 – Combinamos y centramos el rango D4:E4, y le quitamos el fondo gris
4 – Abrimos la barra de formularios y arrastramos dos cuadros de grupo



5 - Dentro de uno de los cuadro de grupo ponemos los botones de tipo de cliente. En el otro ponemos los botones de tipo de crédito. Cambiamos los encabezamientos directamente en el control.
6 – Los botones de tipo de cliente están ligados a la celda H3; los de tipo de crédito a la celda H4.
7 – Agregamos un control "botón" que nos servirá para activar una macro que agregue el nuevo cliente a nuestra base de datos (la hoja "Clientes")

En la celda I3 ponemos la fórmula =ELEGIR(H3;"Mayorista";"Minorista"); en la celda I4 la fórmula =ELEGIR(H4;"15 días";"30 días";"45 días")

Si usamos los controles ActiveX de la barra Cuadro de Controles, el truco consiste en cambiar la definición del Groupname en la propiedades del botón y darle a los botones del grupo el mismo Groupname.



En nuestro ejemplo los botones de tipo de cliente tienen como Groupname "Tipo" y los del tipo de crédito "Crédito".
Otro punto importante es que a cada control le definimos una celda vinculada distinta, a diferencia de los controles de la barra de formularios.

Sobre cómo definir los distintos controles, pueden consultar mi nota mencionada al principio.

En general es más fácil trabajar con los controles de la barra de formularios que con los controles ActiveX de la barra de cuadro de controles. La contrapartida es que los controles ActiveX tienen más posibilidades y son más flexibles a nuestras necesidades.

La hoja con los ejemplos y las macros se pueden descargar aquí.

26 comentarios:

  1. Pablo,

    no estoy publicando tu comentario ya que no está relacionado con el contenido de la nota.
    Ponte en contacto conmigo por mail (jorgedun@gmail.com)

    ResponderBorrar
  2. Hola, felicidades por su blog, hace tiempo que soy asiduo lector y he usado muchas de las soluciones que muestra.

    Tengo una pregunta sobre un tema que toco en el pasado referente a la funcion buscarv, al hacer la busqueda en varias paginas como hago para que busque en mas de un archivo?, es o no posible.

    Mil gracias por cualquier sugerencia acerca del asunto.

    Atte:

    Carlos Rangel

    ResponderBorrar
  3. Estimado Sr.Desde hace tiempo Utilizo su valioso Blog en temas de trabajo, por ello le doy las gracias. con respecto a los controles de la barra de formularios los he aplicado en una utlidad muu sencilla al evaluar propuesta de ofertas en una licitacion, solo para dar una mejor presentacion, ¿como se puede desmarcar mediante alguna macro tanto las casillas de verificacion como los botones de opcion una vez ingresados los datos, para volver a ingresa unos nuevos?...no se si me explique bien..
    Atte.,
    Mauricio Barrientos P.
    Punta Arenas
    Chile

    ResponderBorrar
  4. Efectivamente, con una macro. Por ejemplo, en el caso de una casilla de verificación la macro tendría que poner el valor False a la propiedad Value para que la casilla no esté marcada.

    ResponderBorrar
  5. Carlos

    es posible y creo haber visto una nota sobre el tema en algun sitio sobre Excel.
    De todas maneras hay que preguntarse si en una situación como esa, no es más conveniente organizar los datos de otra manera o usar un database verdadero.

    ResponderBorrar
  6. Quisiera saber si es posible enumerar a partir de la celda A2 los datos que se generan mediante el formulario, o dejar libre ésta columna y comenzar a partir de la celda B2 la BD. Muchas gracias por la ayuda.

    El blog es muy bueno, felicidades!!

    Raúl Espinosa

    ResponderBorrar
  7. Hola Raúl

    se puede. Hay una macro que maneja la introducción de los datos. La puedes ver abriendo el editor de Vba (Herramientas--Macro--Editor Vba). All+i puedes cambiar los parámetros que gobiernan la ubicación de los datos.

    ResponderBorrar
  8. Hola Jorge,

    Es posible hacer los cuadros de grupo invisibles? He procedido como en el ejemplo y todo ha resultado correcto, pero desearía que la línea negra de los cuadros de grupo no fuera visible. Se puede hacer?

    Muchisimas gracias y felicidades por esta maravilla de blog!

    Albert

    ResponderBorrar
  9. Hola Albert
    se puede hacer pero usando otro control. En lugar de cuadro de grupo, tienes que usar Frame. Lo encuentras en la barra de ActiveX pulsando el icono de More Controls.
    Una vez que pongas el control y los botones (con la tecnica de GroupName indicada en la nota), puedes cambiar las propiedades de Frame volviéndolo transparante (propiedad BackStyle = Transparent).

    ResponderBorrar
  10. FELICITACIONES POR SU APORTE ME HA SERVIDO DE GRAN UTILIDAD GRACIAS POR COMPARTIR TUS CONOCIMIENTOS
    SALUDOS

    ResponderBorrar
  11. PAURAU1000
    PUEDES SER MAS CLARO EN LA CREACION DE LA MACRO PARA INGRESAR A LOS CLIENTES

    ResponderBorrar
  12. Puedes descargar el archivo y ver la macro con el editor de VBa (Herramientas-Macro-Editor Vba)

    ResponderBorrar
  13. Jorge,

    estoy trabajando con checkboxes(del formulario), es posible que cuando selecciones uno de estos, otros se desactiven?...o todos funcionan en forma independiente. Lo que pasa es que los tengo linkeados a un grafico y necesito que al seleccionar un checkbox otros se desactiven para no alterar la informacion del mismo.

    Gracias,
    PD.-No estoy trabajando con macros.
    Julio

    ResponderBorrar
  14. Julio,

    la respuesta fue por mail (vi primero tu mail y después el comentario).

    ResponderBorrar
  15. Eureka estimadísimo Jorge "Yorch" eureka ('mua' 'mua' 'mua'), justo en esta publicación tuya he encontrado la respuesta a la duda que te planteaba respecto a los BOTONES DE OPCIÓN, solo fue cuestión de seguirte la pista (leerte hasta el final, parándose uno en puntos y comas), gracias por brindarnos esta prosa tuya tan detallada, tan suntuosa.
    Mahalo (quiero decir gracias) por alumbrar mi camino al 'saber'. No, aun no me voy sigo leyéndote.
    Normeishon =)

    ResponderBorrar
  16. Eureka estimadísimo Jorge "Yorch" eureka ('mua' 'mua' 'mua'), justo en esta publicación tuya he encontrado la respuesta a la duda que te planteaba respecto a los BOTONES DE OPCIÓN, solo fue cuestión de seguirte la pista (leerte hasta el final, así, parándose uno en puntos y comas), gracias por brindarnos esta prosa tuya tan detallada, tan suntuosa.

    Mahalo (quiero decir gracias) por alumbrar mi camino al 'saber'. No, aun no me voy sigo leyéndote.

    Normeishon =)

    ResponderBorrar
  17. Hola Jorge,

    Lo primero felicitarte por la ayuda que brindas a novatos como yo.

    He descubierto este tutorial, y es prácticamente lo que estaba buscando.

    Uso Excel 2003. Tengo que hacer un cuestionario. Y no tengo ni idea de programar.

    El cuestionario que he hecho es con botones de opciones. Preguntas en las que elegir de 1-2, 1-3, 1-4, 1-5 y 1-11.Y algunas en las que hay o se puede meter texto.

    He hecho dos versiones. Una con botones de opción de formulario (cuestionario1).
    Y otra con activex botones de opción (cuestionario1 (2)), y estos los he agrupado cada uno en propiedades a su pregunta con "GroupName".

    Hay algunas preguntas que al elegir una de las opciones, hay que insertar texto.
    Y otra en la que si se quiere se puede poner texto.

    Lo que quiero es que al finalizar el cuestionario, se le dé a un botón para guardarlo y los datos vayan a otra hoja (cuestionario1 datos), en la que se irán guardando por orden de registro.

    Vamos, hasta aquí es prácticamente lo mismo. La celda nombre yo no necesito, aunque supongo que me vale para sustituirla por las preguntas donde hay que meter texto.

    El texto (si se pone) de la pregunta 5, que vaya a la hoja (cuestionario1 sugerencias).

    No entiendo la diferencia entre la hoja formularios y cuadro de controles. Veo que hay dos macros. Pero ahí me pierdo.

    A ver si me puedes iluminar un poco.

    Gracias y saludos.

    ResponderBorrar
  18. ¿Has intentado usar los Formularios de Google Docs? Es la forma más práctica de crear cuestionarios con la ventaja que se pueden enviar por mail y Google Docs va almacenando los eaultados que puedes luego exportar a una hoja Excel.

    ResponderBorrar
  19. Hola Jorge,

    Gracias por el consejo de Google Docs, pero no me se adapta bien a lo que quiero hacer luego con los datos.
    Sin embargo tu ejemplo es perfecto para un cuestionario simple como el mío.

    Lo he modificado pero no me sale :(

    Entiendo que las hojas Formularios y Cuadro de Controles es lo mismo, no?

    No logro que los datos me aparezcan en la hoja "cuestionarios".

    Seguiré intentando. Un saludo.

    ResponderBorrar
  20. Hola,
    He estado mirando los formularios de Google Docs, pero no se adapta bien a lo que quiero hacer.
    Gracias.

    ResponderBorrar
  21. Buenos días, lo felicito por su blog.
    quisiera saber si me puede ayudar con una hoja de calculo de excel.
    hago una relación de reposición de caja chica y la imprimo cada vez
    que hago recuperación, pero me gustaría saber como hacer que se
    haga una copia y se archive automáticamente.
    por su atención, gracias.

    ResponderBorrar
  22. Gracias por los conceptos. Para consultas que no están relacionadas con el tema de la nota tienes que ponerte en contacto conmigo por mail privado (fijate en el enlace Ayuda, en la parte superior del blog).

    ResponderBorrar
  23. Hola Jorge espero hayas disfrutado de tus vacaciones en Argentina.... Te tengo una consulta, es posible en un formulario incrustar varios frames con varios options buttom en su contenido y hacer que aparezcan o desaparezcan mediante un código, es decir por ejemplo que según un primer frame con 6 botones de opciones me aparezca un frame asociado de 4 posibles y los otros no o viceversa. He estado tratando de hacerlo, me gustaría saber si es posible o no y si puedes mostrar un ejemplo sería de gran ayuda........ Deibis Castillo

    ResponderBorrar
  24. Olvide decirte que la consulta anterior es para un formulario en VBA con 6 frames de optons button, cada uno de 4 botones, dependientes del primer frame de 6 botones, es posible......? Entonces a medida que pulse un botón del primer frame sea visible uno de esos 6 frames y los otros no y así sucesivamente... Deibis Castillo

    ResponderBorrar
  25. Deibis,
    si, es posible. Los optionbuttons tienen la propiedad Visible lo que permite ocultarlos y mostrarlos programáticamente. Lo mismo el Frame.

    ResponderBorrar

Nota: sólo los miembros de este blog pueden publicar comentarios.