Vba Excel Userforms Luis Brito
Vba Excel Userforms Luis Brito
UserForms
By
Luis E Brito
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
except for
for the
the use of brief quotation
quotationss in a book review.
revie w.
Tabla de Contenidos
Otros
Otros Libros Pu
Publica
blicados
dos por Luis E Brito
Introducción
Capítulo 1 - UserForms
Capítulo 2 - Controles:
Controles: Cajas de Texto, Etiquetas y Botones de Comando
Capítulo 3 - Controles: Casilla de Verificación, Botón de Opción, Botón de
Alternar y Marcos
Capítulo 4 - Controles: Lista y Cuadr o Combinado
Capítulo 5 - Con
Controles:
troles: Barra de Desplazam
Desplazamient
iento,
o, Botón
Botón de Número
Capítulo 6 - Control: Multi Páginas, Imagen y RefEdit
Capítulo 7 - Herramientas de Formato
Capítulo 8 - Eventos
Capítulo 9 - Interacción Entre
Entre Formularios, VBA y Hojas de Excel
Resumen
Acerca del
d el Au
Autor
tor
Otros Libros Publicados por Luis E Brito
Amazon US
https://www.amazon.com/dp/B01M8K5120
Amazon México
https://www.amazon.com.mx/dp/B01M8K5120
Amazon US
https://www.amazon.com/dp/B01M674D09
Amazon México
https://www.amazon.com.mx/dp/B01M674D09
Introducción
Los formularios (UserForms) y sus controles constituyen una de las
herramientas que proporciona VBA para el intercambio de información:
Entrada de datos y salida de resultados. Proporcionan la facilidad de diseñar y
crear formularios
formularios que son agradable a la vista,
vi sta, y que
que enfocan
enfocan la visión
vis ión del
usuario en los datos que son requeridos para la ejecución de los
procedim
procedi mientos.
ientos.
La mayoría
mayoría de los
l os usuarios no conocen esta utilidad,
utilidad, a pesar
pes ar de que son fácil
fáciles
es
de diseñar y que proporcionan una interfaz gráfica agradable que mejora la
experiencia del usuario a la hora de ingresar datos a la aplicación. Pueden ser
utili
utilizados
zados como
como forma
forma de entrada
entrada para incorporar datos a una base de datos, o
simplement
simplementee para recoger datos que serán utili
utilizados
zados para reali
r ealizar
zar cálculos y
devolver resultados como si fuesen
fuesen una
una aplicac
ap licación
ión independiente.
independiente.
En este libro trataremos sobre los formularios, los controles, sus propiedades
y métodos, como diseñar y construir un formulario, como programar los
controles
controles,, asociándolos
asoci ándolos a eventos
eventos para
par a que ejecu
ejec uten los procedim
proced imient
ientos
os que se
requieran.
Finalmente les expreso, a pesar que el material es extenso, que existe una gran
cantidad de propiedades y métodos, que existe una gran cantidad de eventos,
podemos
podemos sacar provecho de los formularios
formularios (UserForms)
(UserForms) si nos enfocam
enfocamosos en
algunos
algunos elem
ele mentos que son
so n impor
important
tantes.
es. A medi
medida
da que
q ue vayamos
vayamos avanzando
avanzando en
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,
propied ades, métodos
métodos y la sintaxis.
sintaxis.
Sin más, 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.
Capítulo 1 - UserForms
Mostrando
Mostrando y Ocultando los Formularios
Formularios (UserForms)
(Use rForms)
Una vez que los formularios han sido diseñados, construidos y programados
deben ser llamados para ser mostrados y utilizados
utilizados y posteriorm
posteri orment
entee ocult
oc ultados
ados
o cerrados.
cer rados. Esto se log
lo gra utilizando
tilizando los
lo s métodos
métodos Show (m( mostrar), Hide
(ocultar), Load (Cargar) y Unload
Unload (cerrar)
(cer rar)..
Mostrando el
e l Formul
Formulario
ario (Use
(Us e rForm
rForm))
Para mostrar un formulario, se necesita crear un procedimiento que utilice el
método Show del objeto UserFormName. La sintaxis de este método es:
UserFormNam
ser FormName.Show
e.Show [modal]
Esta simple
simple línea de código colocada
coloca da dentro de un procedimient
procedimiento
o permitirá
mostrar un formulario en pantalla. Este procedimiento debe ser incluido en un
módulo estándar de VBA y no en el módulo especial de código 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
Modal o Modeless
Modele ss
El parám
pará metro modal
modal es opcional,
opc ional, y es de tipo Boolean, True,
True, 1, (vbModal) es
el valor
va lor predeterm
p redeterminado.
inado. False, 0, (vbModeless).
( vbModeless). Se puede utilizar
utilizar True
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 acción en la aplicación hasta que se ejecute el formulario y se
cierre.
Si el parámetro
parámetro modal está en vbModeles,
vbModeles, valor 0 o False,
Fal se, se pueden hacer
manipulaci
anipulaciones
ones a las
la s celdas
cel das de la hoja. En el siguient
siguientee procedimien
pro cedimiento
to se
muestra la forma frmList y se utiliza modal igual a 0, lo que permite que se
puedan hacer manipu
manipulacio
lacionnes a las celdas de la hoja.
Sub Botón1_Haga_clic_en()
frmList.Show 0
End Sub
Ocul
Oc ulta
tand
ndo
o e l Formul
Formulario
ario (Use
( UserF
rForm
orm))
Para ocultar un formulario se utiliza el método Hide del objeto
UserFormName. El formulario no es visible, pero permanece en memoria. La
sintaxis de este método es:
UserFormName.Hide
Por lo general esta instrucción es incluida dentro de un botón de comando
ubicado en el mismo formulario. Este procedimiento se activa por lo general
utilizando el evento Click del control botón de comando. Por lo general se
puede utilizar
utilizar una
una etiqueta
etiqueta descriptiva
descri ptiva para iden
ide ntificar el botón, como
como
cancelar, cerrar o cualquier nombre
nombre asociado
a sociado con ocultar.
ocultar.
La caja de texto muestra en las esquinas y en la parte central de cada lado unos
pequeños cuadrados
cuadrados de color
c olor blanco,
bl anco, que
que son unas
unas agarrade
agarraderas
ras (handles) que
permiten
permiten redimensionar
redimensionar la caja.
caj a. Cuando
Cuando se coloca el cursor sobre
s obre las
agarraderas de las esquinas
esquinas aparecerá
apar ecerá una
una flecha en diagonal
diagonal de doble punta,
punta,
haciendo clic y manteniendo presionado el botón del ratón y moviéndola
permitirá
permitirá cambiar la altu
al tura
ra y anchu
anchurara de la caja
c aja en form
formaa simultánea.
simultánea. EnEn 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. Igu
Igual sucede
s ucede con los cuadros que están en los laterales izquierdo
izquierdo y
derecho, al moverlos cambiara el ancho de la caja. En cualquier parte del
borde de la
l a caja aparecer
apa receráá una
una cruz de flechas de doble dirección,
direc ción, al hacer
clic y mantener presionado, cuando presenta esta forma, permitirá moverá la
caja en cualquier dirección, al soltar el botón del ratón se anclará la caja en su
nueva posición.
En la ventana de propiedades se desplegarán las propiedades de la caja de
texto
texto recién
recié n creada. En esta ventana
ventana se mostrarán
mostrarán las
la s propiedades
pro piedades del cont
c ontrol
rol
que se haya seleccionado, si no se encuentra seleccionado ningún control,
mostrará las propiedades de la forma.
Las propiedades
pr opiedades de las
la s cajas
caj as de texto
texto que
que aparecen
apar ecen en la ventana
ventana de
propiedades
propied ades son 42, para esta versión
versi ón de Micros
Microsoft
oft Office
Office (2016). Entre
Entre estas
tenem
tenemosos la
l a propiedad
propi edad Name,
Name, para identificar
identificar al control creado,
cre ado, aquí se ha
utilizado la convención de utilizar el prefijo txt para formar el nombre del
control: txtA.
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,
BackSty
BackStyle,
le, para
pa ra dar
da r estilo
es tilo al fondo.
fondo.
BorderColor:
BorderColor: para dar color a las lín
lí neas del borde de la caja de texto
texto..
BorderStyle: para dar estilo a las líneas del borde.
Font: para cambiar el formato de la fuente, incluye nombre de la fuente,
tamaño,
tamaño, resaltado,
res altado, itálica,
itáli ca, 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, también se puede modificar
moviendo las agarraderas que se encuent
encuentran
ran en los lados superior e inferior
inferior de
la caja
ca ja de texto.
texto.
Width: establecer el ancho de la caja de texto. Se puede cambiar utilizando las
agarraderas que se encuent
encuentran
ran en los bordes laterales.
laterale s.
Top: distancia del borde superior de la forma al borde superior de la caja de
texto.
Left: distancia del borde izquierdo de la forma al borde izquierdo de la caja
de texto.
texto.
Las propiedades
pr opiedades de los controles
controles pueden ser cambiados
cambiados en la ventana
ventana de
propiedades
propied ades o mediante
mediante código
código en un
un procedimient
procedimiento
o escrito
escri to en VBA.
Etiquetas
Etiquetas (Label,
(Labe l, lbl)
Las etiquetas también se incorporan de igual manera en la forma, haciendo clic
sobre el icono
i cono del control etiqueta en la caja
caj a de herramient
herramientas,
as, lu
l uego haciendo
haciendo
clic en un lugar de la hoja y manteniendo el botón del ratón presionado se
mueve para crear el control del tamaño deseado. Al liberar la etiqueta quedará
posicionada
posici onada en la forma.
forma.
Para manipular
manipular el tamaño
tamaño del control
control se procede
pr ocede de igual manera
manera que con las
cajas de texto, el control etiqueta genera una caja con las mismas 8
agarraderas ya descritas
desc ritas para
par a las cajas de texto.
texto. La manipu
manipulaci
lación
ón sigue
sigue el
mismo procedimiento
procedimiento descrito
descri to para las
l as cajas
c ajas de texto.
texto.
Las propiedades
pr opiedades que se muestran
muestran en la ventana
ventana de propiedades
propie dades son 27. Existe
Existe
una
una propiedad
propi edad Name,
Name, y existe la propiedad
pr opiedad Caption que
que se utili
utiliza
za para
introducir
introducir la
l a cadena
cade na de texto
texto que
que aparecerá
apar ecerá en la forma.
forma.
Las propiedades que mencionamos para dar formato al control de caja de texto
son utilizadas con este control también:
Backcolor, BackStyle, BorderColor, BorderStyle, Font, ForeColor, Height,
Width, Top, Left.
En la figura se muestra una forma con dos grupos de opciones, cada grupo está
incluido dentro
dentro de su propio marco, de esta manera
manera la exclusión
exclusión de las
l as
diferentes opciones queda contenida, y no se afectan entre sí. De esta manera
es posible seleccionar una opción en el marco de la izquierda y seleccionar
una
una opción
opci ón en el marco
marco de la
l a derecha.
der echa.
Tiene propiedad
propi edad Name
Name para
par a cambiar el nombre
ombre del
d el cont
c ontrol,
rol, pero no tiene
propiedad
propied ad Caption para colocar
col ocar una
una etiqueta
etiqueta de identificació
identificación n, por lo que se
necesita un control
control etiqueta
etiqueta (label)
(la bel) para colocar una
una ident
id entificación
ificación al control.
control.
Las propiedades
pr opiedades generale
generaless para
par a dar formato
formato también
también aplican
apli can 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, ligándolo a un rango o a un nombre de
rango de una hoja de Excel.
Al colocar
col ocar la referencia en la ventana
ventana de propiedades
pr opiedades autom
automáticam
áticament
entee
aparecerán 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 direcci
di rección
ón del rango
rango siguiendo
siguiendo la sint
s intaxis
axis ya
indicada. Nombre de la hoja seguido del signo de admiración (!) y luego el
rango.
En lugar de utilizar la ventana de propiedades también se puede utilizar en un
procedim
procedi miento
iento con el evento
evento de inicia
inicialización
lización al cargar el formu
formulario.
lari o.
Private Sub UserForm_Initialize()
Me.cbodatos.RowSource = "datos!A3:A8"
End Sub
La referen
re ferencia
cia al rang
r ango
o debe colocarse
colocar se en
e ntre comill
comillas
as dobles
dobl es y sigu
si guee la
l a misma
misma
sintaxis. Nombre de la hoja seguido de signo de admiración (!) y luego el
rango. También se puede utilizar el signo igual dentro de las comillas:
Private Sub UserForm_Initialize()
Me.cbodatos.RowSource = "=datos!A3:A8"
End Sub
Aquí,
Aquí, se
s e aplica
apl ica la propiedad
propied ad RowSource al objeto ComboBox
ComboBox.. Me, sustitu
sustituye
ye
al objeto UserForm
UserForm activo.
Utilizando la Propiedad RowSource con un Nombre de Rango
En lugar de utilizar una referencia a un rango, también se puede utilizar un
nombre de rango. Este nombre de rango puede utilizarse en la ventana de
propiedades
propied ades del cont
c ontrol
rol lista
li sta (ListBox
(ListBox)) o caja com
c ombinada
binada (ComboBox
(ComboBox).
).
El nombre
nombre del
d el rang
r ango
o se escribe
escri be sin
si n colocar comill
comillas.
as. Tam
También
bién se puede
utilizar el nombre de rango en un código de inicialización de la UserForm.
Private Sub UserForm_Initialize()
Me.lstFrutas.RowSource = "Frutas"
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 código que se ejecute con el evento de
inicialización
iniciali zación del UserForm.
Private Sub UserForm_Initialize()
Dim UFila As Double
Worksheets("datos").Select
UFila
Fil a = Range("A"
Range("A" & Rows.Coun
Row s.Count).End(xlU
t).End(xlUp).Row
p).Row
ThisWorkbook.Names.Add "mirango", Range(Range("A3"), Range("A" &
UFila))
Me.lstFrutas.RowSource = "mirango"
End Sub
En este procedim
procedi miento
iento de inicialización,
i nicialización, se verifica
ver ifica la
l a última fila
fila con
inform
información
ación y se alm
al macena este valor
val or en la variable
variab le UFila. Luego
Luego se aplica
apl ica la
propiedad
propied ad Names
Names al objeto
obj eto Workbook
Workbook (ThisWorkbook
(ThisWorkbook), ), para crear
cr ear un objeto
Names,
Names, el cual es una
una colección
colecc ión de objetos tipo Name.
Name. Se aplica
aplic a el método
método
Add para añadir
añ adir un nombre
nombre al rango
rango actualizado
actualizado entre la celda
ce lda de inicio A3,
hasta la última fila con información 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
marcar el rango
rango de celdas que van a constitu
constituir
ir la lista de
d e elem
el ement
entos
os a
incluir con la propiedad RowSource, en el menú insertar, grupo Tablas, se
encuent
encuentra
ra el icono Tabla,
Tabla, al
a l hacer clic
cl ic se
s e activara el "Asisten
"Asis tente"
te" para crear
cr ear una
una
tabla. Seguir las indicaciones para crear la tabla. Esto creará una tabla con el
nombre Tabla1. Cambiar el nombre. Este nombre se añade a el administrador
de nombres de rango, como si fuese un nombre de rango. La ventaja que tiene
la tabla, es que se actualiza dinámicamente, así que cada vez que se incluya o
se borre
bor re una
una línea,
lí nea, el rango
rango se actuali
actualizara.
zara.
Este nom
nombre
bre de tabla que creamos se puede utilizar en la propiedad
propie dad
RowSource en un procedimiento de inicialización del objeto UserForm.
Private Sub UserForm_Initialize()
Me.lstTabl
Me.lstTablaF
aF.RowSo
.RowSource
urce = "Tabl
"TablaF"
aF"
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 estén en la tabla creada.
No fun
funciona
ciona el nombre
nombre de la tabla en
e n la ventan
ventanaa de propiedades.
propi edades. Pero se
puede utilizar
utilizar sin problema en un procedimiento
procedimiento de inicialización,
inicial ización, con el
código mostrado.
Utilizando la Propiedad List y el método AddItem, Añadiendo Elemento
por Elemento
La propiedad List permite agregar elementos a una lista cuando se tienen
múltiples columnas
columnas de datos. La sintax
sintaxis
is de esta propieda
p ropiedad
d es:
Objeto ListBox.List(
istBox.List([pva
[pvargIn
rgIndex],
dex], [pvargColum
[pva rgColumn])
n])
Objeto ComboBox.L
ComboBox.List(
ist([pva
[pvargIn
rgIndex],
dex], [pvargColum
[pva rgColumn])
n])
El primer parámetro es el índice de las filas, el segundo parámetro es el
índice de las columnas.
columnas. Ambos
Ambos in
i nician
icia n en 0 (cero).
Barra de Desplazamiento
De splazamiento (ScrollBar,
(ScrollBar, scr)
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
propied ad SmallChan
SmallChang ge (cambio pequeño).
pequeño). Cuando
Cuando se hace clic en la zonazona de
la barra deslizadora, entre los botones, los cambios se efectúan de acuerdo al
valor de la
l a propiedad
prop iedad LargeChang
argeChangee (cam
(c ambio
bio grande). En la barra
bar ra tiene un
deslizador
desli zador,, que puede ser movido con la ayuda ayuda del ratón haciendo
haciendo clic
cli c y
manteniendo presionado. Los botones y la zona de la barra pueden ser
accionados clic
cl ic a clic,
cli c, o manten
manteniendo
iendo presionado.
presi onado. La
La barra
bar ra de desplazam
despla zamientiento
o
puede colocarse en formaforma horizontal
horizontal o en forma
forma vertical,
vertical , dependiendo
dependiendo de las
dimensiones de la altura y del ancho. Si el ancho es mayor que la altura,
automáticamente 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
máximo, el cual tiene un valor predeterminado de 32767 y Min para establecer
el valor
va lor mínim
mínimo,
o, el cual tiene un
un valor predeterm
pre determinado
inado de 0. Estos valores
val ores se
pueden cambiar
cambiar en la ventana
ventana de propiedades
propi edades o mediante
mediante código en un
procedim
procedi miento
iento en VBA.
VBA.
En la siguiente figura se muestra una forma donde se han creado tres cajas de
texto
texto y dos barras de desplazam
desp lazamient
iento,
o, que controlan
controlan los valores
valore s en las cajas de
texto 1 y 2. La caja de texto 3 muestra el resultado de la multiplicación de los
valores
valore s que contienen
contienen las cajas 1 y 2.
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
procedim
procedi miento.
iento. A continu
continuación,
ación, los procedim
procedi mientos
ientos para los
l os eventos Ch
Change
ange de
las dos barras de desplazamientos.
Private Sub scrbar1_Change()
Me.txtVal1.V
al 1.Val
alue
ue = scrb
sc rbar
ar1.V
1.Val
alue
ue
Me.txtVal
Me.txtVal3.
3.V
Value
al ue = Val(Me
al (Me.txtV
.txtVal
al1.
1.V
Value)
al ue) * Val
Val(Me
(Me.txtV
.txtVal
al2.
2.V
Value)
al ue)
End Sub
###
Private Sub scrBar2_Change()
Me.txtVal2.Value = scrBar2.Value
Me.txtVal
Me.txtVal3.
3.V
Value
al ue = Val(Me
al (Me.txtV
.txtVal
al1.
1.V
Value)
al ue) * Val
Val(Me
(Me.txtV
.txtVal
al2.
2.V
Value)
al ue)
End Sub
Cuando
Cuando se acciona
acci ona cualquiera
cualquiera de las barras de desplazam
despl azamiento
iento se efectúa la
multiplicación 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 números se
utiliza la función Val.
En resumen,
resumen, las propiedades
propieda des más important
importantes
es de las
l as barras
b arras de desplazam
de splazamient
iento
o
(ScrollBar) son las siguientes:
Name:
Name: Para asign
as ignar
ar un nombre
nombre al cont
c ontrol
rol
ControlSource: Identifica la dirección de una celda de una hoja o de un campo
ligado al control.
control. El valor
val or predeterm
pr edeterminado
inado es una
una cadena
cade na de texto
texto vacía. Un
ControlSource
ControlSource solo puede estar ligado
l igado a un control.
control.
LargeChange: Para establecer el cambio grande, cuando se presiona en la zona
de la barra de desplazam
despl azamiento
iento ubicada
ubicada entre
entre los
l os dos botones.
botones.
SmallChan
SmallChange:
ge: Para establecer
e stablecer el cambio
cambio pequeño,
pe queño, cuando
cuando se presiona
pre siona en los
dos botones laterales de la barra de desplazamiento.
Max: Valor máximo de la barra de desplazamiento.
Min: Valor mínimo de la barra de desplazamiento.
Orientation: Determina la orientación que tendrá la barra de desplazamiento,
tiene tres valores: Auto, -1, fmOrientationAuto; Vertical, 0,
fmOrie
fmOrientntationV
ationVerti
ertical
cal;; Horizon
Hori zontal,
tal, 1, fmOrie
fmOrient
ntationHorizontal.
ationHorizontal. La propied
prop iedad
ad
Orientation
Orientation tiene
tiene el valor predeterminado
predeterminado en Auto,
Auto, por lo
l o que la barra de
desplazamiento tendrá una orientación dependiendo de las dimensiones de alto
y ancho del control-
Botón de Número
Núme ro (Spin Button,
Button, spn)
El control de Botón de número (Spin Button) funciona de manera similar que
el control de barra de desplazamiento (ScrollBar), la diferencia es que el
control de botón de número solo tiene dos botones, uno para disminuir y otra
para incrementar
incrementar en una
una cantidad
cantidad establecida
establec ida con la propiedad
propie dad SmallChan
SmallChange,
ge,
la cual tiene un valor predeterminado de 1. No muestra una barra entre los
botones,
botones, por lo
l o que
que no tiene
tiene la propiedad
propie dad LargeCh
LargeChang
ange.
e.
Tiene la propiedad
propied ad Name
Name para
par a cambiar el nombre
nombre del
de l con
co ntrol, pero
per o no tiene
propiedad
propied ad caption. Tiene
Tiene las propiedades
propi edades general
generales
es que son utilizadas para
dar formato al control.
La propiedad ControlSource funciona de igual manera que para el control
barra de desplazamiento.
desplazamiento.
El valor del control se puede asociar a una
una caja
caj a de texto
texto o a una etiqueta
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
Cada página actúa como si fuese una forma individual, tiene su propia ventana
de propiedades para cambiar las propiedades de cada página. Entre las
propiedades
propied ades están:
Name,
Name, para dar nombre
ombre a cada págin
pá gina.
a.
Caption,
Caption, para colocar la etiqueta en la pestaña que identifica
identifica la
l a página.
En cada página pueden
pueden colocarse
colocars e los controles
controles que se requieran y su
programación
programación es como
como si se tratase de una
una forma
forma independient
independiente.
e.
Control
Control RefEdit (RefEdit,rfe)
(Ref Edit,rfe)
Este control
control no aparece de forma
forma predeterm
pr edeterminada
inada en la caja de herramientas,
herramientas,
para añadirlo
añadi rlo hay que ir al menú
menú en VBE y en la pestaña de herramien
herramientas
tas
seleccionar
Al hacer clic
cli c aparece
apar ece una
una caja
caj a de dialogo,
d ialogo, con un
un listado bastante
bastante grande
grande de
controles de aplicaciones de Microsoft y de otros fabricantes, se localiza el
control
control que deseamos
deseamos incluir en la caja
ca ja de controles
controles y se marca.
marca. Aparecerá
Apare cerá en
en
la caja
ca ja de herramientas.
herramientas.
El control
control RefEdit
RefEdit permite
permite crear
crea r una
una caja
caj a para recoger la dirección
direc ción de un
rango
rango en una
una hoja.
hoja. La dirección
direcc ión será recogida
r ecogida en la caja
caj a creada
crea da al marcar el
rango sobre la hoja. También se puede ingresar la dirección directamente,
escribiendola.
A continuación, se muestra una forma donde se incluye un control RefEdit, una
caja de texto y un botón de comando. Se va a realizar un procedimiento muy
sencillo que consiste
consiste en seleccionar
sele ccionar un rango
rango y calcular la
l a suma
suma de los
l os valores
val ores
contenidos en el rango.
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 event
e vento
o click
cl ick el evento
evento usado con mayor
mayor frecuencia
frecuencia para los
controles de botón de comando.
Para los
l os con
co ntroles de caja
caj a de texto
texto (Text
(TextBox
Box)) y las barras de desplazam
des plazamiento
iento y
botón de número
número el event
e ventoo Chang
Changee es el más utilizado.
utilizado.
A continuación, mostraremos los procedimientos asociados a los eventos para
los controles caja de texto y botón 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
Capítulo 9 - Interacción Entre Formularios, VBA y
Hojas de Excel
Los formularios constituyen una de las opciones para el intercambio de
información con los procedimientos en VBA y con las hojas de Excel. En los
formularios se tienen varios controles que recogen información del usuario,
como lo son las cajas de texto, cuadros de listas, cajas combinadas, casillas
de verificación,
veri ficación, botones
botones de opción, barras de desplazam
despl azamient
iento,
o, botones
botones de
número
número y otros.
Interacción Entre
Entre el
e l Formulario y VBA
Los valores
val ores qu
q ue son recogidos en los controles
controles pueden ser asign
a signados
ados a
variables dentro de VBA, y ser utilizados en procedimientos. Existen
procedim
procedi mientos
ientos de lectura, donde
donde los valores
val ores de un control
control son
so n asignados
asignados a
una
una variable
var iable y existen
existen procedimiento
procedimiento de escritu
escr itura
ra donde los
l os resultados
r esultados del
procedim
procedi miento
iento son enviados
enviados de vu
v uelta al formulario,
formulario, a un control
control que puede
puede
ser una caja de texto, una etiqueta o un cuadro de lista.
El intercambio
intercambio de inform
información
ación puede realizarse
reali zarse sin necesidad de incluir las
hojas de Excel.
Procedimiento
Procedimiento de Le
Lectura
ctura
Lee un valor del formulario (UserForm) y lo incorpora a un procedimiento.
Este tipo de declar
d eclaración
ación tiene la sigu
si guient
ientee sint
si ntaxis:
axis:
Variable = UserFormName.ControlName.Text
Variable = UserFormName.ControlName.Value
Estas declaraciones pueden incluirse en eventos Change o en eventos Click. A
continuaci
continuación,
ón, un ejemplo de
d e un procedi
pro cedimmiento que utiliza
utili za un evento Change
Change
para recoger
re coger el valor de una caja de texto
texto (Text
(TextBox
Box)) y asignarlo
asignarlo a una
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
formulario utilizando
utilizando declaraci
decl araciones
ones de escritu
escr itura,
ra, las
l as cuales tienen
tienen la
siguiente sintaxis:
UserFormName.ControlName.Value = Expresión
UserFormName.ControlName.Text = Expresión
Se puede utilizar una
una etiqueta para devolver un valor al formu
formulario:
lari o:
UserFormNam
ser FormName.LabelControlName.Caption
e.LabelControlName.Caption = Expresió
Expre sión
n
Tambié
ambiénn se puede
p uede utilizar
utili zar un control
control de Lista,
is ta, utilizando el
e l método AddItem.
AddItem.
UserFormName.ListBoxName.AddItem Expresion
Donde
Donde expresión puede ser una variable
variabl e que almacena
almacena el valor de un cálculo o
una expresión aritmética propiamente dicha que es ejecutada dentro de un
procedim
procedi miento
iento asociado
asocia do a un evento
evento como
como hacer
hacer clic
cl ic en un
un botón
botón de comando
comando
o al evento Change de algún control, como una caja de texto. A continuación,
un procedimiento para un evento Click de un botón de comando, que realiza
una operación aritmética y devuelve el resultado a una caja de texto.
Private Sub
Sub cmdMu
cmdMultiplic
ltiplicar_Clic
ar_Click
k()
C=A*B
frmEjemplo2.txtValC.Value = C
End Sub
Interacción Entre
Entre el
e l Formulario y la Hoja
Propie
Propie dad ControlSource
La propiedad ControlSource permite enlazar el valor de un control con una
celda de la hoja, el enlace es en
e n ambas
ambas direcci
di recciones.
ones. Los
Los controles que tienen
esta propiedad son:
Caja de Texto (TextBox)
Lista (ListBox)
Caja Combinada
Combinada (ComboBox)
(ComboBox)
Casilla de Verificación (CheckBox)
Botón de Opción (Option Button)
Botón de Alternar (Toggle Button)
Barra de Desplazamiento
Desplazamiento (ScrollBar)
Botón de Número (Spin Button)
Esta propiedad puede ser cam
ca mbiada en la ventana
ventana de propiedades
propie dades o utilizando
tilizando
un procedimiento en VBA.
La direcci
di rección
ón se coloca
col oca con la siguient
siguientee sint
si ntaxis:
axis: nombre
nombre de la
l a hoja seguido de
un signo
signo de adm
ad miración
iraci ón y la direcci
di rección
ón de la celda:
cel da: Hoja1!A
Hoja1 !A1.
1. Si el nombre
nombre de
la hoja tiene espacios o caracteres especiales hay que colocar el nombre de la
hoja entre comillas simples, 'mi hoja'!A1.
Propie
Propie dad RowSource
RowSource
RowSource es una
una propiedad
pr opiedad de los
l os controles Lista (ListBox)
(ListBox) y Caja
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 admiración (!) y el rango en formato A1, ejemplo: Hoja1!A2:A8. Si
el nombre tiene espacios vacíos debe encerrarse entre comillas simples,
ejemplo: 'mi
'mi hoja'!A2:A8.
hoja'!A2:A8.
Si la Lista o la Caja Combinada tiene múltiples columnas hay que establecer
el número de columnas con la propiedad ColumnCount, para que las columnas
aparezcan en el cuadro de Lista o Caja Combinada
Combinada creado.
crea do.
La propiedad RowSource y ColumnCount pueden ser cambiadas en la ventana
de propiedades o mediante código en un procedimiento en VBA.
Utilizando
Utilizando El Formulario de Forma Independient
Indepe ndientee
Los formularios,
formularios, a pesar de que son parte de la aplicación
aplic ación Excel,
Excel, pueden ser
diseñados
diseñad os y programados
programados para
pa ra ser
s er "seudo independientes".
independientes". Decimos
Decimos seudo
se udo
independient
independientes
es porque
por que no
no se utili
utilizan
zan las hojas de cálculo
cá lculo de Excel
Excel para
almacenar o intercambiar información con el formulario, pero no son
totalmente independientes, porque tienen que ser ejecutados desde la
aplicación.
Todo el proceso de entrada
entrada de datos, procesam
proc esamient
iento
o y salida de result
res ultados
ados se
realiza entre los formularios y VBA. La entrada y salida de datos en el
formulario y VBA para programar la lectura, procesamientos, cálculos y
escritu
escri tura
ra de vuelta
vuelta al formu
formulario.
lari o.
Para dar la im
i mpresión
presi ón de que el formulario
formulario es e s una
una aplicaci
apl icación
ón independiente
independiente se
puede program
programarar para qu
q ue el objeto
obj eto Application (Excel) tenga
tenga la propiedad
Visible igual a False, una vez que la forma se muestre. Hay que recordar que
debe tenerse un botón dentro
dentro del formulario
formulario que regrese la l a visibil
vis ibilidad
idad de
Excel, porque si no pasaremos un momento de angustia tratando de ver como
recuperamos
recuperamos Excel. En caso de que eso suceda tendríamos
tendríamos que recurrir
recurri r al
administrador de tareas, y desde allí cerrar la sesión de Excel. Cuando Excel
se abre
abr e por defecto la propiedad
propi edad Visi
Visible
ble está
es tá en True,
True, enton
entonces
ces las
l as hojas de
Excel son visibles. A continuación, los procedimientos para hacer que un
formulario parezca como una aplicación independiente.
1.- Crear el formulario
formulario de la forma
forma normal,
normal, con
c on los controles que se requieran.
2.- Crear un botón en una hoja y programarlo para ocultar Excel y abrir el
formulario.
Public
Public Sub
Sub HacerIn
Hacer Invisi
visibleExcel()
bleExcel()
Application.Visi
Application.Visible
ble = False
frmList.Show
End Sub
Es important
importantee el orden de las
l as declara
de claraciones.
ciones. Primero hay que ocultar
ocultar la
la
aplicación y luego mostrar el formulario.
3.- Cuando se cree el formulario crear un botón, que al ocultar el formulario
haga
haga que la propiedad
pr opiedad Visible
isi ble de la Application
Appli cation regrese
regrese a su valor True.
Private Sub cmdCerrar
cmdCerrar_Click()
_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 título
título es conveniente
conveniente program
programar ar el event
e vento
o UserForm_Q
UserForm_Query
ueryClose
Close
para que también
también devuelva
devuelva la
l a visibili
visi bilidad
dad de Excel.
Excel.
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Application.Visible = True
Me.Hide
End Sub
Resumen
En este libro hemos presentado una visión general de los formularios
(UserForms),
(UserForms), y los controles están
e stándar
dar que se present
pres entan
an en la caja de
herramientas, revisando el uso de los mismos.
Hemos
Hemos revisado
re visado la forma
forma de diseñar
d iseñar y constru
construir
ir los formulari
formularios,
os, las
la s
herramient
herramientasas para
pa ra dar
da r formato,
formato, las propiedades
propieda des más important
importantes
es de los
controles, la forma en que se cambian los valores de estas propiedades
utilizando la ventana de propiedades o mediante código en procedimientos en
VBA.
Se ha revisado
revis ado la
l a forma
forma de programar
programar los
l os formu
formularios
lari os y sus controles
controles
utili
utilizan
zando
do los
l os diferen
di ferentes
tes eventos que proporcionan
proporci onan los controles
controles..
Se ha visto la forma en que interactúan los formularios con VBA y con las
hojas de Excel. La forma en que pueden utilizarse los Formularios como si
estos fuesen una seudo aplicación.
A lo largo de los 9 capítulos de este libro se ha tratado de mostrar el lado
practico de los
l os conceptos y se han añadido una
una gran cantidad
cantidad de figuras
figuras y
ejemplos para ayudar
ayudar a la com
c omprensión
prensión de los mismos.
Sincerament
Sinceramentee espero
esper o que este libro
libr o haya
haya sido
si do de utilidad para ti, y de ser
se r así
por favor recomiéndalo
recomiéndalo a tus amigos.
amigos.
Acerca del Autor
Luis Brito es un consultor de Ingeniería. Ha tenido interés en VBA para Excel
por más
más de 15 años y haha recopilado
recopi lado durante
durante este tiempo
tiempo una
una gran cantidad
cantidad de
notas
notas de diferentes
diferentes fuentes
fuentes que han
han servido para la
l a preparaci
prepa ración
ón de este libro.
libr o.
Ha escrito una gran cantidad de artículos sobre el uso de VBA Excel y ha
escrito varios libros de la serie VBA Excel, del cual este es la tercera entrega.