Controles de formulario en Excel Por Moisés Ortíz el 19 diciembre, 2011 Los controles de formulario en Excel son objetos que podemos colocar dentro de una hoja y que nos darán funcionalidad adicional para interactuar mejor con los usuarios y tener un mejor control sobre la información. Podemos utilizar estos controles para ayudar a los usuarios a seleccionar elementos de una lista predefinida o permitir que el usuario inicie una macro con tan solo pulsar un botón. Los controles de formulario en Excel se encuentran dentro de la fichaProgramador dentro del grupo Controles. Solamente pulsa el botón Insertar y observarás cada uno de ellos: Justo por debajo de los controles de formulario podrás observar el grupo de controles ActiveX pero sus diferencias y similitudes las discutiremos en otro artículo. Por ahora nos enfocaremos solamente en los controles de formulario. ¿Cómo insertar un control de formulario en Excel? Para insertar cualquiera de los controles de formulario debes seleccionarlo del menú desplegable y hacer clic sobre la hoja de Excel arrastrando el borde para “dibujar” el contorno del control. Observa este procedimiento. Los diferentes controles de formulario Existen diferentes tipos de controles de formulario en Excel que ofrecen diversos tipos de funcionalidad e interacción con el usuario. Desde una simple etiqueta hasta controles que permiten una selección múltiple de sus opciones. A continuación una breve descripción de cada uno de ellos. Barra de desplazamiento. Al hacer clic en las flechas se va desplazando la barra dentro de un intervalo predefinido. Botón. El botón nos permite ejecutar una macro al momento de hacer clic sobre él. Botón de opción. Nos permite una única selección dentro de un conjunto de opciones. Casilla de verificación. Permite la selección o no selección de una opción. Control de número. Nos ayuda a aumentar o disminuir un valor numérico. Cuadro combinado. Es una combinación de un cuadro de texto con un cuadro de lista. Cuadro de grupo. Agrupa varios controles dentro de un rectángulo. Cuadro de lista. Muestra una lista de valores de los cuales podemos elegir una sola opción o múltiples opciones de acuerdo a la configuración del control. Etiqueta. Permite especificar un texto o breves instrucciones en el formulario. Controles de formulario no disponibles en Excel 2010 Los controles de formulario han estado presentes por varias versiones de Excel, sin embargo existen algunos controles que ya no pueden ser utilizados en Excel 2010 como lo son el Campo de texto, el Cuadro combinado de lista y el Cuadro combinado desplegable. Sin embargo podemos alcanzar funcionalidad similar utilizando controles ActiveX. Formularios en Excel Por Moisés Ortíz el 16 diciembre, 2011 Los formularios en Excel son un método para ingresar datos a nuestras hojas y son de mucha utilidad porque nos ayudan a evitar errores en la captura de información. Podemos comparar los formularios de Excel con los formularios impresos en papel. ¿Qué es un formulario en Excel? Seguramente has llenado un formulario en papel, tal vez cuando has acudido a alguna oficina de gobierno para realizar un trámite, así que sabes de lo que estoy hablando. Estos formularios contienen instrucciones precisas de lo que debes escribir y contienen los recuadros necesarios para que introduzcas la información. Los formularios en Excel no son tan diferentes de los impresos ya que de igual manera proveen de los espacios necesarios para ingresar los datos. Los formularios en Excel utilizan objetos especiales conocidos como controles de formulario que son precisamente los que nos permiten agregar campos de texto, listas, botones de opción entre otras cosas más. Tipos de formularios en Excel Podemos crear tres tipos diferentes de formularios en Excel. Formulario de datos Hojas de cálculo con controles de formulario o controles ActiveX Formularios de usuario de VBA A continuación describiré brevemente cada uno de ellos. Formularios de datos A través de un formulario de datos podemos mostrar al usuario una sola fila de nuestra tabla de datos. En este formulario se puede realizar la edición de la información e inclusive crear un nuevo registro para la tabla. Excel puede generar automáticamente un formulario de datos para nuestras tabla. Para consultar más detalle sobre este tema consulta el artículo: Agregar filas a una tabla de Excel. Un detalle importante que debes saber sobre los formularios de datos es que si una celda contiene una fórmula no podrás modificar dicha fórmula mediante el formulario sino que solamente se mostrará el resultado del cálculo sin poder editarlo. Hoja de cálculo con controles Ya que las celdas de una hoja de Excel nos sirven para introducir información, podemos pensar en una hoja como un gran formulario. De esta manera, si agregamos controles de formulario a nuestra hoja podremos crear formularios de entrada de datos muy útiles. Por ejemplo, podemos agregar a nuestra hoja un control de cuadro de lista para facilitar la selección de los elementos. De igual manera podemos agregar botones, cuadros combinados, casillas de verificación y otros controles más que nos ayudarán a crear formularios avanzados. Formularios de usuario VBA Los formularios de usuario, también conocidos como UserForm, son cuadros de diálogo que hacen uso de controles ActiveX y que nos permiten solicitar información al usuario. Estos formularios son creados desde el Editor de Visual Basic y administrados desde código VBA. Una vez que se ha creado el formulario de usuario podemos arrastrar y soltar los controles Active X que se mostrarán en elCuadro de herramientas: Los diferentes tipos de formularios en Excel nos evitarán dolores de cabeza ya que podremos tener cierto grado de control sobre el ingreso de datos que otras personas realizan sobre nuestras hojas de Excel. Controles ActiveX en Excel Por Moisés Ortíz el 30 diciembre, 2011 Los controles ActiveX son un tipo de controles que nos permiten agregar funcionalidad de formularios a nuestros libros de Excel. Existe otro tipo de controles que es conocido como Controles de formulario y que tienen una funcionalidad similar, sin embargo existen algunas diferencias entre ambos tipos. Controles ActiveX y controles de formulario Los controles de formulario fueron introducidos desde la versión 4 de Excel y por lo tanto han estado presentes en la aplicación por más tiempo que los controles ActiveX los cuales comenzaron a ser utilizados a partir de Excel 97. Ya que los controles ActiveX fueron introducidos posteriormente ofrecen más posibilidades de configuración y formato que los controles de formulario. Ambos tipos de controles se encuentran en la ficha Programador. La diferencia más significativa entre ambos es la manera en como podemos obtener información de los controles al momento de interactuar con el usuario. Los controles de formulario solamente responderán después de que el usuario ha interactuado con ellos, como después de haber pulsado el botón. Por el contrario, los controles ActiveX responden de manera continua a las acciones del usuario lo cual nos permite realizar acciones como cambiar el tipo de puntero del mouse que se muestra al colocar el puntero del ratón sobre el botón. Propiedades de los controles ActiveX A diferencia de los controles de formulario, los controles ActiveX tienen una serie de propiedades que podemos configurar pulsando el botón Propiedades que se encuentra dentro del grupo Controles de la ficha Programador. Antes de poder ver las propiedades de un control ActiveX debemos pulsar el botón Modo Diseño el cual nos permitirá seleccionar el control y posteriormente ver sus propiedades. Cada tipo de control ActiveX mostrará una ventana de Propiedades con sus propias características. A continuación un ejemplo de la ventana Propiedades para un botón de comando ActiveX: Controles ActiveX con subrutinas VBA Otra diferencia entre los controles de formulario y los controles ActiveX es que los primeros pueden tener asignada una macro y al hacer clic sobre el control de formulario se iniciará la ejecución de dicha macro. Los controles ActiveX no tienen asignada una macro explícitamente sino que podemos asignar código VBA para cada evento del control. Un evento de un control ActiveX puede ser el evento de hacer clic sobre el control, el evento de hacer doble clic, el evento de obtener el foco sobre el control ActiveX, entre otros eventos más. Para asignar código a uno de los eventos de un control ActiveX solamente debemos hacer clic derecho sobre él y seleccionar la opción Ver código. Esto mostrará el Editor de Visual Basic con una subrutina para el evento Click() donde podremos escribir nuestro código. En la lista desplegable de la derecha podemos observar la lista de eventos disponibles para nuestro control ActiveX y para los cuales podemos escribir código VBA. Al seleccionar cualquiera de dichos eventos se insertará una nueva subrutina que podremos utilizar. Son precisamente la gran cantidad de eventos disponibles para los controles ActiveX lo que los hace controles muy poderosos que podemos utilizar en nuestros formularios. Otra ventaja de los controles ActiveX En la versión de Excel 2010 algunos controles de formulario han dejado de ser soportados y no podemos utilizarlos más. Ese es el caso del control de formulario conocido como campo de texto. Sin embargo, dentro de la lista de controles ActiveX tenemos disponibles un control llamado Cuadro de texto lo cual puede hacer atractiva la opción de utilizar controles ActiveX en lugar de controles de formulario. Cuadro de texto en Excel Por Moisés Ortíz el 31 julio, 2012 El cuadro de texto es un control ActiveX que muestra un campo vacío donde el usuario puede introducir cualquier texto. En esta ocasión revisaremos cómo incrustar un cuadro de texto y hacer referencia al mismo desde código VBA. Insertar un cuadro de texto en Excel Para insertar un cuadro de texto en una hoja de Excel debes ir a la ficha Programador y hacer clic en el botón Insertar y entonces hacer clic sobre la opción Cuadro de texto de la sección Controles ActiveX. El puntero del ratón se convertirá en una cruz la cual nos permitirá dibujar el cuadro de texto sobre la hoja de Excel. Una vez dibujado el cuadro de texto podrás hacer clic derecho sobre él y seleccionar la opción Propiedades para conocer el nombre que la ha sido asignado. También puedes ver las propiedades de cualquier control seleccionándolo primero y pulsando el botón Propiedades que se encuentra dentro del grupo Controles de la ficha Programador. Modificar valor del cuadro de texto Si deseas colocar un texto dentro del cuadro de texto desde VBA puedes utilizar una instrucción como la siguiente: TextBox1.Text = "Texto inicial" Esto hará que el cuadro de texto se vea de la siguiente manera: Leer valor del cuadro de texto Si quieres leer el valor del cuadro de texto y colocarlo en una celda podemos utilizar la siguiente instrucción: Range("A1").Value = TextBox1.Text El valor de la celda será el mismo que el del cuadro de texto. Si deseas limpiar el cuadro de texto puedes utilizar la siguiente instrucción: TextBox1.Text = "" Cuadro de lista en VBA Por Moisés Ortíz el 2 agosto, 2012 El cuadro de lista es un control ActiveX que nos permite desplegar una serie de opciones de las cuales el usuario puede realizar una selección. Podemos configurar el cuadro de lista para permitir seleccionar uno o varios elementos de la lista. Dibujar un cuadro de lista Para insertar un cuadro de lista en una hoja de Excel debemos ir a la ficha Programador y pulsar el botón Insertar para seleccionar la opción Cuadro de lista (control ActiveX). Especificar los elementos del cuadro de lista Una alternativa para indicar los elementos de un cuadro de lista es a través de la propiedad llamada ListFillRange. Para ello debemos abrir las propiedades del control e indicar el rango de celdas que contiene los elementos: En este ejemplo he especificado que los valores sean tomados del rango A1:A6, lo cual da como resultado un cuadro de listacon los valores especificados en dicho rango: Elementos del cuadro de lista por código Otra alternativa para indicar los elementos de un cuadro de lista es a través de código VBA. Para ello puedes incluir el siguiente código en el evento Workbook_Open: De esta manera cuando se abra el libro se agregarán las opciones al cuadro de lista llamado ListBox1. Asociar una celda al cuadro de lista Adicionalmente podemos asociar una celda al cuadro de lista la cual mostrará la selección que hagamos. Para hacer esta asociación debemos especificar la dirección de la celda en la propiedad LinkedCell: De esta manera, cada vez que hagamos una selección de alguna de las opciones del cuadro de lista se verá reflejado su valor en la celda asociada: Cuadro combinado en VBA Por Moisés Ortíz el 6 agosto, 2012 Excel tiene un control ActiveX conocido como Cuadro combinado el cual también es llamado comúnmente por su nombre en inglés: Combo Box. Este control nos permite crear listas desplegables en nuestros formularios. Para insertar un Cuadro combinado debemos ir a la ficha Programador y dentro del botón Insertar pulsar el comando Cuadro combinado (control ActiveX): Después de dibujar el Cuadro combinado tendrás un resultado como el siguiente: Agregar elementos al cuadro combinado Si quiero que el Cuadro combinado muestre los valores del rango A1:A5, puedo utilizar la propiedad ListFillRange donde puedo indicar este rango: Como resultado obtendré los valores de las celdas como elementos del Cuadro combinado: Diferencia con el cuadro de lista Una diferencia importante entre el Cuadro combinado y el cuadro de lista es que el primero permite que el usuario capture una opción diferente a las mostradas en la lista. En el ejemplo anterior no aparecía el día domingo como parte de los elementos, sin embargo puedo capturar el día domingo dentro del cuadro de lista. Si quieres evitar que el usuario introduzca sus propios valores existen dos opciones: Utilizar el control ActiveX Cuadro de lista en lugar del Cuadro combinado Utilizar el Cuadro combinado pero validar la opción seleccionada con código VBA de manera que nos aseguremos que el usuario ha seleccionado una opción de la lista. Un ejemplo de código de validación es el siguiente: Asociar una celda al cuadro combinado Al igual que con otros controles ActiveX, podemos asocias una celda al cuadro combinado de manera que muestre el elemento de la lista que haya sido seleccionado. Esta configuración la hacemos en la propiedad LinkedCell: Cuando selecciones un elemento del cuadro combinado se reflejará dicha selección en la celda indicada en la propiedadLinkedCell: Casilla de verificación en VBA Por Moisés Ortíz el 8 agosto, 2012 Una casilla de verificación es un control ActiveX que podemos utilizar para permitir que un usuario marque una opción y por lo tanto poder conocer sus preferencias al verificar dicho valor en código VBA. El control ActiveX casilla de verificación Para insertar este control debemos ir al comando Insertar y seleccionar la opción Casilla de verificación (Control ActiveX). Después de dibujar este control tendrás el siguiente resultado: Propiedades de una casilla de verificación La primera propiedad que desearas modificar de una casilla de verificación será su propiedad Caption que es la que almacena el texto desplegado dentro del control ActiveX. Por ejemplo, si deseo que el control muestre el texto “Mayor de edad” debo hacer el cambio de la siguiente manera: La otra propiedad de una casilla de verificación que tal vez quieras modificar será la propiedad Value que de manera predeterminada tendrá el valor False lo cual indica que el control se mostrará desmarcado. Si deseas que el control se muestre marcado de manera predeterminada, debes poner el valor True en la propiedad Value: Valor de una casilla de verificación Una casilla de verificación nos dirá su ha sido seleccionada o no, es decir, nos devolverá un valor FALSO o VERDADERO. Para leer este valor debemos acceder a la propiedad Value del control de la siguiente manera: Private Sub CheckBox1_Click() Range("C4").Value = CheckBox1.Value End Sub Esta línea de código coloca el valor de la casilla de verificación en la celda C4. De esta manera, al seleccionar la casilla de verificación obtendré el siguiente resultado: Para validar en VBA si la casilla de verificación tiene un valor u otro podemos utilizar un código como el siguiente: If CheckBox1.Value = True Then Range("C4").Value = 1 If CheckBox1.Value = False Then Range("C4").Value = 0 La primera línea valida si el control ActiveX tiene un valor verdadero y de ser así coloca el número 1 en la celda C4. Si la casilla de verificación no ha sido seleccionada (falso) entonces colocará el número cero en la celda C4. Botón de opción en VBA Por Moisés Ortíz el 10 agosto, 2012 Un botón de opción es un control ActiveX que nos permitirá seleccionar una sola opción dentro de un grupo de botones de opción. A diferencia de las casillas de verificación, los botones de opción dependen uno del otro. El botón de opción en Excel Para insertar un botón de opción hacemos clic en el comando Insertar de la ficha Programador. Un solo botón de opción no hace mucho sentido, así que siempre agregamos dos o más botones de opción para permitir que usuario haga una selección de cualquiera de ellos. Una vez que se ha agregado un segundo botón de opción podrás notar que al seleccionar uno de ellos se desmarcarán todos los demás. La propiedad Caption De manera predeterminada Excel colocará el botón de opción con un nombre como OptionButton1. Para cambiar este texto debemos editar la propiedad Caption del botón de opción. El botón de opción en VBA Para saber si un botón de opción ha sido seleccionado podemos acceder a su propiedad Value de la siguiente manera: Private Sub OptionButton1_Click() If OptionButton1.Value = True Then MsgBox ("Has seleccionado la opción Hombre") End Sub La propiedad Value es la que nos indica si el control está seleccionado, en cuyo caso, la propiedad será igual a True. Para este ejemplo, al validar que el botón de opción está seleccionado, se mostrará un cuadro de diálogo con un mensaje sobre la opción seleccionada. Formularios en VBA Por Moisés Ortíz el 14 agosto, 2012 Los formularios en VBA no son más que un cuadro de diálogo de Excel donde podremos colocar controles que nos ayudarán a solicitar información del usuario. Podremos colocar cajas de texto, etiquetas, cuadros combinados, botones de comando, etc. Crear un formulario en Excel Los formularios de Excel son creados desde el Editor de Visual Basic donde debemos seleccionar la opción de menú Insertar y posteriormente la opción UserForm. Inmediatamente se mostrar un formulario en blanco y de igual manera podrás observar el Cuadro de herramientas: Si no ves el Cuadro de herramientas puedes seleccionar el menú Ver y la opción Cuadro de herramientas. Agregar controles al formulario Para agregar un control al formulario debes seleccionarlo del Cuadro de herramientas y dibujarlo sobre el formulario. En mi formulario he agregado etiquetas y cuadros de texto así como un par de botones de comando: El texto de las etiquetas se modifica en la propiedad llamada Caption. Para realizar este cambio solamente selecciona el control y se mostrará la ventana de Propiedades donde podrás hacer la modificación. De igual manera el texto desplegado en los botones de comando se modifica en su propiedad Caption. Código para el botón Cancelar El botón cancelar cerrará el formulario sin guardar la información capturada en ningún lugar. El código que debemos utilizar es el siguiente: Private Sub CommandButton2_Click() Unload Me End Sub Para agregar este código puedes hacer doble clic sobre el control. La sentencia “Unload Me” cerrará el formulario. Código para el botón Aceptar A diferencia del botón Cancelar, el botón Aceptar colocará los datos de las cajas de texto en las celdas A1, B1 y C1. El código utilizado es el siguiente: Private Sub CommandButton1_Click() Worksheets("Hoja1").Range("A1").Value = Me.TextBox1.Value Worksheets("Hoja1").Range("B1").Value = Me.TextBox2.Value Worksheets("Hoja1").Range("C1").Value = Me.TextBox3.Value End Sub Al pulsar el botón Aceptar se transferirán los valores de los controles TextBox hacia las celdas de la Hoja1. Botón para abrir formulario Para facilitar la apertura del formulario puedes colocar un botón ActiveX en la hoja con el siguiente código: Private Sub CommandButton1_Click() UserForm1.Show End Sub Probar el formulario Observa cómo cada uno de los botones realiza la acción correcta al pulsarlos: