Está en la página 1de 31

UserForms

Un cuadro de dilogo personalizado se genera en un UserForm y se


puede acceder a l con ayuda del Editor de VB.
A continuacin se expone la secuencia tpica de fases a realizar para la
creacin de un UserForm:
1) Insertar un UserForm en el libro de trabajo
2) Escribir un procedimiento que despliegue el UserForm. Este
procedimiento est localizado en un mdulo de VBA (no en el
mdulo de cdigo para el UserForm)
3) Aadir controles al UserForm
4) Ajustar algunas propiedades a los controles aadidos
5) Escribir procedimientos de controlador de evento para los controles.
Estos procedimientos que estn situados en la ventana de cdigo
para el UserForm, se ejecutan cuando ocurren varios eventos (como
hacer clic con el ratn).

Ofimtica - Excel con VBA - Parte 6

Insertar un UserForm
Activar el Editor de VB y seleccionar el Libro de trabajo
correspondiente y elegir el comando Insertar, UserForm.
Un libro de trabajo puede tener cualquier nmero de
UserForms, y cada uno de ellos contiene un solo
UserForms. Los UserForms tienen nombres como
UserForm1, UserForm2, y as sucesivamente.
Se puede cambiar el nombre del UserForm para que su
identificacin sea ms fcil. Para ello se selecciona el
UserForm y se usa la ventana propiedades, desde donde
se puede cambiar la propiedad Name (presionar F4 si la
ventana de propiedades no est desplegada).

Ofimtica - Excel con VBA - Parte 6

Propiedades

Ofimtica - Excel con VBA - Parte 6

Desplegar un UserForm
Se usa el mtodo Show del objeto UserForm. El siguiente
procedimiento, que se encuentra dentro de un mdulo de VBA
normal, despliega UserForm1:
Private Sub
UserForm1.Show()
End Sub
Cuando se despliega el UserForm, permanece visible en la pantalla
hasta que se oculta. El procedimiento puede tanto descargar el
UserForm (con una instruccin Unload) como ocultarlo (con el
mtodo Hide del objeto UserForm)
AADIR CONTROLES A UN UserForm
Se usa el Cuadro de herramientas (el Editor de VB no tiene comandos
de men para aadir controles). Este cuadro se puede desplegar
con Ver, Cuadro de Herramientas.

Ofimtica - Excel con VBA - Parte 6

Controles
Se usa el Cuadro de herramientas (el Editor de VB no tiene comandos
de men para aadir controles). Este cuadro se puede desplegar
con Ver, Cuadro de Herramientas.

Ofimtica - Excel con VBA - Parte 6

Controles
AADIR CONTROLES A UN UserForm
Se hace clic sobre el botn del Cuadro de Herramientas que
corresponde al control que se quiere aadir, y despus se hace clic
dentro del cuadro de dilogo.
Cuando se aade un control nuevo, se le asigna un nombre que
combina el tipo de control con la secuencia numrica para ese tipo
de control. Por ejemplo si se aade el primer botn de comando se
le asignar el nombre ComandButton1, y al segundo que se aada
CommandButton2. Siempre conviene cambiarle el nombre a los
controles para que sean ms representativos. Los nombres de lo
controles se cambian desde la ventana de Propiedades.
CONTROLES DISPONIBLES PARA EL USUARIO
Casilla de verificacin (CheckBox). Es til para ofrecer al usuario
una opcin binaria: s o no, verdadero o falso, activar o desactivar,
y dems. Cuando se selecciona una Casilla de verificacin posee un
valor Verdadero; en caso contrario es Falso.

Ofimtica - Excel con VBA - Parte 6

Controles
Cuadro combinado (ComboBox). Es similar al cuadro de lista. Sin
embargo, un Cuadro Combinado es un cuadro de lista desplegable
que presenta un solo elemento por vez. Otra diferencia con
respecto al cuadro de lista es que el usuario puede introducir un
valor que no aparece en la lista dada de elementos.
Botn de comando (CommandButton). Todo cuadro de dilogo que
se genere probablemente tenga, al menos, un Botn de comando.
Normalmente se tendr un Botn de comando etiquetado como
Aceptar y otro etiquetado como Cancelar.
Botn Macro (Frame). Se usa para agrupar otros controles. Se
puede hacer bien por motivos estticos o por agrupar lgicamente
un conjunto de controles. Un Marco es particularmente til cuando
el cuadro de dilogo contiene ms de un grupo de controles de
Botn de opcin.

Ofimtica - Excel con VBA - Parte 6

Controles
Imagen (Image).Se usa para desplegar una imagen grfica, que
pude provenir de un archivo o se pude pegar desde el Portapapeles.
La imagen grfica se guarda en el libro de trabajo. De esta forma,
se puede distribuir el libro a cualquier persona y no es necesario
incluir una copia del archivo grfico.
Etiqueta (Label). Simplemente presenta texto en el cuadro de
dilogo.
Cuadro de lista (Listbox). Presenta una lista de elementos donde el
usuario puede seleccionar uno (o mltiples elementos). Estos
controles son muy flexibles. Por ejemplo, se puede especificar un
rango de hoja de clculo que contenga elementos de un Cuadro de
lista, y este rango puede constar de mltiples columnas
Pgina mltiple (Multipage). Permite crear cuadros de dilogo con
fichas, como el que aparece cuando se selecciona el comando
herramientas, opciones. De forma predeterminada una pgina
mltiple consta de dos pginas. Para aadir pginas, se hace clic
con el botn derecho del ratn sobre una ficha y se selecciona
Nueva pgina desde el men contextual.

Ofimtica - Excel con VBA - Parte 6

Controles
Botn de opcin (OptionButtons). Son muy tiles cuando el usuario
necesita seleccionar entre un pequeo nmero de elementos. Estos
botones se usan siempre en grupos de al menos dos elementos.
Cuando se selecciona uno de los botones, los otros botones del
grupo no estn seleccionados. Si el cuadro de dilogo contiene ms
de un grupo de Botones de opcin, cada grupo de stos debe tener
el mismo valor de la propiedad group name. De lo contrario, todos
los Botones de opcin formarn parte del mismo grupo. De forma
alternativa, se pueden agrupar los Botones de opcin en un control
Marco, que agrupa automticamente los Botones de opcin
contenidos dentro del marco.
RefEdit. Se usa cuando es necesario permitir que el usuario seleccione
un rango de una hoja de clculo.
Barra de desplazamiento (ScrollBar). Es similar a un control Botn
de nmero. La diferencia estriba en que el usuario puede
desplazarse con el botn Barra de desplazamiento para cambiar el
valor del control en incrementos ms amplios. Dicho control es ms
til para seleccionar un valor que se extiende a travs de un rango
muy amplio de posibles valores.
Ofimtica - Excel con VBA - Parte 6

Controles
Botn de nmero (SpinButton). Permite al usuario
seleccionar un valor haciendo clic sobre una de las dos
flechas que contiene. Este control se usa a menudo en
conjuncin con el control Cuadro de texto o el control
Etiqueta, que presentan el valor actual de un Control de
nmero.
Barra de tabulaciones (TabStrip). Es similar a un control
Pgina mltiple.
Botn de alternar (ToggleButton). Posee dos estados:
activado y desactivado. Al hacer clic sobre el mencionado
botn, se alternan estos dos estados y el botn cambia de
apariencia. Su valor puede ser o bien Verdadero
(presionado) o bien Falso (no presionado).

Ofimtica - Excel con VBA - Parte 6

10

Ajustar controles
Despus de situar un control en un cuadro de dilogo, se puede mover
y modificar su tamao usando las tcnicas del ratn estndar.
Un UserForm puede contener lneas de divisin horizontales y
verticales que ayudan a alinear los controles que se aaden.
Cuando se aade o se mueve un control, se ajusta a la cuadrcula.
Si no se quieren ver estas lneas se pueden desactivar
seleccionando Herramientas Opciones en el Editor de VB.
En el cuadro de dilogo Opciones se selecciona la ficha general y se
establecen las opciones deseadas en la seccin Opciones de la
cuadricula.
El men Formato de la ventana del Editor de VB proporciona varios
comandos para ayudar a precisar la alineacin y el espacio de los
controles en un cuadro de dilogo. Antes de usar estos comandos
hay que seleccionar los controles con los que se quiere trabajar.

Ofimtica - Excel con VBA - Parte 6

11

Ajustar controles

Ofimtica - Excel con VBA - Parte 6

12

Propiedades
Se pueden cambiar las propiedades del control en el tiempo
de diseo con la ventana de Propiedades, mientras se est
configurando el cuadro de dilogo, o durante el tiempo de
ejecucin, cuando el cuadro de dilogo se presenta al
usuario. Se pueden usar instrucciones VBA para cambiar
las propiedades del control en el tiempo de ejecucin.
USAR LA VENTANA DE PROPIEDADES
La ventana propiedades tiene dos fichas:
La ficha alfabtica presenta las propiedades del objeto
seleccionado en orden alfabtico
La ficha Por categoras las presenta agrupadas en
categoras lgicas
Si se seleccionan dos o ms controles a la vez, la ventana
Propiedades despliega slo las propiedades comunes a los
controles seleccionados.
Ofimtica - Excel con VBA - Parte 6

13

Propiedades

Ofimtica - Excel con VBA - Parte 6

14

Propiedades
La mejor manera de aprender sobre diversas propiedades de un
control es usar la Ayuda en lnea. Simplemente se hace clic sobre
una propiedad de la ventana de Propiedades y se presiona F1. Por
ejemplo, la propiedad Alignment de un Botn de Opcin.

Ofimtica - Excel con VBA - Parte 6

15

Orden de Tabulaci
Tabulacin
El orden de tabulacin determina la secuencia en la que los controles se
activan cuando el usuario presiona Tab o Mays-tab.Para establecer el
orden de tabulacin de los controles se selecciona Ver Orden de
tabulacin en el Editor de VB

De forma alternativa, se puede establecer una posicin de control individual


en el orden de tabulacin, usando la ventana Propiedades. El primer
control en el orden de tabulacin tiene una Propiedad TabIndex de 0.
Cambiar esta propiedad puede afectar a otros controles. Si se quiere
eliminar un control del orden de tabulacin, se establece su propiedad
TabStop como False.

Ofimtica - Excel con VBA - Parte 6

16

Accesos Directos
ESTABLECER TECLAS DE ACCESO DIRECTO
Se puede asignar una tecla de aceleracin o tecla de acceso
directo a la mayora de los controles de un cuadro de
dilogo. Esto permite al usuario acceder al control
presionando Alt-tecla de acceso directo. Para ello se usa la
propiedad Accelerator de la ventana propiedades.
PROBAR UN UserForm
Existen tres maneras de probar un UserForm sin tener que
llamarlo desde un procedimiento de VBA.
Elegir el comando Ejecutar, Ejecutar Sub/UserForm
Presionar F5
Hacer clic sobre el botn Ejecutar Sub/UserForm en la
barra de herramientas Estndar

Ofimtica - Excel con VBA - Parte 6

17

UserForms
DESPLEGAR UN UserForm
Sub MostrarDilogo()
Este procedimiento debe estar en un mdulo
UserForm1().show
de VBA, no en el mdulo del cdigo del
End Sub
UserForm.
CERRAR UN UserForm
Unload UserForm1
PROCEDIMINETOS DE CONTROLADOR DE EVENTO
Cuando el usuario interacta con el cuadro de dilogo,
mediante la seleccin de un elemento de un cuadro de
lista, haciendo clic sobre un botn de comando y dems,
se produce un evento a ocurrir. Por ejemplo, hacer clic
sobre el Botn de comando promueve el evento Click
para dicho botn. La aplicacin necesita procedimientos
que se ejecuten cuando estos eventos ocurran. Estos
procedimiento se llaman controlador de evento.

Ofimtica - Excel con VBA - Parte 6

18

Controladores de eventos
PROCEDIMINETOS DE CONTROLADOR DE EVENTO
Los procedimientos de controlador de evento deben estar localizados
en la ventana de cdigo del UserForm. Sin embargo, el
procedimiento de controlador de evento puede llamar a cualquier
procedimiento que est localizado en un mdulo VBA estndar.
CREAR UN UserForm: Un ejemplo
El ejemplo usa un UserForm para obtener dos tipo de informacin: el
nombre y el sexo de una persona.
Usa el control Cuadro de texto (TextBox) para obtener el nombre.
Usa tres botones de opcin (OptionsButtons) para obtener el sexo
(masculino, femenino o desconocido).
La informacin se recoge en el cuadro de dilogo y luego se enva a
la siguiente fila en blanco de la hoja de clculo.

Ofimtica - Excel con VBA - Parte 6

19

Ejemplo de creaci
creacin
CREACIN DEL CUADRO DE DILOGO
1) Abra un libro de trabajo nuevo
2) Presionar Alt-F11 para activar el Editor de VB
3) En la ventana Proyecto, seleccionar el proyecto del libro de trabajo y
elegir insertar, UserForm para aadir un formulario vaco.
4) Si la ventana propiedades no est visible, presionar F4.
5) cambiar la propiedad Caption del UserForm (usando la ventana
propiedades) a Obtener nombre y sexo.
6) Aadir un control Etiqueta (Label) y ajustar sus propiedades:
Accelerator N, caption Nombre, TabIndex 0
7) Aadir un control Cuadro de texto (TextBox) y ajustar sus
propiedades: Name NombreTexto, TabIndex 1
8) Aadir un control Marco (frame) y ajustar sus propiedades: Caption
Sexo, TabIndex 2

Ofimtica - Excel con VBA - Parte 6

20

10

Ejemplo

9) Aadir un control Botn de opcin (OptionButtons) dentro


del Marco y ajustar sus propiedades: Accelerator M,
Caption Masculino, Name OpcinMasculino, TabIndex 0
10) Aadir otro control Botn de opcin (OptionButtons)
dentro del Marco y ajustar sus propiedades: Accelerator F,
Caption Femenino, Name OpcinFemenino, TabIndex 1

Ofimtica - Excel con VBA - Parte 6

21

Ejemplo
11) Aadir otro control Botn de opcin
(OptionButtons) dentro del Marco y ajustar sus
propiedades: Accelerator D, Caption Desconocido,
Name Opcindesconocido, TabIndex 2, Value True
12) Aadir un control Botn de Comando
(CommandButton) dentro del Marco y ajustar sus
propiedades como sigue: Caption Aceptar, Default
True, Name BotnAceptar, TabIndex 3
13) Aadir otro control Botn de Comando
(CommandButton) dentro del Marco y ajustar sus
propiedades como sigue: Caption Cancelar, Cancel
True, Name BotnCancelar, TabIndex 4

Ofimtica - Excel con VBA - Parte 6

22

11

Ejemplo

ESCRIBIR UN CDIGO PARA DESPLEGAR EL


CUADRO DE DILOGO
Ahora se debe aadir un Botn de Comando a la hoja
de clculo (Cuadro de controles). Este botn ejecuta
un procedimiento que despliega el UserForm.
1) Activar Excel
2) activar la barra Cuadro de Controles
3) Aadir un Botn de comando

Ofimtica - Excel con VBA - Parte 6

23

Ejemplo
4) Hacer doble clic sobre el botn, esto activa
el Editor de VB (especficamente, el mdulo
de cdigo para la hoja de calculo se
despliega, con un procedimiento controlador
de evento vaco para el Botn de Comando
(CommandButton)de la hoja de Clculo)
5) Aadir la instruccin UserForm1.Show al
procedimiento
Private Sub CommandButton1-Click()
UserForm1.Show
End Sub
Ofimtica - Excel con VBA - Parte 6

24

12

Ejemplo
Al salir del modo de diseo (desactivarlo de la barra
Cuadro de Controles) y hacer clic sobre el botn, se
despliega el cuadro de dilogo:

Como an no hemos creado ningn controlador de


evento, slo podemos cerrar el cuadro de dilogo.

Ofimtica - Excel con VBA - Parte 6

25

Procedimientos en eventos
En esta seccin se explica cmo escribir procedimientos que
controlan los eventos que ocurren cuando el cuadro de
dilogo se ha desplegado.
1) Activar el Editor de VB
2) Hacer doble clic sobre el botn Cancelar. El Editor de VB
activa la ventana de Cdigo del UserForm y proporciona un
procedimiento vaco llamado BotnCancelar_Click
3) Modificar el procedimiento como sigue:
Private Sub Botncancelar_Click()
Unload UserForm
End Sub
4) Presionar Mays-F7 para volver a desplegar el UserForm1
5) Hacer doble click sobre el botn Aceptar e introducir el
siguiente procedimiento (ste es el controlador de evento
para el evento Click del Botn Aceptar)

Ofimtica - Excel con VBA - Parte 6

26

13

Procedimientos en eventos
Private Sub BotnAceptar_Click()
Sheets(Hoja1).Activate
NextRow =
application.WorkSheetFunction.CountA(Range(A:A)) + 1
Cells(NextRow, 1) = NombreTexto.text
If OpcinMasculino Then Cells(NextRow, 2) = Masculino
If OpcinFemenino Then Cells(NextRow, 2) = Femenino
If OpcinDesconocido Then Cells(NextRow, 2) =
Desconocido
NombreTexto =
OpcinDesconocido = true
NombreTexto.SetFocus
End Sub

Ofimtica - Excel con VBA - Parte 6

27

Procedimientos en eventos

Ofimtica - Excel con VBA - Parte 6

28

14

Validar datos
Este ejemplo no asegura que el usuario realmente introduce
el nombre en el Cuadro de texto. El siguiente cdigo se
inserta en el procedimiento BotnAceptar_Click() antes
de que el texto se transfiera a la hoja de clculo.
Asegurar que se ha introducido un nombre
If NombreTexto.Text = Then
MsgBox Se debe introducir un nombre
Exit Sub
End If
Con esto se asegura que el usuario ingresa un texto. Si este
est vaco aparece un mensaje y la rutina termina.

Ofimtica - Excel con VBA - Parte 6

29

Propiedades comunes
Categora apariencia
Backcolor y Forecolor: Color del fondo del control y color del texto.
Caption: Informa el texto que aparece en el control.
Picture: Indica el nombre de un fichero grfico que se mostrar como
fondo del control.

Categora comportamiento
Enabled: Propiedad del tipo True/False que especifica si el control est
activo o no en tiempo de ejecucin; un control no activo es visible
pero el usuario no puede interactuar con l, y se visualiza con un
color distinto.
Visible: Otra propiedad True/False, que indica si el control est visible
u oculto en tiempo de ejecucin.
TabIndex: El orden por el cual nos movemos con la tecla TAB, entre
los controles, se establece con esta propiedad. Es un valor
numrico, 0, 1 ...
TabStop: Es del tipo True/False y establece si un control puede ser
accesible con la teca TAB.

Ofimtica - Excel con VBA - Parte 6

30

15

Propiedades comunes
Categora fuente
Font: Permite elegir el tipo, estilo, tamao, etc... de letra del texto
mostrado por el control.

Categora posicin
Left y Top: La primera contiene la coordenada columna y la segunda
la coordenada lnea de pantalla donde se sita el control.
Width y Height: Cuando un control es redimensionable, esto es, que
sus dimensiones son variables, tendr estas dos propiedades que
nos informan del ancho y la altura del control.
EJEMPLO
1) Inserte un formulario en l proyecto
2) Inserte un botn de comando
3) Haga doble click sobre el botn para acceder a la ventana de cdigo
4) En el procedimiento de evento click aada las siguientes lneas de
cdigo:

Ofimtica - Excel con VBA - Parte 6

31

Propiedades comunes
Private Sub CommandButton1_Click()
CommandButton1_Height = UserForm1.Height / 2
CommandButton1_Width = UserForm1.Width / 2
CommandButton1_Left = UserForm1.Width / 4
CommandButton1_Top = UserForm1.Height / 4
CommandButton1_Caption = redimensionado
End Sub
5) Ejecute el procedimiento presionando la tecla F5 y
observe como cambia el ttulo del control
CommandButton y su tamao y posicin al hacer clic
sobre l.

Ofimtica - Excel con VBA - Parte 6

32

16

Eventos comunes
Para nombrar un evento correspondiente a un control, la nomenclatura
es siempre la misma: nombre_del_control.nombre_del_evento
Command Button.Click
Click: Se activa al hacer clic sobre el control, pero tambin al pulsar la
barra de espacios o la tecla Enter si se trata de un botn
CommandButton
MouseMove: Se activa al mover el puntero del ratn por encima del
control.
EJEMPLO
1) Acceda a la ventana de cdigo del control command Button del
ejemplo anterior.
2) Observe que en la parte superior de la ventana de cdigo hay dos
listas desplegables. La de la izquierda muestra el nombre del
control CommandButton1 y es una lista de los controles del
UserForm. La de la derecha muestra el nombre del evento Click y es
una lista de todos los eventos del control que tenemos
seleccionado.
En la ventana de eleccin de eventos, desplegndola, elija el evento
MouseMove.
Ofimtica - Excel con VBA - Parte 6

33

Eventos comunes

Ofimtica - Excel con VBA - Parte 6

34

17

Eventos comunes
3) Escriba el cdigo necesario para que el evento quede como sigue:
Private Sub CommandButton1_MouseMove(ByVal Button As Integer,
ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
CommandButton1.Caption = "Ahora pasas por encima"
End Sub
4) Despliegue ahora la lista de controles y elija el objeto UserForm. En
la lista de eventos del UserForm elija de nuevo MouseMove y
escriba el cdigo siguiente:
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal
Shift As Integer, ByVal X As Single, ByVal Y As Single)
CommandButton1.Caption = "Desactivado"
End Sub
5) En un mdulo de VBA escriba el siguiente cdigo:
Sub mostrar()
UserForm1.Show
End Sub
Ofimtica - Excel con VBA - Parte 6

35

Eventos comunes
6) Ejecute el procedimiento Mostrar. Mueva el puntero del ratn
por encima del control sin hacer clic y observe como cambia el
texto que muestra. Cuando el puntero abandona el rea del
botn y se mueve por encima del UserForm se activa el evento
MouseMove de ste y el ttulo del botn muestra el texto
desactivado.
MouseDown y MouseUp: El primer evento se activa al presionar
uno de los botones del ratn y el segundo al liberarlo
KyePress, KeyDown y KeyUp: Son eventos que relacionan un
control que acepta entrada de texto por parte del usuario (por
ejemplo TextBox) con el teclado del ordenador. Cuando el
usuario presiona una tecla de tipo carcter se activa el evento
KeyPress. Si presiona una tecla especial, como puede ser la
tecla Inicio o Enter, se activa solo el evento KeyDown. Al
soltar la tecla se activa KeyUp. Notemos que el evento KeyDown
se activa para cualquier tecla, mientras KeyPress slo lo hace si
la tecla es de tipo carcter.
DblClick: Se activa al hacer doble clic sobre el control.

Ofimtica - Excel con VBA - Parte 6

36

18

Bot
Botn CheckBox
Diseemos un UserForm de entrada de datos de los clientes
de un hotel. Ha de contener DNI, nombre da de llegada,
habitacin doble (s/no), habitacin con bao completo
(s/no), pensin completa (s/no), suplemento cama nio
(s/no).
El programa calcular el precio diario de la habitacin en
base a una suma de conceptos. La habitacin tiene un
recio de 30/da, y los precios de los suplementos son:
Habitacin doble: 18/da, Con bao completo: 12/da,
Pensin completa (por persona): 27/da, Cama
suplementaria para nio: 9/da.
Los pasos a seguir son:
1) Disee un formulario como se muestra a continuacin:

Ofimtica - Excel con VBA - Parte 6

37

Bot
Botn CheckBox

2) Acceda a las propiedades Caption de los controles de


forma que queden como en la pantalla anterior.
3) Ponga la propiedad Visible del TextBox que muestra el
resultado del clculo a False. Haga lo mismo con el
correspondiente control Label.
Ofimtica - Excel con VBA - Parte 6

38

19

Bot
Botn CheckBox
4) Acceda a la ventana del cdigo del botn Finalizar,
evento Click, y escriba la instruccin End
Private Sub CommandButton3_Click()
End
End Sub
5) Acceda a la ventana de cdigo del botn Nuevo y djelo
como sigue:
Private Sub CommandButton2_Click()
TextBox1 = ""
TextBox2 = ""
Cambie el nombre de los
TextBox3 = ""
HabDoble = 0
botones CheckBox,
PensionCompleta = 0
HabDoble, PensionCompleta,
CamaAdicional = 0
CamaAdicional,
BaoCompleto = 0
TextBox4.Visible = False
BaoCompleto
Label4.Visible = False

End Sub

Ofimtica - Excel con VBA - Parte 6

39

Bot
Botn CheckBox
6) Acceda a la ventana de cdigo del botn Calcular y
djelo como sigue:
Private Sub CommandButton1_Click()
Dim Precio As Integer
Precio = 30
If HabDoble = 1 Then Precio = Precio + 18
If PensionCompleta = 1 Then
If CamaAdicional = 1 Then
Precio = Precio + 27
Precio = Precio + 9
If HabDoble = 1 Then
End If
Precio = Precio + 27
If BaoCompleto = 1 Then
End If
Precio = Precio + 12
End If
If CamaAdicional = 1 Then
TextBox4 = Precio
Precio = Precio + 27
TextBox4.Visible = True
End If
Label4.Visible = True
End If
End Sub

Ofimtica - Excel con VBA - Parte 6

40

20

Bot
Botn CheckBox
6) En un mdulo de VBA escriba el siguiente cdigo:
Sub Clientes()
UserForm1.Show
End Sub
7) Luego ejectelo

Ofimtica - Excel con VBA - Parte 6

41

Control ListBox
A continuacin se presentan algunos puntos a tener en cuenta
cuando se trabaja con controles de Cuadro de lista.
Los

elementos de un Cuadro de Lista se pueden recuperar desde un rango


de celdas (especificadas por la propiedad RowSource) o pueden ser
aadido usando un cdigo de VBA (y usando el mtodo AddItem).
Un Cuadro de lista se puede configurar para permitir una seleccin de una
celda o una seleccin mltiple. Esto est determinado por la propiedad
MultiSelect.
No es posible desplegar un Cuadro de lista sin elementos seleccionados (la
propiedad ListIndex es -1). Sin embargo, una vez se ha seleccionado un
elemento, no es posible no seleccionar ningn elemento.
Un Cuadro de lista puede contener columnas mltiples (controladas por la
propiedad ColumnCount) e incluso un encabezado descriptivo (controlado
por la propiedad ColumnHeads).
Los elementos de un Cuadro de lista se pueden presentar como Casillas de
verificacin si se permite una seleccin mltiple, o como Botones de
opcin si se permite una seleccin de una sola celda. Esta operacin est
controlada por la propiedad ListStyle.

Ofimtica - Excel con VBA - Parte 6

42

21

Control ListBox
Aadir elementos al control Cuadro de lista
Antes de desplegar un Userform que use un control Cuadro de lista,
probablemente se necesite rellenar el mismo con elementos. Esto se
debe realizar en tiempo de diseo, usando elementos guardados en
un rango de hoja de clculo, o en tiempo de ejecucin, usando VBA
para aadir los elementos.
Los ejemplos que veremos a continuacin suponen que:
Se ha generado un cuadro de dilogo en un UserForm llamado
UserForm1.
Este cuadro de dilogo contiene un control de Cuadro de lista
llamado ListBox1.
El libro de trabajo contiene una hoja llamada Hoja1 y un rango
A1:A12 que contiene los elementos a desplegar en el Cuadro de lista.
Aadir elementos a un Cuadro de lista en tiempo de diseo
Para aadir elementos en tiempo de diseo los elementos deben estar
guardados en en un rango de hoja de clculo. Se usa la propiedad
RowSource para especificar el rango que contiene dichos elementos
(HOJA1!A1:A2)
Ofimtica - Excel con VBA - Parte 6

43

Control ListBox

Ofimtica - Excel con VBA - Parte 6

44

22

Control ListBox
Aadir elementos a un Cuadro de lista en tiempo de
ejecucin
Para aadir elementos a un Cuadro de lista en tiempo de
ejecucin existen dos formas:
Configurar la propiedad RowSource para una direccin de
rango usando un cdigo.
Escribir un cdigo que usa el mtodo AddItem para aadir
los elementos al Cuadro de lista.
UserForm1.ListBox1.RowSource = Hoja1!A1:A12
Si los elementos no estn contenidos en un rango de hoja
de clculo, se puede escribir un cdigo VBA para rellenar el
cuadro de lista antes de que aparezca el cuadro de dilogo
(con el mtodo AddItem).
Ofimtica - Excel con VBA - Parte 6

45

Control ListBox
Sub ShowUserForm1()
With UserForm1.ListBox1
.RowSource =
.AddItem Enero
.AddItem Febrero
.AddItem Marzo
.AddItem Abril
.AddItem Mayo
.AddItem Junio
.AddItem Julio
.AddItem Agosto
.AddItem Septiembre
End With
UserForm1. Show
End Sub
Ofimtica - Excel con VBA - Parte 6

46

23

Control ListBox
Aadir elementos a un Cuadro de lista en tiempo de
ejecucin
Tambin se pude usar el mtodo AddItem para recuperar
elementos de un Cuadro de Lista a partir de un rango.
For Row = 1 To 12
UserForm1.ListBox1.AddItem
Sheets(Hoja1).Cells(Row,1)
Next Row
Si los datos estn contenidos en una matriz de una
dimensin meses, que contiene 12 elementos, podemos
escribir
ListBox1.List = meses
Ofimtica - Excel con VBA - Parte 6

47

Control ListBox
Seleccin de las opciones en el ListBox
La propiedad MultiSelect que en el momento de crear el
control tiene el valor 0-Single, que permite seleccionar slo
una opcin, puede tomar los siguientes valores:
1-Simple: permite seleccionar ms de un elemento
simplemente pulsando el botn del ratn sobre cada uno
2-Extended: permite adems seleccionar un rango de la
lista combinando la tecla de maysculas con el botn del
ratn. En este caso para seleccionar elementos aislados
combinaremos la tecla Control con el ratn.
Acceso a la opcin en el caso de seleccin simple
Para determinar el elemento que se ha seleccionado, hay
que acceder a la propiedad Value del Cuadro de lista.
MsgBox ListBox1.Value
Si se necesita saber la posicin del elemento seleccionado se
puede acceder a la propiedad ListIndex del Cuadro de
lista.
MsgBox
Se
ha
seleccionado
el
elemento

&
ListBox1.ListIndex
Ofimtica - Excel con VBA - Parte 6

48

24

Control ListBox
Acceso a las opciones en multiseleccin
Cuando tengamos la multiseleccin activada (la propiedad MultiSelect
es 1 2) podr haber ms de un elemento seleccionado, y las
propiedades anteriores no sern adecuadas. Utilizaremos la
propiedad Selected que es una matriz unidimensional de
elementos tipo Boolean. El nmero de elementos es el mismo que el
de la propiedad List.
Si el tercer elemento est seleccionado, entonces el tercer elemento de
Selected tendr el valor True, en caso contrario valdr False.
Tambin nos puede ser til la propiedad ListCount, que devuelve el
nmero total de elementos de la lista.
Crear un cuadro de lista con contenido variable
Este ejemplo demuestra cmo crear un Cuadro de lista cuyo contenido
cambia, dependiendo de la seleccin del usuario de un grupo de
botones de opcin. El cuadro de lista obtiene los elementos de un
rango de hoja de clculo. El procedimiento que controla el evento
Click de los controles de Botn de opcin simplemente establece la
propiedad RowSource del Cuadro de lista en un rango diferente.
Ofimtica - Excel con VBA - Parte 6

49

Control ListBox
Crear un cuadro de lista con contenido variable
Private Sub OpcionCoches_Click()
ListBox1.RowSource = "Hoja1!Coches"
End Sub
Private Sub OpcionColores_Click()
ListBox1.RowSource = "Hoja1!Colores"
End Sub
Private Sub OpcionMeses_Click()
ListBox1.RowSource = "Hoja1!Meses"
End Sub

Ofimtica - Excel con VBA - Parte 6

50

25

Control ListBox
Elaborar un Cuadro de lista desde otra lista

A continuacin se muestra el procedimiento que se ejecuta cuando el


usuario hace clic sobre el botn Aadir
Private Sub Aadir_Click()
If ListBox1.ListIndex = -1 Then Exit Sub
ListBox2.AddItem ListBox1.Value
End Sub
Private Sub Eliminar_Click()
If ListBox2.ListIndex = -1 Then Exit Sub
ListBox2.RemoveItem ListBox2.ListIndex
End Sub

Ofimtica - Excel con VBA - Parte 6

51

Control ListBox
Elaborar un Cuadro de lista desde otra lista
A continuacin se muestra el procedimiento que se ejecuta cuando el
usuario hace clic sobre el botn Eliminar
Private Sub Eliminar_Click()
If ListBox2.ListIndex = -1 Then Exit Sub
ListBox2.RemoveItem ListBox2.ListIndex
End Sub
Mover elementos de un cuadro de lista

Ofimtica - Excel con VBA - Parte 6

52

26

Control ListBox
Mover elementos de un cuadro de lista

Private Sub MoverEncima_Click()


With ListBox1
ItemNum = .ListIndex
If ItemNum > 0 Then
TempItem = .List(ItemNum - 1)
.List(ItemNum - 1) = .List(ItemNum)
.List(ItemNum) = TempItem
.ListIndex = .ListIndex - 1
End If
End With
End Sub
Ofimtica - Excel con VBA - Parte 6

53

Control ListBox
Mover elementos de un cuadro de lista

Private Sub MoverDebajo_Click()


With ListBox1
ItemNum = .ListIndex
If ItemNum < .ListCount - 1 And ItemNum <> -1
Then 0 Then
TempItem = .List(ItemNum +1)
.List(ItemNum - 1) = .List(ItemNum)
.List(ItemNum) = TempItem
.ListIndex = .ListIndex + 1
End If
End With
End Sub
Ofimtica - Excel con VBA - Parte 6

54

27

Control MultiPage
El control Pgina Mltiple es muy til para cuadros de dilogo
personalizados que deben presentar muchos controles. El
mencionado control permite agrupar las opciones y colocar cada
grupo en una ficha aparte.
Hay que tener en cuenta lo siguiente cuando se use este control:

La ficha (o pgina) que se despliega al frente est determinada por la funcin


Value el control.El valor 0 despliega la primera ficha, el 1 la segunda y as
sucesivamente.
De forma predeterminada, un control de Pgina Mltiple tiene dos pginas.
Para aadir una nueva, se hace clic con el botn derecho del ratn sobre una
ficha y se selecciona Nueva Pgina desde el men contextual.
Cuando se est trabajando con un control de Pgina Mltiple, basta con hacer
clic sobre una ficha para establecer las propiedades de esa pgina en concreto.
La ventana Propiedades pesenta las propiedades que se pueden ajustar.
Puede ser difcil seleccionar el control de Pgina mltiple, porque al hacer clic
sobre el mismo, se selecciona toda la pgina. Para seleccionar el control
propiamente dicho se puede usar la tecla Tab para realizar un recorrido en
crculo por todos los controles. Tambin se puede seleccionar el control Pgina
mltiple desde la lista desplegable de la ventana Propiedades.

Ofimtica - Excel con VBA - Parte 6

55

Control MultiPage
Si el control pgina Mltiple consta de muchas fichas, se puede
establecer su propiedad multiRow en True para desplegar las fichas
en ms de una fila.
Si se prefiere se pueden desplegar botones en lugar de fichas. Para
ello se cambia la propiedad Style a 1.
La propiedad TabOrientation determina la localizacin de las fichas en
el control Pgina Mltiple

Ofimtica - Excel con VBA - Parte 6

56

28

Control de errores
Los errores de ejecucin de tipo externo suelen interrumpir de form
sbita la ejecucin normal del programa. Dependiendo del tipo de
error, o bien VBA o bien Windows mostrarn un mensaje de error
que no siempre ser comprensible para el usuario.Veremos ejemplos
de cmo hacer que nuestro programa controle estos errores sin
terminar de forma anormal y generando nuestros propios mensajes
de rror para el usuario.
EJEMPLO
Sub grabar()
On Error goTo Problemas
Application.SaveWorkSpace
On Error GoTo 0
Exit Sub
Problemas:
MsgBox operacin cancelada
Resume Next
EndSub

Ofimtica - Excel con VBA - Parte 6

57

Control RefEdit
A continuacin se presentan algunos temas a tener en
cuenta cuando se use el control REfEdit:
El control REfEdit devuelve una cadena de texto que
representa una direccin de rango. Se puede convertir esta
cadena en un objeto Range mediante el uso de una
instruccin como la siguiente:
Set UserRange = Range(RefEdit1.Text)
Desplegar

la seleccin de rango actual es una buena


prctica para inicializar el control RefEdit. Esto se puede
hacer con la ayuda del procedimiento UserForm_Initialize
usando una instruccin como la siguiente.
RefEdit1.Text = ActiveWindow.RangeSelection.Address
No

hay que dar por supuesto que el control RefEdit


siempre va a devolver siempre la direccin de rango
vlido, por lo tanto debemos verificar que sea realmente
vlido.

Ofimtica - Excel con VBA - Parte 6

58

29

Control RefEdit
On Error Resume Next
Set UserRange = Range(RefEdit1.Text)
If Err <> 0 Then
MsgBox El rango seleccionado no es vlido
RefEdit1.SetFocus
On error GoTo 0
Exit Sub
End If
Si

el rango seleccionado correponde aun hoja diferente de


la activa deber indicarlo de la siguiente forma:

Hoja2!A1:A20

Ofimtica - Excel con VBA - Parte 6

59

Control RefEdit

Ofimtica - Excel con VBA - Parte 6

60

30

Control RefEdit
EJEMPLO
Sub Clculo()
UserForm1.Show
End Sub
Private Sub CommandButton1_Click()
RefEdit1.Text = ""
TextBox1 = ""
End Sub
Private Sub CommandButton2_Click()
End
End Sub

Ofimtica - Excel con VBA - Parte 6

61

Control RefEdit
EJEMPLO
Private Sub Opcin_Producto_Click()
Set UserRange = Range(RefEdit1.Text)
prod = 1
Private Sub Opcin_Suma_Click()
For Each cell In UserRange
Set UserRange = Range(RefEdit1.Text)
prod = prod * cell.Value
Sum = 0
Next cell
For Each cell In UserRange
TextBox1 = prod
Sum = Sum + cell.Value
End Sub
Next cell

TextBox1 = Sum
End Sub

Ofimtica - Excel con VBA - Parte 6

62

31

También podría gustarte