Está en la página 1de 76

www.fullengineeringbook.

net
VBA Excel

UserForms

By

Luis E Brito

www.fullengineeringbook.net
Copyright 2016
Copyright 2016 by Luis E Brito
All rights reserved. This book or any portion thereof may not be reproduced or
used in any manner whatsoever without the express written permission of the
publisher except for the use of brief quotations in a book review.

www.fullengineeringbook.net
Tabla de Contenidos
Otros Libros Publicados por Luis E Brito
Introduccin
Captulo 1 - UserForms
Captulo 2 - Controles: Cajas de Texto, Etiquetas y Botones de Comando
Captulo 3 - Controles: Casilla de Verificacin, Botn de Opcin, Botn de
Alternar y Marcos
Captulo 4 - Controles: Lista y Cuadro Combinado
Captulo 5 - Controles: Barra de Desplazamiento, Botn de Nmero
Captulo 6 - Control: Multi Pginas, Imagen y RefEdit
Captulo 7 - Herramientas de Formato
www.fullengineeringbook.net
Captulo 8 - Eventos
Captulo 9 - Interaccin Entre Formularios, VBA y Hojas de Excel
Resumen
Acerca del Autor
Otros Libros Publicados por Luis E Brito

www.fullengineeringbook.net
Amazon US
https://www.amazon.com/dp/B01M8K5120
Amazon Mxico
https://www.amazon.com.mx/dp/B01M8K5120
Amazon US

www.fullengineeringbook.net
https://www.amazon.com/dp/B01M674D09
Amazon Mxico
https://www.amazon.com.mx/dp/B01M674D09
Introduccin
Los formularios (UserForms) y sus controles constituyen una de las
herramientas que proporciona VBA para el intercambio de informacin:
Entrada de datos y salida de resultados. Proporcionan la facilidad de disear y
crear formularios que son agradable a la vista, y que enfocan la visin del
usuario en los datos que son requeridos para la ejecucin de los
procedimientos.
La mayora de los usuarios no conocen esta utilidad, a pesar de que son fciles
de disear y que proporcionan una interfaz grfica agradable que mejora la
experiencia del usuario a la hora de ingresar datos a la aplicacin. Pueden ser
utilizados como forma de entrada para incorporar datos a una base de datos, o
simplemente para recoger datos que sern utilizados para realizar clculos y
devolver resultados como si fuesen una aplicacin independiente.
En este libro trataremos sobre los formularios, los controles, sus propiedades
www.fullengineeringbook.net
y mtodos, como disear y construir un formulario, como programar los
controles, asocindolos a eventos para que ejecuten los procedimientos que se
requieran.
Finalmente les expreso, a pesar que el material es extenso, que existe una gran
cantidad de propiedades y mtodos, que existe una gran cantidad de eventos,
podemos sacar provecho de los formularios (UserForms) si nos enfocamos en
algunos elementos que son importantes. A medida que vayamos avanzando en
el aprendizaje de los elementos fundamentales podemos ir incorporando
nuevos elementos cuando sean requeridos. Una fuente de ayuda muy importante
es el examinador de objetos, se puede recurrir a l para verificar los objetos,
sus propiedades, mtodos y la sintaxis.
Sin ms, solamente deseo que este libro sea de utilidad y cumpla con su
objetivo de ayudar al lector a comprender y a utilizar los formularios en VBA
Excel.
Captulo 1 - UserForms
UserForms (Formas o Formularios)
Una forma o formulario (UserForm) es esencialmente una caja de dialogo
construida al gusto y necesidad del usuario, de all su nombre en ingls: User:
usuario y Form. Forma o formulario. Pero en realidad esta definicin se queda
corta. Recordemos las funciones InputBox y MsgBox, donde la entrada se
restringe a un solo elemento, un valor numrico, una cadena de texto, un rango,
una matriz. Pero una forma permite recoger mltiples valores, en las cajas de
texto, permite seleccionar elementos con listas o cajas combinadas,
seleccionar opciones y muchas otras caractersticas. Tambin permite
desplegar los resultados de un procedimiento. Pueden intercambiar valores
con las hojas de Excel o puede trabajar independientemente sin intercambiar
valores con las hojas.

www.fullengineeringbook.net
En VBA un UserForm es un objeto, con propiedades y mtodos, que contiene
otros objetos como cajas de texto, etiquetas, botones, imgenes, etc.
Como todo objeto dentro del modelo sigue las mismas reglas. El operador
punto se utiliza para separar el objeto de sus propiedades y mtodos.
UserFormName.Propiedad
UserFormName.Metodo
Las propiedades incluyen aquellas que se utilizan para dar formato a las
caractersticas del formulario. Estas propiedades se pueden cambiar mediante
cdigo en VBA, o se pueden cambiar en la ventana de propiedades, si esta
ventana no est visible puede hacerse visible con la tecla F4, o en la barra de
men, en la pestaa ver, hacer clic en Ventana de propiedades.
Algunas de las propiedades que se pueden cambiar son:
Name
Para cambiar el nombre de la forma. De forma predeterminada VBA asigna a
las formas el nombre genrico UserForm y un nmero consecutivo. As la
primera forma que creemos tendr nombre UserForm1, y la segunda
UserForm2, y as sucesivamente. Sin embargo, se puede cambiar este nombre
por otro nombre que resulte ms descriptivo y que tenga significado para el
programador. Con la finalidad de identificar los diferentes objetos se
recomienda colocar un prefijo, y luego el nombre que se desee. Esto no es
obligatorio, pero si recomendable. Por ejemplo, para las formas se utiliza el
prefijo es frm, as que podramos dar un nombre a la forma frmEmpleados, si
estamos trabajando en una forma para recoger datos de los empleados.
BackColor
Para establecer el color del fondo de la forma. Se puede cambiar en la ventana
de propiedades, y muestra una paleta de colores para la seleccin.
BorderStyle
Para cambiar el tipo de borde de la forma. Tiene dos valores:
fmBorderStyleNone (0) y fmBorderStyleSingle (1).
Caption
Para colocar una etiqueta en la barra de ttulo de la forma. Por defecto muestra
el ttulo UserForm y un nmero consecutivo igual al que tiene la propiedad
www.fullengineeringbook.net
Name.
Font
Cambia las propiedades asociadas a la fuente utilizada, nombre de la fuente,
tamao, resaltado, itlica, etc.
ForeColor
Permite definir el color que mostrara la fuente.
Height
Para modificar el alto de la Forma. Tambin se puede modificar el alto
arrastrando el borde inferior, donde aparece un cuadradito de color blanco,
cuando aparezca el cursor como una doble flecha vertical.
Width
Para modificar el ancho de la forma. Tambin se puede modificar el ancho
arrastrando el borde lateral, donde aparece un cuadradito de color blanco,
cuando aparezca el cursor como una doble flecha horizontal.
Cada uno de los controles que se crean en la forma constituyen propiedades
del objeto UserFormName. Por ejemplo, si se crea una caja de texto, TextBox1
se convierte en una propiedad.
Entre los mtodos ms importantes de los UserformName estn Show y Hide.
UserFormName.Show muestra la forma
UserFormName.Hide oculta la forma.
Como se crea una Forma (UserForm)
Una Forma se crea en el editor de Visual Basic. En el men insertar, que
permite insertar mdulos y procedimientos, tambin tiene la opcin de insertar
UserForm. Si se tienen varios proyectos abiertos (Libros) primero debe
seleccionarse el libro donde se desea insertar el UserForm. Luego en la barra
de men hacer clic en Insertar y seleccionar UserForm.
Se crear una forma vaca con el nombre de UserForm1 en la barra de ttulo, y
aparecer el cuadro de herramientas con los controles que pueden utilizarse en
la forma. Tambin en el explorador de proyectos aparecer una carpeta con el

www.fullengineeringbook.net
nombre Formularios y en la ventana de propiedades aparecern las
propiedades de UserForm1.

Un UserForm puede ser visualizado como un lienzo donde colocar los


controles que nos permitirn la introduccin de datos, la presentacin de
informacin y resultados.
Caja de Herramientas y Controles
La caja de herramientas muestra, de forma predeterminada, 15 controles, que
pueden ser colocadas dentro de las Formas y dimensionadas al gusto del
usuario. En la siguiente figura se muestra la caja de herramientas. Si se
requieren controles adicionales, se pueden aadir en la barra de men del
VBE, hacer clic en herramientas y seleccionar controles adicionales.

www.fullengineeringbook.net
Para colocar un control en la Forma simplemente seleccione el control
haciendo clic sobre l en el cuadro de herramientas. Luego se posiciona el
cursor sobre la forma, se ancla en un punto haciendo clic, se mantiene
presionado y se arrastra para crear un control.
Los controles y sus funciones se muestran en las siguientes figuras:

El seleccionador de objetos o apuntador se utiliza para seleccionar objetos


que han sido colocados dentro de la forma para su edicin o para moverlo.
Las etiquetas (Labels) se utilizan para colocar etiquetas de texto que ayudan a
identificar los controles dentro de la forma, y tambin pueden ser utilizados
para mostrar valores de otros controles, como barras de desplazamiento,
botones de nmero y en general de cualquier control que tenga un valor.
Las Cajas de Texto (TextBox) son cajas que se crean para introducir
informacin y tambin para mostrar resultados. Como su nombre indica el tipo
de dato que reciben se interpreta como String.

www.fullengineeringbook.net
Otras formas de introducir informacin incluyen seleccionar valores
predefinidos de listas (ListBox) y de cuadros combinados (ComboBox) o
mediante casillas de verificacin (Checklist).

Otras formas de introducir informacin la constituyen los botones de opcin y


los botones de alternar. Ambos tipos de botones tienen dos estados True o
False y permiten seleccionar una opcin entre varias opciones disponibles.
Cuando existen opciones relacionadas, las cuales son excluyentes entre si se
utiliza el control de marco, el cual limita la seleccin a una sola opcin al
grupo que se encuentra dentro del marco.

Los botones de comandos permiten que se ejecuten procedimientos cuando se


hacen clic sobre ellos. Por lo general tambin se incluye un botn para
www.fullengineeringbook.net
cancelar la forma y cerrarla. La barra de tabulaciones permite manejar un
conjunto de propiedades de un control. Y el control de pginas mltiples
permite crear una forma que contiene mltiples pginas.

Una barra de desplazamiento permite cambiar el valor mediante el uso de un


deslizador. El valor podra asociarse a una caja de texto (TextBox), que
almacenar el valor de la barra de desplazamiento, o tambin puede ser
asociada a la propiedad caption de una etiqueta (Label). El botn de nmero
acta de manera similar que la barra de desplazamiento, pero solo hace
cambios finos al presionar las flechas de incremento. El control de imagen
permite colocar y dar formato a una imagen para ser utilizada dentro de la
forma.
Cada uno de los controles, una vez que son incluidos dentro de la forma,
constituye una propiedad de la UserFormName correspondiente. Los controles
a su vez tienen propiedades, las cuales pueden ser modificadas en la ventana
de propiedades o mediante instrucciones en un procedimiento en VBA. Ahora
estamos solamente presentando los controles que pueden utilizarse dentro de
las formas, en los captulos siguientes ahondaremos en el uso de ellos,
revisando las principales propiedades.

Convencin Utilizada para el Nombre de los Controles


Cuando los controles son creados VBA les asigna un nombre genrico por
defecto (propiedad Name). A las formas las identifica como UserForm1,
UserForm2, y as sucesivamente. Las cajas de texto como Textbox1, Textbox2,
y as con los otros controles, el usuario puede cambiarles el nombre y utilizar
uno que sea ms descriptivo y que tenga mayor sentido para el programador.
Sin embargo, para saber que un nombre se refiere a determinado tipo de
www.fullengineeringbook.net
control existe la convencin de aadir un prefijo al nombre. A continuacin, se
muestran los prefijos recomendados, estos prefijos son solo una
recomendacin, no son de uso obligatorio, pero ayudan a trabajar con los
controles, sobre todo si existen muchos de ellos en la forma.
Nombre en espaol: Control (ingles) : Prefijo
Forma o Formulario : UserForm : frm
Etiqueta: Label : lbl
Caja de texto: TextBox: txt
Cuadro combinado: ComboBox: cbo
Lista: ListBox: lst
Casilla de verificacin: CheckBox: chk
Botn de opcin: Option button: opt
Botn de alternar: Toggle button: tog
Marco: Frame: fra
Botn de comando: Command button: cmd
Barra de tabulaciones:Tab strip: tab
Pginas mltiples: Multipage:mpa
Barra de desplazamientos: ScrollBar: scr
Botn de nmero: Spin button: spn
Imagen: Image: img
Programando los Formularios y sus Controles
Disear el formulario y crear los controles es la primera fase, para que el
formulario y sus controles ejecuten las acciones que se requieren de ellos,
deben ser programados. Para programar un control se debe hacer doble clic
sobre el control que se desea programar o hacer clic en el botn derecho del
ratn para que aparezca el men contextual, y entonces seleccionar ver cdigo.
Los cdigos asociados a los formularios se crean en unos mdulos especiales,
que crean unos contenedores de cdigos asociados a eventos de los controles
que se estn programando. Por ejemplo, para el control botn de comando el
www.fullengineeringbook.net
evento ms frecuente es el de hacer Click sobre el botn. Para el control caja
de texto, Lista o Caja Combinada el evento ms frecuente es el Change. Se
crea un mdulo por cada formulario, todos los eventos asociados a los
controles se crearn en este mdulo. Para ms informacin sobre eventos ver
el captulo 8.
Mostrando y Ocultando los Formularios (UserForms)
Una vez que los formularios han sido diseados, construidos y programados
deben ser llamados para ser mostrados y utilizados y posteriormente ocultados
o cerrados. Esto se logra utilizando los mtodos Show (mostrar), Hide
(ocultar), Load (Cargar) y Unload (cerrar).
Mostrando el Formulario (UserForm)
Para mostrar un formulario, se necesita crear un procedimiento que utilice el
mtodo Show del objeto UserFormName. La sintaxis de este mtodo es:
UserFormName.Show [modal]
Esta simple lnea de cdigo colocada dentro de un procedimiento permitir
mostrar un formulario en pantalla. Este procedimiento debe ser incluido en un
mdulo estndar de VBA y no en el mdulo especial de cdigo para
formularios (UserForms).
Sub MostrarForma ( )
UserForm1.Show
End Sub
Una vez que el formulario aparece en pantalla, se mantendr visible hasta que
sea ocultado.
Modal o Modeless
El parmetro modal es opcional, y es de tipo Boolean, True, 1, (vbModal) es
el valor predeterminado. False, 0, (vbModeless). Se puede utilizar True o
False, 1 o 0, o las constantes vbModal o vbModeless.
Cuando el formulario est en modal vbModal, valor 1 o True, no se puede
ejecutar ninguna accin en la aplicacin hasta que se ejecute el formulario y se
cierre.

www.fullengineeringbook.net
Si el parmetro modal est en vbModeles, valor 0 o False, se pueden hacer
manipulaciones a las celdas de la hoja. En el siguiente procedimiento se
muestra la forma frmList y se utiliza modal igual a 0, lo que permite que se
puedan hacer manipulaciones a las celdas de la hoja.
Sub Botn1_Haga_clic_en()
frmList.Show 0
End Sub
Ocultando el Formulario (UserForm)
Para ocultar un formulario se utiliza el mtodo Hide del objeto
UserFormName. El formulario no es visible, pero permanece en memoria. La
sintaxis de este mtodo es:
UserFormName.Hide
Por lo general esta instruccin es incluida dentro de un botn de comando
ubicado en el mismo formulario. Este procedimiento se activa por lo general
utilizando el evento Click del control botn de comando. Por lo general se
puede utilizar una etiqueta descriptiva para identificar el botn, como
cancelar, cerrar o cualquier nombre asociado con ocultar.

Cargando y Cerrando los Formularios (UserForms)


Cargando el Formulario (UserForm)
En algunas ocasiones, si el formulario es muy grande, y tarda mucho tiempo en
cargarse. El usuario tiene la opcin de hacer una carga previa a memoria del
formulario, pero sin que est se muestre en pantalla. Para hacer esto se utiliza
el mtodo Load del objeto UserForm. La sintaxis es:
Load UserFormName
Para la mayora de los formularios no es necesario utilizar el mtodo Load,
sino simplemente utilizar el mtodo Show.
Cerrando el Formulario (UserForm)
Cuando el formulario no se necesita puede cerrarse y eliminarse de la
memoria. Para hacer esto se utiliza el mtodo Unload, el cual cierra el
formulario y lo elimina de la memoria. Cuando un formulario es cerrado con el
www.fullengineeringbook.net
mtodo Unload, los controles creados son reestablecidos a sus valores
originales predeterminados. En esta forma no es posible accesar los valores
que haban sido definidos por el usuario. La sintaxis es:
Unload UserFormName
Captulo 2 - Controles: Cajas de Texto, Et iquetas y
Botones de Comando
Las cajas de textos (TextBox) y los botones de comandos (Command Buttons)
son los controles ms elementales que pueden ser incorporados en una Forma
junto con las etiquetas, las cuales son tiles para identificar el contenido que
ser ingresado en las cajas de texto. En su forma ms simple, estos controles
se asemejan a la funcin InputBox en su funcionalidad de recoger un valor
ingresado por el usuario.
Cajas de Texto (TextBox, txt)
Las cajas de texto son incorporadas a la forma haciendo clic sobre el icono
correspondiente en el cuadro de herramientas, luego se posiciona el cursor en
cualquier lugar de la forma y se hace clic para anclar un borde de la caja, se
mantiene presionado el botn del ratn, se arrastra el cursor para crear una
www.fullengineeringbook.net
caja del tamao requerido y se suelta. Esto crear una caja de texto, que tendr
el nombre textbox1.

La caja de texto muestra en las esquinas y en la parte central de cada lado unos
pequeos cuadrados de color blanco, que son unas agarraderas (handles) que
permiten redimensionar la caja. Cuando se coloca el cursor sobre las
agarraderas de las esquinas aparecer una flecha en diagonal de doble punta,
haciendo clic y manteniendo presionado el botn del ratn y movindola
permitir cambiar la altura y anchura de la caja en forma simultnea. En los
cuadros de los bordes inferior y superior aparecer una doble flecha vertical,
haciendo clic y manteniendo presionado movemos y cambiar el alto de la
caja. Igual sucede con los cuadros que estn en los laterales izquierdo y
derecho, al moverlos cambiara el ancho de la caja. En cualquier parte del
borde de la caja aparecer una cruz de flechas de doble direccin, al hacer
clic y mantener presionado, cuando presenta esta forma, permitir mover la
caja en cualquier direccin, al soltar el botn del ratn se anclar la caja en su
nueva posicin.
En la ventana de propiedades se desplegarn las propiedades de la caja de
texto recin creada. En esta ventana se mostrarn las propiedades del control
que se haya seleccionado, si no se encuentra seleccionado ningn control,
mostrar las propiedades de la forma.

www.fullengineeringbook.net

Las propiedades de las cajas de texto que aparecen en la ventana de


propiedades son 42, para esta versin de Microsoft Office (2016). Entre estas
tenemos la propiedad Name, para identificar al control creado, aqu se ha
utilizado la convencin de utilizar el prefijo txt para formar el nombre del
control: txtA.
Existe un grupo de propiedades para dar formato a la caja de texto como:
Backcolor, para el color de fondo de la caja de texto,
BackStyle, para dar estilo al fondo.
BorderColor: para dar color a las lneas del borde de la caja de texto.
BorderStyle: para dar estilo a las lneas del borde.
Font: para cambiar el formato de la fuente, incluye nombre de la fuente,
tamao, resaltado, itlica, etc.
ForeColor: para cambiar el color del texto que se introducir en la caja de
texto.
Height. Establecer la altura de la caja de texto, tambin se puede modificar
moviendo las agarraderas que se encuentran en los lados superior e inferior de
la caja de texto.
Width: establecer el ancho de la caja de texto. Se puede cambiar utilizando las
agarraderas que se encuentran en los bordes laterales.
Top: distancia del borde superior de la forma al borde superior de la caja de
texto.
www.fullengineeringbook.net
Left: distancia del borde izquierdo de la forma al borde izquierdo de la caja
de texto.
Las propiedades de los controles pueden ser cambiados en la ventana de
propiedades o mediante cdigo en un procedimiento escrito en VBA.
Etiquetas (Label, lbl)
Las etiquetas tambin se incorporan de igual manera en la forma, haciendo clic
sobre el icono del control etiqueta en la caja de herramientas, luego haciendo
clic en un lugar de la hoja y manteniendo el botn del ratn presionado se
mueve para crear el control del tamao deseado. Al liberar la etiqueta quedar
posicionada en la forma.
Para manipular el tamao del control se procede de igual manera que con las
cajas de texto, el control etiqueta genera una caja con las mismas 8
agarraderas ya descritas para las cajas de texto. La manipulacin sigue el
mismo procedimiento descrito para las cajas de texto.
Las propiedades que se muestran en la ventana de propiedades son 27. Existe
una propiedad Name, y existe la propiedad Caption que se utiliza para
introducir la cadena de texto que aparecer en la forma.
Las propiedades que mencionamos para dar formato al control de caja de texto
son utilizadas con este control tambin:
Backcolor, BackStyle, BorderColor, BorderStyle, Font, ForeColor, Height,
Width, Top, Left.
Botn de Comando (Command button, cmd)
Los botones de comando son controles que permiten iniciar la ejecucin de un
procedimiento en base a un evento relacionado con el botn, por lo general el
evento es hacer clic sobre el botn creado, sin embargo, existen otros eventos
que pueden iniciar la ejecucin del procedimiento, lo cual veremos ms
adelante.
Insertar un botn de comando sigue el mismo procedimiento que ya hemos
descrito, el cambio de alto y ancho tambin puede hacerse mediante la
manipulacin de las agarraderas de la caja del control, o mediante cambios en
la ventana de propiedades.

www.fullengineeringbook.net
Finalicemos el diseo de la forma inicial creando un botn para ejecutar una
accin. Como podemos observar en la imagen se ha creado una forma muy
sencilla, con tres elementos: una caja de texto, a la cual le hemos asignado
nombre txtA, una etiqueta con el texto: Introduzca un valor y un botn de
comando con nombre cmdRun y texto Ejecutar.

Este simple formulario se asemeja en funcionalidad a la funcin InputBox de


VBA, que permite recoger un valor suministrado por el usuario.
Programando el Botn de Comando
Luego de haber diseado nuestra forma, en este caso hemos creado una caja de
texto, una etiqueta para dar un mensaje y un botn de comando para iniciar la
ejecucin de un procedimiento que va a consistir en desplegar un mensaje de
texto (MsgBox).
Para introducir un cdigo asociado al botn de comando que hemos creado,
podemos hacer doble clic sobre el control, o podemos seleccionar el control y
hacer clic con el botn derecho del ratn para desplegar el men contextual.
En el men seleccionar ver cdigo. Esto abrir una ventana de cdigo
especialmente para introducir los cdigos asociados a los formularios.
Automticamente se crea un contenedor de cdigo, asociado al control, desde
el cual hemos abierto la ventana de cdigo, y estar asociado a un evento, el
nombre del procedimiento ser igual al nombre del control, seguido por un
guion bajo y el nombre del evento. El evento por defecto ser Click. Dentro
del contenedor escribimos el cdigo para el procedimiento.
Private Sub cmdRun_Click()
Dim valor As String
valor = txtA.Text
www.fullengineeringbook.net
MsgBox "El valor introducido es " & valor
End Sub
txtA es una propiedad del objeto UserForm1, y Text es una propiedad del
objeto txtA que regresa el valor del texto ingresado en la caja de texto.
La declaracin valor = txtA.Text podra haber sido escrita de las siguientes
maneras:
Valor = UserForm1.txtA.Text o inclusive
Valor = Me.txtA.Text
Donde Me se utiliza en sustitucin del objeto activo, en este caso UserForm1.
Luego probamos nuestro formulario con la tecla F5, o con el icono de ejecutar
en la barra de men del editor. Aparecer la forma lista para ser utilizada.
Introducimos un valor en la caja de texto, por ejemplo 50 y al hacer clic en
botn Ejecutar aparecer una caja de mensaje (MsgBox) con el Texto:
El valor introducido es 50.
Ahora disearemos y construiremos otra forma con ms elementos, para
introducir dos valores en dos cajas de texto y obtener el valor de la suma en
una tercera caja de texto. Utilizaremos dos botones de comando, uno para
realizar la suma y otra para borrar el resultado.

www.fullengineeringbook.net

El cdigo del botn de comando para sumar es:


Private Sub cmdSumar_Click()
Dim A As Single
Dim B As Single
Dim C As Single
A = txtval1.Value
B = txtVal2.Value
C = A+ B
txtResultado.Value = C
End Sub
El cdigo para el botn de comando borrar es:
Private Sub cmdBorrar_Click()
txtval1.Text = " "
txtVal2.Text = " "
txtResultado = " "
End Sub
www.fullengineeringbook.net
Captulo 3 - Controles: Casilla de Verificacin, Botn
de Opcin, Botn de Alternar y Marcos
Los controles de casilla de verificacin, botn de opcin y botn de alternar
son parecidos, en el hecho de que proporcionan una respuesta con dos
posibles resultados, True o False, seleccionado o no seleccionado.

Casilla de Verificacin (Checkbox, chk)


www.fullengineeringbook.net
La casilla de verificacin permite seleccionar una opcin al hacer clic sobre
ella (verificar o checar) y si existen varias casillas de verificacin se pueden
seleccionar cualquier nmero de ellas, o todas ellas, no son excluyentes entre
s. La casilla de verificacin tiene dos estados posibles, seleccionado, cuando
tiene la marca de verificado, con valor True y no seleccionado, cuando el
cuadro est vaco, False. Se puede utilizar un marco para agrupar varias
casillas de verificacin, para manejarlas en grupo, pero esto no modifica la
independencia de seleccionar las casillas.
La forma de utilizar este control es similar a la descrita para los otros
controles. Este control tiene su propia etiqueta, a travs de la propiedad
caption, as que no es necesario utilizar etiquetas de textos para su
identificacin.
En el siguiente ejemplo se dise una forma con varias casillas de
verificacin para seleccionar los ingredientes a utilizar en un sandwich.
El diseo de la forma y sus controles es el que muestra a continuacin:

www.fullengineeringbook.net

Luego de disear la forma se programa el botn de comando para ejecutar un


procedimiento. En este procedimiento utilizamos una serie de estructuras
condicionales para ir evaluando si la casilla de verificacin est en posicin
Verdadera (True) o Falsa (False).
Private Sub cmdSeleccion_Click()
Dim Texto As String
Dim Texto1 As String
Dim Texto2 As String
Dim Texto3 As String
Dim Texto4 As String
Dim sep As String
sep = ", "
If chkingredient1 Then
Texto1 = chkingredient1.Caption
Texto = Texto1 + sep
Else
Texto = Texto
End If
If chkingrediente2 Then
Texto2 = chkingrediente2.Caption
Texto = Texto + Texto2 + sep
www.fullengineeringbook.net
Else
Texto = Texto
End If
If chkingrediente3 Then
Texto3 = chkingrediente3.Caption
Texto = Texto + Texto3 + sep
Else
Texto = Texto
End If
If chkingrediente4 Then
Texto4 = chkingrediente4.Caption
Texto = Texto + Texto4
Else
Texto = Texto
End If
MsgBox Texto
End Sub
Al seleccionar por ejemplo Tomate, Jamn y Tocineta y hacer clic en el botn
seleccionar mostrar un mensaje de Texto con los nombres de los ingredientes
seleccionados: Tomate, Jamn, Tocineta.
Botn de Opcin (Option Button, opt)
Con los botones de opcin la situacin es diferente a la de las casillas de
verificacin, porque si se selecciona una opcin las otras opciones no pueden
seleccionarse, es decir son mutuamente excluyentes, por ejemplo, si preguntan
por el estado civil, solo puede ser uno en un momento determinado: soltero,
casado, viudo. Si se tienen varios grupos de opciones, ellas pueden ser
diferenciadas, agrupndolas en diferentes marcos, o utilizando la propiedad
GroupName.

www.fullengineeringbook.net
Los botones de opcin tienen dos valores: seleccionado, True, aparece un
punto negro en el centro del botn y no seleccionado, False, aparece un circulo
en blanco. Cuando uno presiona uno de los botones, se selecciona esa opcin y
deselecciona la opcin que estaba previamente seleccionada, nunca dos
opciones estarn seleccionadas simultneamente.
Este control, al igual que el de casilla de verificacin tiene su propia etiqueta
de texto, a travs de la propiedad caption
www.fullengineeringbook.net
El siguiente cdigo permite extraer la informacin sobre el estado civil,
mediante el uso de una estructura condicional.
Private Sub cmdCivil_Click()
If optSoltero Then
Status = "Soltero"
ElseIf optCasado Then
Status = "Casado"
Else
Status = "Viudo"
End If
MsgBox "El estado Civil es " & Status
End Sub
Marco (Frame, fra)
El control Marco se utiliza para crear una caja y agrupar otros controles
dentro del mismo. Esto con la finalidad de agrupar controles que estn
relacionados, y as mejorar el diseo y presentacin del formulario. Tambin
se utiliza para agrupar diferentes conjuntos de botones de opcin, para limitar
la exclusin de las opciones dentro de cada marco.
Para incluir controles dentro del marco, se recomienda primero crear el
marco, luego crear los controles dentro del marco. Al hacerlo de esta manera
el marco y los controles dentro de l se comportarn como una sola entidad.
Si los controles que se desean incorporar al marco ya han sido creados
previos a la creacin del marco, se recomienda mover los controles sobre el
marco, y no el marco sobre los controles. Esto se debe al orden de los
elementos grficos, al sobreponer el marco sobre los controles, estos quedarn
cubiertos por el marco. Al presentar la forma, los controles dentro del marco
permanecern ocultos.
El Marco tiene las propiedades comunes a todos los controles:

www.fullengineeringbook.net
Name, para dar nombre al control, se recomienda utilizar el prefijo fra,
seguido de un nombre.
Caption, para colocar un ttulo al marco.
Adems de las propiedades para establecer el formato del control.

En la figura se muestra una forma con dos grupos de opciones, cada grupo est
incluido dentro de su propio marco, de esta manera la exclusin de las
diferentes opciones queda contenida, y no se afectan entre s. De esta manera
es posible seleccionar una opcin en el marco de la izquierda y seleccionar
una opcin en el marco de la derecha.

Botn de Alternar (Toggle Button, tog)


Un botn de alternar permite hacer clic sobre l, permitiendo dos valores:
presionado, verdadero (True) y no presionado, Falso (False). Pero a
diferencia de los botones de opcin, permiten ejecutar dos tipos de accin,
dependiendo si el botn est presionado o no.
En su funcionalidad es como una mezcla de botn de comando y botn de
opcin. Parecido a un botn de comando, porque se ejecuta cuando se hace
clic sobre l, y parecido a un botn de opcin porque tiene dos estados:
presionado (True) y no presionado (False). Aunque existe la posibilidad de un
tercer estado: Null, cuando la propiedad TripleState es establecida como True,
la cual por defecto est establecida como False.
En el siguiente formulario se crea un botn de alternar para realizar la accin
de cambiar el color de fondo de verde a azul.

www.fullengineeringbook.net

Al estar presionado el color del fondo es de color verde y al no estar


presionado el color ser azul. El cdigo del procedimiento es el que se
muestra a continuacin.
Private Sub ToggleButton1_Click()
If ToggleButton1.Value Then
frmTestAlternar.BackColor = vbGreen
Else
frmTestAlternar.BackColor = vbBlue
End If
End Sub

www.fullengineeringbook.net
Captulo 4 - Controles: Lista y Cuadro Combinado
Los controles de lista y de cuadro combinado son similares en el sentido de
que muestran un listado de opciones para que el usuario haga una seleccin.
Lista (ListBox, lst)
Una Lista es un control, que genera una caja con un listado de elementos
(Items), de los cuales se puede seleccionar uno o varios elementos,
dependiendo del valor de la propiedad Muliselect, la cual tiene 3 valores
posibles:
fmMultiSelectSingle para seleccionar un solo elemento de la lista
fmMultiSelectMulti para seleccionar varios elementos simultneamente al
hacer clic sobre cada elemento o presionando la barra espaciadora.
fmMultiSelectExtended para seleccionar varios elementos utilizando la
www.fullengineeringbook.net
combinacin:
Shift + click en cada elemento. Shift (Tecla de mayscula)
Shift (mantenida en el primer elemento) + clic en el ltimo elemento
seleccionado.
Shift (mantenida en el primer elemento) + tecla de direccin para avanzar
elemento por elemento.
Marcando y arrastrando el ratn sobre los items a seleccionar.
Se pueden seleccionar o deseleccionar haciendo ctrl + clic sobre los
elementos individuales.
Los controles lista tienen la propiedad Name, pero no tienen propiedad
caption, por lo que se puede utilizar un control etiqueta para la identificacin
del control. Tambin tiene las propiedades generales de formato comunes a
todos los controles.
Tienen una propiedad RowSource, que permite crear la lista de elementos del
control, ligndolo a un rango o a un nombre de rango de una hoja de Excel.
Si la lista de elementos ocupa ms espacio que la caja creada, se incluir una
barra de desplazamiento vertical colocada en el lateral derecho, para moverse
a lo largo de la lista.

Cuadro Combinado (ComboBox, cbo)


Un control de cuadro combinado es una combinacin de caja de texto y lista.
Cuando se inserta un cuadro combinado se crea una caja de texto, que en su
lado derecho tiene un botn con flecha hacia abajo, que al presionarlo
mostrara una lista desplegable (drop down menu). A diferencia de las listas,
que tienen la posibilidad de seleccionar uno o mltiples valores de la lista, un
cuadro combinado solo permite la seleccin de un solo valor.

www.fullengineeringbook.net
Tiene propiedad Name para cambiar el nombre del control, pero no tiene
propiedad Caption para colocar una etiqueta de identificacin, por lo que se
necesita un control etiqueta (label) para colocar una identificacin al control.
Las propiedades generales para dar formato tambin aplican a este control,
tales como:
Backcolor, BackStyle, BorderColor, BorderStyle, Font, ForeColor, Height,
Width, Top, Left.
Al igual que el control lista, tienen una propiedad RowSource, que permite
crear la lista de elementos del control, ligndolo a un rango o a un nombre de
rango de una hoja de Excel.
Formas de Poblar una Lista o Cuadro Combinado
Utilizando el mtodo AddItem
Una lista o un cuadro combinado pueden ser cargados utilizando el mtodo
AddItem, en un evento de inicializacin del formulario. Utilizando la siguiente
sintaxis:
ObjetoListBox.AddItem ([pvargItem, [pvargIndex])
ObjetoComboBox.AddItem([pvargItem, [pvargIndex])
Donde pvargItem es opcional y es el elemento o fila que se va a aadir a la
lista o cuadro combinado y,
pvargIndex es opcional y es un nmero entero, que representa la posicin del
elemento o fila dentro del objeto. Si se omite el Index, el Item o fila es
ubicado al final de la lista. Index comienza con cero, as que el primer
elemento de la lista tiene index 0. El valor de index no puede ser mayor que el
nmero total de filas, el cual se establece con la propiedad ListCount.
AddItem no funciona si el ListBox o ComboBox estn ligados a datos
mediante la propiedad RowSource, as que, si desean agregar elementos
utilizando el mtodo AddItem, primero debe borrarse el valor de la propiedad
RowSource.
www.fullengineeringbook.net
A continuacin, un ejemplo de un procedimiento de un evento de inicializacin
del formulario, que carga los elementos de la lista utilizando el mtodo
AddItem.
Private Sub UserForm_Initialize()
Me.lstTest.AddItem "Peter"
Me.lstTest.AddItem "John"
Me.lstTest.AddItem "Richard"
Me.lstTest.AddItem "Luis"
Me.lstTest.AddItem "Jorge"
End Sub
Aqu Me se refiere al objeto UserForm activo.
A continuacin, se muestra como aparece el control lista luego de la
inicializacin.
Se observa que en la caja de lista solo se pueden visualizar 3 elementos, por
lo que aparece una barra de desplazamiento vertical para acceder a los
elementos no visibles dentro de la caja de la lista.
Para un control de caja combinado (ComboBox) procedemos de manera
similar con el mtodo AddItem. Me, se refiere al objeto UserForm Activo,
donde se encuentra el control cuadro combinado y cbopaises es el nombre del
objeto ComboBox.
En lugar de Me podramos haber utilizado frmTESTCBO.
www.fullengineeringbook.net
frmTESTCBO.cbopaises.AddItem "Pas" es equivalente a
Me.cbopaises.AddItem "Pas".
Private Sub UserForm_Initialize()
Me.cbopaises.AddItem "Venezuela"
Me.cbopaises.AddItem "Mxico"
Me.cbopaises.AddItem "Colombia"
Me.cbopaises.AddItem "Brasil"
Me.cbopaises.AddItem "Peru"
Me.cbopaises.AddItem "Chile"
Me.cbopaises.AddItem "Ecuador"
End Sub
Aparece una caja de texto, el cual al presionar el botn con flecha en el borde
derecho despliega un men, con los elementos aadidos con el mtodo
AddItem.
Utilizando la Propiedad RowSource

www.fullengineeringbook.net
La propiedad RowSource permite cargar de elementos un control de lista o un
control de caja combinada. RowSource ingresa una referencia a un rango de
celdas dentro de una hoja, el cual es un rango vertical de celdas para una lista
de una sola columna, o un bloque de celdas para una lista de mltiples
columnas. En la siguiente figura se muestra el rango A3:A8, de la hoja datos.
La sintaxis es el nombre de la hoja seguido de un signo de admiracin y luego
el rango de las celdas. Si el nombre de la hoja contiene espacios vacos o
caracteres especiales, debe colocarse el nombre dentro de comillas simples.
Por ejemplo si el nombre de la hoja es datos de listas, la referencia debe
colocarse: 'datos de listas'!A3:A8
La referencia del rango puede ser colocado directamente en la ventana de
propiedades, donde aparece la propiedad RowSource. En la figura se muestra
una porcin de la ventana de propiedades del objeto tipo ListBox de nombre
lstGolosinas, con la propiedad RowSource y la referencia del rango.

www.fullengineeringbook.net

Al colocar la referencia en la ventana de propiedades automticamente


aparecern los elementos dentro de la caja de la lista.
Para el control de caja combinada (ComboBox) funciona de igual manera. En
la ventana de propiedades del control ComboBox se ubica la propiedad
RowSource y se coloca la direccin del rango siguiendo la sintaxis ya
indicada. Nombre de la hoja seguido del signo de admiracin (!) y luego el
rango.

www.fullengineeringbook.net
En lugar de utilizar la ventana de propiedades tambin se puede utilizar en un
procedimiento con el evento de inicializacin al cargar el formulario.
Private Sub UserForm_Initialize()
Me.cbodatos.RowSource = "datos!A3:A8"
End Sub
La referencia al rango debe colocarse entre comillas dobles y sigue la misma
sintaxis. Nombre de la hoja seguido de signo de admiracin (!) y luego el
rango. Tambin se puede utilizar el signo igual dentro de las comillas:
Private Sub UserForm_Initialize()
Me.cbodatos.RowSource = "=datos!A3:A8"
End Sub
Aqu, se aplica la propiedad RowSource al objeto ComboBox. Me, sustituye
al objeto UserForm activo.
Utilizando la Propiedad RowSource con un Nombre de Rango
En lugar de utilizar una referencia a un rango, tambin se puede utilizar un
nombre de rango. Este nombre de rango puede utilizarse en la ventana de
propiedades del control lista (ListBox) o caja combinada (ComboBox).

El nombre del rango se escribe sin colocar comillas. Tambin se puede


utilizar el nombre de rango en un cdigo de inicializacin de la UserForm.
Private Sub UserForm_Initialize()
Me.lstFrutas.RowSource = "Frutas"

www.fullengineeringbook.net
End Sub
En este caso el nombre del rango debe colocarse entre comillas dobles.
Nombres de Rangos Dinamicos
Si la lista va a cambiar es necesario modificar el rango asociado al nombre.
Una forma de hacerlo es creando un cdigo que se ejecute con el evento de
inicializacin del UserForm.
Private Sub UserForm_Initialize()
Dim UFila As Double
Worksheets("datos").Select
UFila = Range("A" & Rows.Count).End(xlUp).Row
ThisWorkbook.Names.Add "mirango", Range(Range("A3"), Range("A" &
UFila))
Me.lstFrutas.RowSource = "mirango"
End Sub
En este procedimiento de inicializacin, se verifica la ltima fila con
informacin y se almacena este valor en la variable UFila. Luego se aplica la
propiedad Names al objeto Workbook (ThisWorkbook), para crear un objeto
Names, el cual es una coleccin de objetos tipo Name. Se aplica el mtodo
Add para aadir un nombre al rango actualizado entre la celda de inicio A3,
hasta la ltima fila con informacin en la columna A, "A"&UFila. Finalmente
se aplica la propiedad RowSource y se le asigna el nombre de rango
actualizado.
Utilizando la propiedad RowSource con Tablas
En lugar de crear un nombre de rango, se puede crear una tabla, primero hay
que marcar el rango de celdas que van a constituir la lista de elementos a
incluir con la propiedad RowSource, en el men insertar, grupo Tablas, se
encuentra el icono Tabla, al hacer clic se activara el "Asistente" para crear una
tabla. Seguir las indicaciones para crear la tabla. Esto crear una tabla con el
nombre Tabla1. Cambiar el nombre. Este nombre se aade a el administrador
de nombres de rango, como si fuese un nombre de rango. La ventaja que tiene
la tabla, es que se actualiza dinmicamente, as que cada vez que se incluya o

www.fullengineeringbook.net
se borre una lnea, el rango se actualizara.
Este nombre de tabla que creamos se puede utilizar en la propiedad
RowSource en un procedimiento de inicializacin del objeto UserForm.
Private Sub UserForm_Initialize()
Me.lstTablaF.RowSource = "TablaF"
End Sub
Me sustituye al UserForm, y lstTablaF es el nombre dado al objeto ListBox,
RowSource es la propiedad aplicada a el objeto ListBox. El nombre de la
tabla se coloca entre comillas dobles: "TablaF". Al inicializar el UserForm, se
cargan los elementos que estn en la tabla creada.
No funciona el nombre de la tabla en la ventana de propiedades. Pero se
puede utilizar sin problema en un procedimiento de inicializacin, con el
cdigo mostrado.
Utilizando la Propiedad List y el mtodo AddItem, Aadiendo Elemento
por Elemento
www.fullengineeringbook.net
La propiedad List permite agregar elementos a una lista cuando se tienen
mltiples columnas de datos. La sintaxis de esta propiedad es:
Objeto ListBox.List([pvargIndex], [pvargColumn])
Objeto ComboBox.List([pvargIndex], [pvargColumn])
El primer parmetro es el ndice de las filas, el segundo parmetro es el
ndice de las columnas. Ambos inician en 0 (cero).

Para aadir elementos a una lista podemos utilizar un procedimiento para un


evento de inicializacin y cargar los elementos uno por uno. El primer
elemento de las filas, es decir, los elementos ubicados en la primera columna
se deben aadir con el mtodo AddItem, y los restantes con la propiedad List.
Private Sub UserForm_Initialize()
Me.lstLista1.ColumnCount = 3
Me.lstLista1.AddItem "Dia 1"
Me.lstLista1.List(0, 1) = "Lunes"
Me.lstLista1.List(0, 2) = "Espaguetis"
Me.lstLista1.AddItem "Dia 2"
Me.lstLista1.List(1, 1) = "Martes"
Me.lstLista1.List(1, 2) = "Arroz"
Me.lstLista1.AddItem "Dia 3"
Me.lstLista1.List(2, 1) = "Mircoles"
Me.lstLista1.List(2, 2) = "Ensalada"

www.fullengineeringbook.net
End Sub

Utilizando la Propiedad Column y el mtodo AddItem, Aadiendo


Elemento por Elemento
La propiedad Colum permite aadir elementos cuando la lista tiene mltiples
columnas. La sintaxis es:
ObjetoListBox.Column([pvargColumn], [pvargIndex])
ObjetoComboBox.Column([pvargColumn], [pvargIndex])
El primer parmetro es el ndice de las Columnas y el Segundo parmetro es
el ndice de las filas, ambos inician en 0 (cero).

Esta propiedad se parece a la propiedad List, pero tiene los ndices


transpuestos. El primer ndice es de la columna y el segundo es el de la Fila.
En el siguiente procedimiento de inicializacin se cargarn los elementos de
una caja combinada (ComboBox) utilizando la propiedad Column. Los
elementos de la primera columna deben cargarse utilizando el mtodo
AddItem.
Private Sub UserForm_Initialize()
www.fullengineeringbook.net
Me.cboCol.ColumnCount = 3
Me.cboCol.ColumnHeads = False
Me.cboCol.AddItem "Matematica"
Me.cboCol.AddItem "Fisica"
Me.cboCol.AddItem "Quimica"
Me.cboCol.Column(1, 0) = "Matias"
Me.cboCol.Column(1, 1) = "Francisco"
Me.cboCol.Column(1, 2) = "Maria"
Me.cboCol.Column(2, 0) = "Maana"
Me.cboCol.Column(2, 1) = "Tarde"
Me.cboCol.Column(2, 2) = "Noche"
End Sub
Utilizando la Funcin Array en Combinacin con la Propiedad List
Se pueden cargar las listas (ListBox) y las cajas combinadas (ComboBox)
utilizando la funcin Array en combinacin con la propiedad List. La sintaxis
es la siguiente:
ObjetoListBox.List = Array(elemento0, elemento 1..elementoN)
ObjetoComboBox.List = Array(elemento0, elemento 1..elementoN)
Este mtodo se utiliza solamente mediante cdigo en VBA, no est disponible

www.fullengineeringbook.net
en la ventana de propiedades. En el procedimiento de inicializacin se crea un
cdigo como el que se muestra.
Private Sub UserForm_Initialize()
Dim miarreglo As Variant
miarreglo = Array("uno", "dos", "tres", "cuatro", "cinco")
Me.cboArreglo.List = miarreglo
End Sub
Utilizando la Propiedad List y un Objeto Tipo Range para Aadir un
Rango de Celdas de una Hoja
Ya vimos que List puede ser utilizado para cargar una lista elemento por
elemento en conjunto con el mtodo AddItem, tambin puede se puede cargar
un arreglo unidimensional utilizando la funcin Array, para cargar un Arreglo
de dos dimensiones de forma completa en un solo paso, tambin se puede
utilizar la propiedad List.
El arreglo puede originarse en un rango de celdas de la hoja. As que lo
primero que debemos hacer es crear el arreglo en un rango de celdas de una
hoja.
Copiemos la direccin del rango que hemos creado, ir a la forma (UserForm)
que estamos creando y hacer doble clic, o con el botn derecho despegar el
men contextual. Seleccionar ver cdigo Aparecer la ventana de cdigo, con
un contenedor de cdigo. Por defecto aparecer un contenedor asociado al
evento UserForm_Click, cambiar a uno con el evento UserForm_initialize.
Dentro del contenedor crear un objeto Range y asignarle a la variable objeto
el rango de la tabla que deseamos incluir en la lista (ListBox) o caja
combinada (ComboBox).
Dim miRango As Range (crea la variable para almacenar un objeto tipo
Range).
Set miRango = ThisWorkbook.Worksheets("informe").Range("A2:C6")
Asigna a la variable miRango la referencia al rango en la hoja.
Propiedad ColumnCount

www.fullengineeringbook.net
Se debe indicar cuantas columnas de datos se van a utilizar, utilizando la
propiedad ColumnCount. Si se omite este valor, solamente se mostrar la
primera columna del arreglo. Se puede modificar en la ventana de propiedades
para los controles ListBox y ComboBox o utilizando cdigo en un
procedimiento en VBA.
Propiedad ColumnHeads
Se puede indicar si la lista incluye encabezados para las columnas, utilizando
la propiedad ColumnHeads, con valor true. El valor predeterminado es False.
Se puede cambiar en la ventana de propiedades o mediante cdigo en VBA.
Propiedad ColumnWidth
Tambin se puede indicar el ancho de las columnas, utilizando la propiedad
ColumnWidth, la cual tiene la siguiente sintaxis:
Objeto.ColumnWidth = "ancho1; ancho2; ancho3."
Donde el objeto puede ser un control ListBox o ComboBox. Los anchos se
especifican en unidades de pixeles y estn colocados entre comillas dobles y
separados por punto y coma ( ; ). Si no se utiliza esta propiedad se
desplegarn los anchos de columna para ajustarse a los contenidos de cada
columna. Se puede ocultar la presentacin de cualquier columna,
estableciendo su ancho en 0.
El siguiente procedimiento muestra el cdigo utilizado en un evento de
inicializacin del formulario para cargar un ComboBox con un rango. Primero
mostraremos una porcin de la hoja con el rango.

www.fullengineeringbook.net
Private Sub UserForm_Initialize()
Dim miRango As Range
Set miRango = ThisWorkbook.Worksheets("informe").Range("A2:C6")
Me.cboRange.ColumnCount = 3
Me.cboRange.ColumnHeads = False
Me.cboRange.List = miRango.Cells.Value
End Sub
Utilizando la Propiedad List y una Variable para Aadir un Rango de
Celdas de una Hoja
En lugar de utilizar un objeto Range, es posible utilizar una variable que sea
igual al rango.
El cdigo de inicializacin para este procedimiento es el que se muestra a
continuacin:
Private Sub UserForm_Initialize()
Dim ElRango As Variant
ElRango = Worksheets("informe").Range("A2:C6")
Me.lstElRango.ColumnCount = 3
Me.lstElRango.List = ElRango
End Sub

www.fullengineeringbook.net
Utilizando la Propiedad Column y un Objeto Tipo Range para Aadir un
Rango de Celdas de una Hoja
En este mtodo se crea un objeto Range de igual manera que se hizo en el
ejemplo anterior con la propiedad List. La diferencia es que cuando se aplica
la propiedad Column, lo que aparece como fila en el rango, se carga como
columna en la lista. Es decir, aparece transpuesto.
Private Sub UserForm_Initialize()
Dim ColRange As Range
Set ColRange = Worksheets("informe").Range("A2:C6")
Me.cboMiRango.ColumnCount = 3
Me.cboMiRango.Column = ColRange.Cells.Value
End Sub
Para que aparezca en el orden correcto hay que aplicar la funcin transpose al
objeto Range creado.
Private Sub UserForm_Initialize()

www.fullengineeringbook.net
Dim A As Range
Set A = Worksheets("informe").Range("A2:C6")
B = WorksheetFunction.Transpose(A)
Me.cboMiRango.ColumnCount = 3
Me.cboMiRango.Column = B
End Sub
Utilizando la Propiedad Column y un Rango de Celdas asignado a una
Variable
En lugar de crear un objeto Range tambin se puede crear una variable para
www.fullengineeringbook.net
que almacene el Rango de la hoja. A continuacin, un procedimiento de
inicializacin donde la variable A almacena el Rango de la hoja, y la variable
B almacena el valor de la Transpuesta de A. Para que la lista aparezca en
correcto orden, al utilizar la propiedad Column, se debe utiliza la transpuesta
del arreglo A, es decir, el arreglo B.
Private Sub UserForm_Initialize()
A = Worksheets("informe").Range("A2:C6")
B = WorksheetFunction.Transpose(A)
Me.cboMiRango.ColumnCount = 3
Me.cboMiRango.Column = B
End Sub
Propiedades para Enlazar datos de una Columna
Especifica
Propiedad TextColum
La propiedad TextColumn se utiliza para indicar cual columna se utiliza para
recoger datos cuando se utiliza la propiedad Text de un control ListBox o
ComboBox en una lista con mltiples columnas. La sintaxis es
Objeto.TextColumn= Valor
Donde Objeto es un control ListBox o ComboBox y el valor es un nmero
entero que indica la posicin de la columna: 1 para la primera columna, 2 para
la segunda columna. Cuando se utiliza un valor de 0, se muestra el nmero de
la fila seleccionada (propiedad ListIndex). Si se utiliza -1, se utilizar la
primera columna cuyo ancho (propiedad columnWidth) sea mayor de 0. Este
es el valor predeterminado. Esta propiedad se puede cambiar en la ventana de
propiedades o mediante cdigo en un procedimiento en VBA.
Cuando se utiliza un control ComboBox, en la parte de la caja de texto se
mostrar el valor de la columna especificada con la propiedad TextColumn.
Propiedad BoundColum
La propiedad BoundColumn se utiliza para indicar cual columna se utiliza
para recoger datos cuando se utiliza la propiedad Value de un control ListBox
www.fullengineeringbook.net
o ComboBox en una lista con mltiples columnas. La sintaxis es
Objeto.BoundColumn= Valor
Donde objeto es un control ListBox o ComboBox. Y valor es un entero para
indicar la posicin de la columna. El valor predeterminado es 1. Cuando se
utiliza un valor de 0, se muestra el nmero de la fila seleccionada (propiedad
ListIndex). Esta propiedad se puede cambiar en la ventana de propiedades o
mediante cdigo en un procedimiento en VBA.
Propiedades para Restringir la Seleccin a los Valores en
la Lista de Elementos en la Caja Combinada
En una caja combinada (ComboBox) se puede seleccionar un elemento del
men desplegable (drop down menu) y tambin se puede aadir un elemento
que no aparece en la lista, escribindolo directamente en la caja de texto. Esto
debido a que este control es una combinacin de caja de texto y lista.
Propiedad MatchRequired
Para que se pueda ingresar un elemento nuevo, que no aparece en la lista de
elementos de la caja combinada se requiere que la propiedad MatchRequired
tenga valor False, el cul es el valor predeterminado. Si el valor de la
propiedad MatchRequired se establece en True, no se puede utilizar ningn
valor que no est en la lista desplegable. De esta manera la seleccin queda
restringida a los elementos que estn dentro de la lista. Al intentar usar un
valor diferente generar un mensaje de error, indicando Valor de propiedad no
valido.
La propiedad MatchRequired puede ser cambiada en la ventana de
propiedades o mediante cdigo en procedimientos VBA.
Si MatchRequired tiene valor False, se puede escribir un valor en la caja
combinada, pero no se incluye dentro de la lista. Para que se incluya en la lista
hay que escribir un procedimiento que al determinar que el nuevo elemento no
est dentro de la lista, lo aada a la lista para que est disponible para un uso
futuro.
Propiedad Style
Esta propiedad permite cambiar el estilo de la lista desplegable (Dropdown
menu). Esta propiedad tiene dos valores:
www.fullengineeringbook.net
0 - fmStyleDropDownCombo. Este es el valor predeterminado, y hace que la
caja de texto pueda ser utilizada para ingresar informacin que no est en la
lista.
2 - fmStyleDropDownList. Este valor hace que la caja de texto de la caja
combinada no acepte que se escriban valores. Se restringe la entrada solo a
los elementos que estn en la lista.
Esta propiedad puede ser modificada en la ventana de propiedades o mediante
cdigo en VBA.
Captulo 5 - Controles: Barra de Desplazamiento,
Botn de Nmero
Estos dos controles permiten asignar valores numricos a la propiedad de un
objeto, el cual puede ser un rango de una hoja, el valor de una caja de texto, el
valor de una etiqueta.

Barra de Desplazamiento (ScrollBar, scr)


www.fullengineeringbook.net
Una barra de desplazamiento es un control que tiene dos botones uno para
disminuir y otro para aumentar una cantidad fija, la cual se establece con la
propiedad SmallChange (cambio pequeo). Cuando se hace clic en la zona de
la barra deslizadora, entre los botones, los cambios se efectan de acuerdo al
valor de la propiedad LargeChange (cambio grande). En la barra tiene un
deslizador, que puede ser movido con la ayuda del ratn haciendo clic y
manteniendo presionado. Los botones y la zona de la barra pueden ser
accionados clic a clic, o manteniendo presionado. La barra de desplazamiento
puede colocarse en forma horizontal o en forma vertical, dependiendo de las
dimensiones de la altura y del ancho. Si el ancho es mayor que la altura,
automticamente se creara una barra de desplazamiento horizontal, en caso
contrario se creara una barra de desplazamiento vertical.
La barra desplazamiento tiene las propiedades Max, para establecer el valor
mximo, el cual tiene un valor predeterminado de 32767 y Min para establecer
el valor mnimo, el cual tiene un valor predeterminado de 0. Estos valores se
pueden cambiar en la ventana de propiedades o mediante cdigo en un
procedimiento en VBA.
En la siguiente figura se muestra una forma donde se han creado tres cajas de
texto y dos barras de desplazamiento, que controlan los valores en las cajas de
texto 1 y 2. La caja de texto 3 muestra el resultado de la multiplicacin de los
valores que contienen las cajas 1 y 2.

www.fullengineeringbook.net
Para que los valores de las barras de desplazamiento se copien a las cajas de
texto se crean procedimientos que se ejecutan con el evento Change. Cada vez
que se haga un cambio en las barras de desplazamiento se ejecutara el
procedimiento. A continuacin, los procedimientos para los eventos Change de
las dos barras de desplazamientos.
Private Sub scrbar1_Change()
Me.txtVal1.Value = scrbar1.Value
Me.txtVal3.Value = Val(Me.txtVal1.Value) * Val(Me.txtVal2.Value)
End Sub
###
Private Sub scrBar2_Change()
Me.txtVal2.Value = scrBar2.Value
Me.txtVal3.Value = Val(Me.txtVal1.Value) * Val(Me.txtVal2.Value)
End Sub
Cuando se acciona cualquiera de las barras de desplazamiento se efecta la
multiplicacin de los valores que contengan las cajas de texto 1 y 2 y el
resultado se colocara en la caja de texto 3. Los valores almacenados en las
cajas de texto son de tipo String, por lo que para transformarlos en nmeros se
utiliza la funcin Val.
En resumen, las propiedades ms importantes de las barras de desplazamiento
(ScrollBar) son las siguientes:
Name: Para asignar un nombre al control
ControlSource: Identifica la direccin de una celda de una hoja o de un campo
ligado al control. El valor predeterminado es una cadena de texto vaca. Un
ControlSource solo puede estar ligado a un control.
LargeChange: Para establecer el cambio grande, cuando se presiona en la zona
de la barra de desplazamiento ubicada entre los dos botones.
SmallChange: Para establecer el cambio pequeo, cuando se presiona en los
dos botones laterales de la barra de desplazamiento.
Max: Valor mximo de la barra de desplazamiento.
www.fullengineeringbook.net
Min: Valor mnimo de la barra de desplazamiento.
Orientation: Determina la orientacin que tendr la barra de desplazamiento,
tiene tres valores: Auto, -1, fmOrientationAuto; Vertical, 0,
fmOrientationVertical; Horizontal, 1, fmOrientationHorizontal. La propiedad
Orientation tiene el valor predeterminado en Auto, por lo que la barra de
desplazamiento tendr una orientacin dependiendo de las dimensiones de alto
y ancho del control-
Botn de Nmero (Spin Button, spn)
El control de Botn de nmero (Spin Button) funciona de manera similar que
el control de barra de desplazamiento (ScrollBar), la diferencia es que el
control de botn de nmero solo tiene dos botones, uno para disminuir y otra
para incrementar en una cantidad establecida con la propiedad SmallChange,
la cual tiene un valor predeterminado de 1. No muestra una barra entre los
botones, por lo que no tiene la propiedad LargeChange.
Tiene la propiedad Name para cambiar el nombre del control, pero no tiene
propiedad caption. Tiene las propiedades generales que son utilizadas para
dar formato al control.
La propiedad ControlSource funciona de igual manera que para el control
barra de desplazamiento.
El valor del control se puede asociar a una caja de texto o a una etiqueta para
que se actualice utilizando un procedimiento asociado a un evento Change del
control SpinButton. En el siguiente procedimiento asociado a un evento
Change del control spnVal1 se liga el valor del control txtVal1 al valor del
control spnVal1.
Private Sub spnVal1_Change()
Me.txtVal1.Value = Me.spnVal1.Value
End Sub

www.fullengineeringbook.net

Se pueden establecer los valores mnimo y mximo utilizando las propiedades


Min y Max, las cuales pueden ser cambiadas en la ventana de propiedades o
mediante cdigo en un procedimiento en VBA.
Captulo 6 - Control: Multi Pginas, Imagen y RefEdit
Control Multi Pginas (Multipage, mpg)
Cuando el formulario tiene muchos controles, puede dar la sensacin de estar
sobrecargada, creando una muy mala impresin en el usuario. Si es necesario
incluir una gran cantidad de controles, lo recomendable es agrupar los
controles por el tipo de informacin que van a recoger, y dividirlos en
diferentes pginas, de forma que en cada pgina aparezcan pocos controles
para manejar informacin relacionada. La idea es no abrumar al usuario con
una forma con demasiados controles en ella. Para aadir un control multi
pgina hacer clic en la caja de controles sobre el icono del control y se coloca
dentro de la forma.
Cuando se crea un control multipgina se crean dos pginas de forma
predeterminada, si se desea crear una nueva pgina, eliminar una pgina,

www.fullengineeringbook.net
cambiar de nombre o mover, se puede hacer clic sobre el botn derecho del
ratn y aparecer un men contextual con estas opciones.

Cada pgina acta como si fuese una forma individual, tiene su propia ventana
de propiedades para cambiar las propiedades de cada pgina. Entre las
propiedades estn:
Name, para dar nombre a cada pgina.
Caption, para colocar la etiqueta en la pestaa que identifica la pgina.
En cada pgina pueden colocarse los controles que se requieran y su
programacin es como si se tratase de una forma independiente.
Control Imagen (Image, img)
Este control se utiliza para insertar una imagen en el formulario. La imagen
puede ser insertada utilizando la propiedad Picture en la ventana de
propiedades. Las dimensiones de la caja son en pixeles de ancho y alto. La
imagen puede ser un logo, o algn motivo alusivo al formulario para hacerlo
mas interesante.
El control imagen (Image) tiene como todos los controles una propiedad
Name, para asignarle un nombre y las propiedades generales para dar formato
al control como:
BackColor, BackStyle, BorderColor, BorderStyle, Height, Left, Top, Width.
Y tiene unas propiedades para controlar la imagen:
www.fullengineeringbook.net
Picture, para seleccionar el archivo de la imagen que se desea mostrar. Abre
una caja de dialogo para seleccionar el archivo a mostrar en la caja de
imagen.
PictureAlignment, Para alinear la imagen dentro de la caja. Tiene 5 valores:
- fmPictureAlignmentTopLeft, 0
- fmPictureAlignmentTopRight, 1
- fmPictureAlignmentCenter, 2
- fmPictureAlignmentBottomLeft, 3
- fmPictureAlignmentBottomRight, 4
Por defecto la imagen est alineada en el centro.
PictureSizeMode, Para determinar la forma en que se mostrara la imagen, en
caso de que el tamao sea diferente al tamao de la caja. Presenta 3 valores:
- fmPictureSizeModeClip, 0. Si la imagen es de mayor tamao que la caja
creada solo aparece una porcin de ella (clip)
- fmPictureSizeModeStretch, 1. La imagen ocupa toda la caja, pero aparece
deformada, estirada para lograr abarcar todo el marco (no se conserva la
relacin de aspecto)
- fmPictureSizeModeZoom, 3. La imagen ocupa todo el marco, pero mantiene
la relacin de aspecto.
-PictureTiling, Si la imagen est en el modo de fmPictureSizeModeZoom y no
completa todo el cuadro, se aaden porciones de la imagen para ocupar todo
el cuadro si el valor de la propiedad PictureTiling es True.
SpecialEffect, para crear un efecto especial en la imagen que se inserta en el
cuadro de imagen. Tiene 5 valores:
- fmSpecialEffectFlat, 0.
- fmSpecialEffectRaised, 1.
- fmSpecialEffectSunken, 2.
- fmSpecialEffectEtched, 3.
- fmSpecialEffectBump, 6.
www.fullengineeringbook.net
Control RefEdit (RefEdit,rfe)
Este control no aparece de forma predeterminada en la caja de herramientas,
para aadirlo hay que ir al men en VBE y en la pestaa de herramientas
seleccionar
Al hacer clic aparece una caja de dialogo, con un listado bastante grande de
controles de aplicaciones de Microsoft y de otros fabricantes, se localiza el
control que deseamos incluir en la caja de controles y se marca. Aparecer en
la caja de herramientas.
El control RefEdit permite crear una caja para recoger la direccin de un
rango en una hoja. La direccin ser recogida en la caja creada al marcar el
rango sobre la hoja. Tambin se puede ingresar la direccin directamente,
escribiendola.
A continuacin, se muestra una forma donde se incluye un control RefEdit, una
caja de texto y un botn de comando. Se va a realizar un procedimiento muy
sencillo que consiste en seleccionar un rango y calcular la suma de los valores
contenidos en el rango.

www.fullengineeringbook.net
Se program el botn de comando con un procedimiento asociado al evento
Click. Para usar la cadena de texto que representa el rango se est creando un
objeto Range de nombre miRango y se est haciendo igual a
Range(rfeRango1.Text), donde rfeRango1 es el nombre del control RefEdit y
Text es una propiedad que devuelve un valor tipo String. La funcin suma se
est introduciendo con la propiedad WorksheetFunction, la cual permite
utilizar una funcin de Excel.
Private Sub cmdGO_Click()
Dim miRango As Range
Set miRango = Range(rfeRango1.Text)
Me.txtResultado = WorksheetFunction.Sum(miRango)
End Sub

www.fullengineeringbook.net
Captulo 7 - Herramientas de Formato
Los formularios (UserForms) adems de servir como un mtodo de entrada y
salida de datos, constituyen una interfaz grfica, que permiten la creacin de
formas con un diseo agradable a la vista, con elementos que tienen las
dimensiones adecuadas, tienen una apariencia homognea, estn alineados,
muestran separacin proporcional y los elementos que deben ser agrupados se
muestran agrupados, todo con la intencin de facilitar la entrada de datos y
presentacin de resultados.
Para acceder a las herramientas de formato de las formas, hay que seleccionar
la pestaa Formato en la barra de men. Se desplegar un men con las
opciones mostradas en la figura.

www.fullengineeringbook.net

Alinear
Permite alinear los elementos seleccionados dentro de la forma. Para
seleccionar varios elementos hacer Ctrl + clic sobre cada uno de los
elementos, o haciendo clic sobre la forma y arrastrando para dibujar un
rectngulo sobre la forma, los controles que estn dentro del rectngulo sern
seleccionados. Las opciones de alineamiento son:
Alineacin en sentido horizontal: Izquierda, Centro, Derecha
Alineacin en sentido vertical: Superior, Medio, Inferior y
Alineacin a la cuadricula.
Los elementos deben estar seleccionados antes de aplicar el formato de
alineacin.
Igualar Tamao
Permite hacer que las dimensiones de alto, ancho o ambas simultneamente
sean iguales en los elementos seleccionados dentro de la forma. Tiene tres
opciones: igualar alto, igualar ancho e igualar ambos.
Ajustar Tamao al Contenido
Si la caja tiene un texto asociado a la propiedad caption, el tamao de la caja
del control se ajustar automticamente al tamao del texto.
www.fullengineeringbook.net
Ajustar tamao a la Cuadrcula
La caja del control se ajustar para que coincida con la marca de la cuadricula
ms prxima.
Espacio Horizontal
Permite que los elementos seleccionados estn igualmente espaciados en el
sentido horizontal. Tiene 4 opciones: Igualar espaciamiento. Aumentar
espaciamiento, Disminuir espaciamiento y Quitar espaciamiento.
Espacio Vertical
Permite que los elementos seleccionados estn igualmente espaciados en el
sentido vertical. Tiene 4 opciones: Igualar espaciamiento. Aumentar
espaciamiento, Disminuir espaciamiento y Quitar espaciamiento.
Centrar en el Formulario
Permite centrar los elementos seleccionados en el formulario. Tiene dos
opciones: Centrar los elementos en el sentido horizontal y centrar los
elementos en el sentido vertical.
Organizar los Botones
Permite organizar los botones de comando y ubicarlos en una posicin
seleccionada. Tiene dos opciones: Abajo y Derecha.
Agrupar y Desagrupar
Agrupar permite agrupar varios elementos y manejarlos como una sola unidad,
y Desagrupar permite desagrupar un grupo de elementos previamente
agrupados, a fin de manipular cada elemento por separado.
Orden
Cuando existen elementos que se sobreponen, es posible decidir cul elemento
est al frente y cual elemento detrs. Tiene cuatro opciones: Traer al frente,
Enviar hacia atrs, Traer adelante y Enviar al fondo.
Formato Utilizando Propiedades
Adicional a estas herramientas de formato, existen un conjunto de propiedades
que permiten modificar algunas de las caractersticas de formato de los
controles. Estas propiedades pueden cambiarse en la ventana de propiedades
www.fullengineeringbook.net
o utilizando cdigo en procedimientos de VBA. Estas propiedades son:
Height, cambia el alto del control.
Width, cambia el ancho del control.
Top, cambia la posicin del control con respecto al borde superior del
formulario.
Left, cambia la posicin del control con respecto al borde izquierdo del
formulario.
BackColor, cambia el color de fondo del control.
BackStyle, cambia el estilo del fondo.
Font, cambia el tipo de fuente, tamao, resaltado, itlica y otros.
ForeColor, cambia el color de la fuente que utiliza el control para el texto que
se coloca con la propiedad caption, o el texto que es ingresado como dato en
una caja de texto o en una lista o caja combinada.
Captulo 8 - Eventos
Los formularios y sus controles pueden ser programados para que reaccionen
a eventos, es decir que hagan una accin cuando algo ocurre. Un evento puede
ser cambiar el valor de una caja de texto, cambiar el valor de una barra de
desplazamiento, hacer clic en un botn de comando y muchos otros. En los
ejemplos que hemos realizado durante el desarrollo de este libro se han
utilizado eventos, sin embargo, no se haban definido formalmente.
Para especificar la forma en que el formulario o un control reaccionara a un
evento se debe escribir un procedimiento, el cual va contenido dentro de un
contenedor de cdigo, que es generado automticamente en el mdulo del
formulario (UserForm). Para acceder a la ventana de cdigo, y escribir un
procedimiento asociado a un evento se puede hacer doble clic sobre el
formulario o sobre alguno de los controles, o se puede hacer clic en el botn
derecho del ratn para desplegar un men contextual, all seleccionar y hacer
www.fullengineeringbook.net
clic en la opcin ver cdigo.

En la ventana de cdigo se crear un contenedor asociado a un control y a un


evento, si el control es un botn de comando se generar un contenedor para un
evento de hacer clic sobre el botn. Sin embargo, se pueden seleccionar otros
objetos y otros eventos de acuerdo a lo que se requiera manipulando los
mens desplegables que se encuentran en la parte superior de la ventana de
cdigo.
El nombre del procedimiento Sub que se crea es una combinacin del nombre
del formulario o del control, seguido por un guion bajo y el nombre del evento
con un par de parntesis vacos.

En la parte superior izquierda est el men de los controles, incluyendo la


UserForm y en el lado derecho aparece el men de los eventos asociados a los
controles que se seleccionen.
www.fullengineeringbook.net

Por ejemplo, para los botones de comando se tienen los siguientes eventos:
BeforeDropOver
BeforeDropOrPaste
Click
DblClick
Enter
Error
Exit
KeyDown
KeyPress
KeyUp
MouseDown
MouseMove
MouseUp
Siendo el evento click el evento usado con mayor frecuencia para los
controles de botn de comando.
Para los controles de caja de texto (TextBox) y las barras de desplazamiento y
botn de nmero el evento Change es el ms utilizado.
A continuacin, mostraremos los procedimientos asociados a los eventos para
www.fullengineeringbook.net
los controles caja de texto y botn de comando del formulario de ejemplo.
Dim A As Double
Dim B As Double
Dim C As Double
###
Private Sub cmdSumar_Click()
C = A+ B
Me.txtC = C
End Sub
###
Private Sub txtA_Change()
A = Val(Me.txtA.Text)
End Sub
###
Private Sub txtB_Change()
B = Val(Me.txtB.Text)
End Sub

www.fullengineeringbook.net
Captulo 9 - Interaccin Entre Formularios, VBA y
Hojas de Excel
Los formularios constituyen una de las opciones para el intercambio de
informacin con los procedimientos en VBA y con las hojas de Excel. En los
formularios se tienen varios controles que recogen informacin del usuario,
como lo son las cajas de texto, cuadros de listas, cajas combinadas, casillas
de verificacin, botones de opcin, barras de desplazamiento, botones de
nmero y otros.
Interaccin Entre el Formulario y VBA
Los valores que son recogidos en los controles pueden ser asignados a
variables dentro de VBA, y ser utilizados en procedimientos. Existen
procedimientos de lectura, donde los valores de un control son asignados a
una variable y existen procedimiento de escritura donde los resultados del
www.fullengineeringbook.net
procedimiento son enviados de vuelta al formulario, a un control que puede
ser una caja de texto, una etiqueta o un cuadro de lista.

El intercambio de informacin puede realizarse sin necesidad de incluir las


hojas de Excel.
Procedimiento de Lectura
Lee un valor del formulario (UserForm) y lo incorpora a un procedimiento.
Este tipo de declaracin tiene la siguiente sintaxis:
Variable = UserFormName.ControlName.Text
Variable = UserFormName.ControlName.Value
Estas declaraciones pueden incluirse en eventos Change o en eventos Click. A
continuacin, un ejemplo de un procedimiento que utiliza un evento Change
para recoger el valor de una caja de texto (TextBox) y asignarlo a una
variable.
Private Sub txtValA_Change()
A = Val(frmEjemplo2.txtValA.Value)
End Sub
Procedimiento de Escritura
Una vez que se ejecuta el procedimiento los resultados pueden ser devueltos
al formulario utilizando declaraciones de escritura, las cuales tienen la
siguiente sintaxis:
UserFormName.ControlName.Value = Expresin
UserFormName.ControlName.Text = Expresin
Se puede utilizar una etiqueta para devolver un valor al formulario:

www.fullengineeringbook.net
UserFormName.LabelControlName.Caption = Expresin
Tambin se puede utilizar un control de Lista, utilizando el mtodo AddItem.
UserFormName.ListBoxName.AddItem Expresion
Donde expresin puede ser una variable que almacena el valor de un clculo o
una expresin aritmtica propiamente dicha que es ejecutada dentro de un
procedimiento asociado a un evento como hacer clic en un botn de comando
o al evento Change de algn control, como una caja de texto. A continuacin,
un procedimiento para un evento Click de un botn de comando, que realiza
una operacin aritmtica y devuelve el resultado a una caja de texto.
Private Sub cmdMultiplicar_Click()
C = A*B
frmEjemplo2.txtValC.Value = C
End Sub
Interaccin Entre el Formulario y la Hoja
Propiedad ControlSource
La propiedad ControlSource permite enlazar el valor de un control con una
celda de la hoja, el enlace es en ambas direcciones. Los controles que tienen
esta propiedad son:
Caja de Texto (TextBox)
Lista (ListBox)
Caja Combinada (ComboBox)
Casilla de Verificacin (CheckBox)
Botn de Opcin (Option Button)
Botn de Alternar (Toggle Button)
Barra de Desplazamiento (ScrollBar)
Botn de Nmero (Spin Button)
Esta propiedad puede ser cambiada en la ventana de propiedades o utilizando
un procedimiento en VBA.

www.fullengineeringbook.net
La direccin se coloca con la siguiente sintaxis: nombre de la hoja seguido de
un signo de admiracin y la direccin de la celda: Hoja1!A1. Si el nombre de
la hoja tiene espacios o caracteres especiales hay que colocar el nombre de la
hoja entre comillas simples, 'mi hoja'!A1.
Propiedad RowSource
RowSource es una propiedad de los controles Lista (ListBox) y Caja
Combinada (ComboBox), que permite asociar un rango de una hoja con los
elementos de una Lista o de una caja combinada.
La referencia al rango tiene la siguiente sintaxis, nombre de la hoja seguido de
signo de admiracin (!) y el rango en formato A1, ejemplo: Hoja1!A2:A8. Si
el nombre tiene espacios vacos debe encerrarse entre comillas simples,
ejemplo: 'mi hoja'!A2:A8.
Si la Lista o la Caja Combinada tiene mltiples columnas hay que establecer
el nmero de columnas con la propiedad ColumnCount, para que las columnas
aparezcan en el cuadro de Lista o Caja Combinada creado.
La propiedad RowSource y ColumnCount pueden ser cambiadas en la ventana
de propiedades o mediante cdigo en un procedimiento en VBA.
Utilizando cdigo de VBA para Enlazar Formulario y
Hoja de Excel
Se pueden utilizar declaraciones de lectura y escritura para leer los valores
desde un formulario y escribirlos en una hoja.
Declaraciones de Lectura
Se pueden leer los valores almacenados en los controles y asignarlos a una
variable. La sintaxis es la siguiente:
Variable = UserFormName.ControlName.Text
Variable = UserFormName.ControlName.Value
Ejemplo:
www.fullengineeringbook.net
ValorA = UserForm1.txtValor.Value
Asigna a la variable ValorA el contenido del control Caja de Texto de nombre
txtValor.
Declaraciones de Escritura
Se pueden escribir valores almacenados en variables, o en las propiedades
Text o Value de los controles a rangos de celdas de la hoja.
Referencia del Rango = Variable
Referencia del Rango = UserFormName.ControlName.Text
Referencia del Rango = UserFormName.ControlName.Value
Ejemplo:
Worksheets("Hoja1").Range("A1") = Me.txtA.Value
Coloca el valor del control Caja de texto de nombre txtA del formulario activo
(Me) en la celda A1 de la Hoja1 del libro activo.
Utilizando El Formulario de Forma Independiente
Los formularios, a pesar de que son parte de la aplicacin Excel, pueden ser
diseados y programados para ser "seudo independientes". Decimos seudo
independientes porque no se utilizan las hojas de clculo de Excel para
almacenar o intercambiar informacin con el formulario, pero no son
totalmente independientes, porque tienen que ser ejecutados desde la
aplicacin.
Todo el proceso de entrada de datos, procesamiento y salida de resultados se
realiza entre los formularios y VBA. La entrada y salida de datos en el
formulario y VBA para programar la lectura, procesamientos, clculos y
escritura de vuelta al formulario.
Para dar la impresin de que el formulario es una aplicacin independiente se
puede programar para que el objeto Application (Excel) tenga la propiedad
Visible igual a False, una vez que la forma se muestre. Hay que recordar que
debe tenerse un botn dentro del formulario que regrese la visibilidad de
Excel, porque si no pasaremos un momento de angustia tratando de ver como
recuperamos Excel. En caso de que eso suceda tendramos que recurrir al
administrador de tareas, y desde all cerrar la sesin de Excel. Cuando Excel

www.fullengineeringbook.net
se abre por defecto la propiedad Visible est en True, entonces las hojas de
Excel son visibles. A continuacin, los procedimientos para hacer que un
formulario parezca como una aplicacin independiente.
1.- Crear el formulario de la forma normal, con los controles que se requieran.
2.- Crear un botn en una hoja y programarlo para ocultar Excel y abrir el
formulario.
Public Sub HacerInvisibleExcel()
Application.Visible = False
frmList.Show
End Sub
Es importante el orden de las declaraciones. Primero hay que ocultar la
aplicacin y luego mostrar el formulario.
3.- Cuando se cree el formulario crear un botn, que al ocultar el formulario
haga que la propiedad Visible de la Application regrese a su valor True.
Private Sub cmdCerrar_Click()
Application.Visible = True
Me.Hide
End Sub
En caso de que se desee cerrar con la X en la parte superior derecha de la
barra de ttulo es conveniente programar el evento UserForm_QueryClose
para que tambin devuelva la visibilidad de Excel.
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Application.Visible = True
Me.Hide
End Sub

www.fullengineeringbook.net
Resumen
En este libro hemos presentado una visin general de los formularios
(UserForms), y los controles estndar que se presentan en la caja de
herramientas, revisando el uso de los mismos.
Hemos revisado la forma de disear y construir los formularios, las
herramientas para dar formato, las propiedades ms importantes de los
controles, la forma en que se cambian los valores de estas propiedades
utilizando la ventana de propiedades o mediante cdigo en procedimientos en
VBA.
Se ha revisado la forma de programar los formularios y sus controles
utilizando los diferentes eventos que proporcionan los controles.
Se ha visto la forma en que interactan los formularios con VBA y con las
hojas de Excel. La forma en que pueden utilizarse los Formularios como si

www.fullengineeringbook.net
estos fuesen una seudo aplicacin.
A lo largo de los 9 captulos de este libro se ha tratado de mostrar el lado
practico de los conceptos y se han aadido una gran cantidad de figuras y
ejemplos para ayudar a la comprensin de los mismos.
Sinceramente espero que este libro haya sido de utilidad para ti, y de ser as
por favor recomindalo a tus amigos.
Acerca del Autor
Luis Brito es un consultor de Ingeniera. Ha tenido inters en VBA para Excel
por ms de 15 aos y ha recopilado durante este tiempo una gran cantidad de
notas de diferentes fuentes que han servido para la preparacin de este libro.
Ha escrito una gran cantidad de artculos sobre el uso de VBA Excel y ha
escrito varios libros de la serie VBA Excel, del cual este es la tercera entrega.

www.fullengineeringbook.net