Professional Documents
Culture Documents
1
Marcela Genero Bocco Noviembre del 2002
Parte 1:
Caractersticas Generales
2
Marcela Genero Bocco Noviembre del 2002
INTRODUCCIN
Esencialmente la programacin de Excel se reduce a la
manipulacin de objetos (mediante la escritura de instrucciones en
un lenguaje que Excel puede entender), mediante el lenguaje
VBA.
VBA est pensado como un lenguaje de secuencia de comandos de
aplicacin de Microsoft comn y ahora est incluido en las
aplicaciones de Office 2000 (e incluso en aplicaciones de otros
fabricantes). Por consiguiente, al dominar VBA usando Excel se
podr entrar directamente en la escritura de macros para otros
productos de Microsoft. Mejor an, se pueden generar soluciones
completas que usan opciones a travs de varias aplicaciones.
3
Marcela Genero Bocco Noviembre del 2002
INTRODUCCIN
EL NCLEO DE VBA
Las acciones de VBA se realizan mediante la ejecucin del
cdigo VBA.El cdigo VBA se escribe (o se graba) y se guarda
en un mdulo VBA.
Los mdulos se guardan en un libro de trabajo de Excel pero se
editan o visualizan en el editor de Visual Basic.
Un mdulo VBA se compone de procedimientos. Un
procedimiento es bsicamente un cdigo de ordenador que realiza
alguna accin sobre los objetos o con ellos.
Sub Prueba()
Sum= 1+1
MSGBox La respuesta es & Sum
End Sub
5
Marcela Genero Bocco Noviembre del 2002
EL NCLEO DE VBA
Un mdulo VBA puede tener tambin procedimientos Function.
Un procedimiento Function devuelve un solo valor. Se puede
llamar una funcin desde otro procedimiento VBA o usar una
frmula de hoja de clculo.
Function AadirDos(arg1, arg2)
AadirDos= arg1 + arg2
End Function
VBA manipula los objetos contenidos en su aplicacin anfitriona
(en este caso Excel).
6
Marcela Genero Bocco Noviembre del 2002
EL NCLEO DE VBA
Excel proporciona ms de 100 clases de objetos para manipular.
Ejemplos de objetos son un libro de trabajo, una hoja de clculo,
un rango de una hoja de clculo, un grfico y un rectngulo
dibujado. Existen muchos ms objetos a nuestra disposicin y se
pueden manipular mediante el uso de cdigo VBA.
Las clases de objetos estn ordenados jerrquicamente. Los
objetos pueden actuar como contenedores de otros objetos. Por
ejemplo, Excel es un objeto llamado Applcation y contiene otros
objetos como WorkBook y CommandBar. El objeto WoorkBook
puede contener otros objetos como WorkSheet y Chart. Un objeto
WoorkSheet puede contener objetos como Range, PivotTable y
dems. Nos referimos al orden de estos objetos como modelo de
objeto de Excel.
7
Marcela Genero Bocco Noviembre del 2002
EL NCLEO DE VBA
Objetos similares forman una coleccin. Por ejemplo, la colecci n
WorkSheets est compuesta por todas las hojas de clculo de un
libro concreto. La coleccin CommandBars est compuesta por
todos los objetos CommandBar. Las colecciones son objetos en s
mismas.
Cuando nos referimos a un objeto contenido o miembro, estamos
especificando su posicin en la jerarqua del objeto, usando un
punto como seprador entre el contenedor y el miembro.
Application.WorkBooks(Libro1.xls)
Esto se refiere al libro de trabajo Libro1.xls en la coleccin
WorkBooks.
8
Marcela Genero Bocco Noviembre del 2002
EL NCLEO DE VBA
Nos podemos referir a la Hoja1 del Libro1 como
Application.WorkBooks(Libro1.xls).WorkSheets(Hoja1)
Si se quiere omitir una referencia especfica a un objeto, Excel
usa los objetos activos.Si el libro1 es el libro de trabajo activo, la
referencia anterior se puede simplificar a
WorkSheets(Hoja1).Range(A1)
Si se sabe que la Hoja1 es la hoja activa, se puede incluso
simplificar ms
Range(A1)
9
Marcela Genero Bocco Noviembre del 2002
EL NCLEO DE VBA
Los objetos tienen propiedades. Se puede pensar en una
propiedad como en una configuracin para un objeto.
Por ejemplo, un objeto Range tiene propiedades como Value y
Name. Un objeto Chart tiene propiedades como HasTitle y Type.
Se puede usar VBA para determinar las propiedades del objeto y
tambin para cambiarlas.
Nos podemos referir a propiedades para combinar el objeto con
su propiedad, separados por punto.
Por ejemplo nos podemos referir al valor de la celda A1 de la
Hoja1 como
WorkSheets(Hoja1).Range(A1).Value
10
Marcela Genero Bocco Noviembre del 2002
EL NCLEO DE VBA
Se pueden asignar valores a variables de VBA.Para asignar un valor
en la celda A1 de la Hoja1 a una variables llamada Inters, use la
siguiente instruccin VBA:
Inters = WorkSheets(Hoja1).Range (A1).Value
Los objetos disponen de mtodos.Un mtodo es una accin que se
realiza con el objeto. Por ejemplo, uno de los mtodos para el objeto
Range es ClearContents. Este mtodo borra el contenido del mtodo.
Se pueden especificar mtodos mediante la combinacin del objeto
con el mtodo, separados por punto.
Range (A1).ClearContents
VBA tambin incluye todas las estructuras de lenguajes de
programacin modernos, como matrices, bucles y de ms.
11
Marcela Genero Bocco Noviembre del 2002
12
Marcela Genero Bocco Noviembre del 2002
13
Marcela Genero Bocco Noviembre del 2002
15
Marcela Genero Bocco Noviembre del 2002
17
Marcela Genero Bocco Noviembre del 2002
18
Marcela Genero Bocco Noviembre del 2002
19
Marcela Genero Bocco Noviembre del 2002
10
Sub Macro1()
' Macro1 Macro
(Ejemplo parte
' Macro grabada el 15/11/00 por PRI00
'
With ActiveSheet .PageSetup
.PrintTitleRows = ""
.PrintTitleColumns= ""
End With
ActiveSheet .PageSetup.PrintArea = ""
With ActiveSheet .PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0)
1)
.RightMargin = Application.InchesToPoints(0)
.TopMargin = Application.InchesToPoints(0)
21
Marcela Genero Bocco Noviembre del 2002
.BottomMargin = Application.InchesToPoints(0)
.HeaderMargin = Application.InchesToPoints(0)
.FooterMargin = Application.InchesToPoints(0)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = -4
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 100
End With
End Sub
(Ejemplo parte 2)
22
Marcela Genero Bocco Noviembre del 2002
11
12
La opcin colores del cdigo permite establecer el color del texto (de primer plano
o de fondo), as como el color del indicador desplegado para varios elementos de
cdigo VBA.
La opcin fuente permite seleccionar la fuente que se va usar en los mdulos de
25
VBA
Marcela Genero Bocco Noviembre del 2002
La ficha General
En general las
opciones
predeterminadas
suelen ser muy
tiles.
26
Marcela Genero Bocco Noviembre del 2002
13
28
Marcela Genero Bocco Noviembre del 2002
14
Parte 2:
Macros y Barras de
Herramientas
29
Marcela Genero Bocco Noviembre del 2002
MACROS
Automatizacin de tareas repetitivas.Algunas de las
entradas de datos y formatos que realiza en Microsoft Excel
pueden ser repetitivas. Por ejemplo, podra disear la mayora
de sus hojas con las mismas cabeceras bsicas, o formatear
todas sus cabeceras de la misma forma. En lugar de ejecutar la
misma secuencia de tareas una y otra vez, puede crear una
macro.
Una macro consta de una serie de instrucciones escritas en el
lenguaje VBA. Aunque para crear algunas macros no es
necesario conocer el lenguaje VBA. Para ello se utiliza la
opcin HERRAMIENTAS MACRO GRABAR NUEVA
MACROS.
30
Marcela Genero Bocco Noviembre del 2002
15
MACROS
Grabar Macros
.
MACROS
Ejecutar Macros
Para ejecutar una macro ya grabada puede seleccionar la opcin
HERRAMIENTAS MACRO MACROS, seleccionar el nombre de la
macro correspondiente y luego Ejecutar. Tambin puede utilizar la
combinacin de teclas rpidas que haya definido.
32
Marcela Genero Bocco Noviembre del 2002
16
MACROS
Ver una macro con el Editor de Visual Basic
Seleccione HERRAMIENTAS MACRO EDITOR DE VIUAL BASIC o ALTF11
33
Marcela Genero Bocco Noviembre del 2002
MACROS
Ejemplo de una macro en Visual Basic (centra en sentido
horizontal y pone en negrita)
Sub Formato()
' Formato Macro
' Macro para dar formato
' Acceso directo: Ctrl+Mays+F
' With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.ShrinkToFit = False
.MergeCells = False
End With
Selection.Font.Bold = True
End Sub
34
17
MACROS
Asignar una macro a un botn de comando
De la barra de herramientas Cuadro de controles elegir el
botn de comandos.Si dicha barra de herramientas no esta
visible, activarla media la opcin VER BARRA DE
HERRAMIENTAS
35
Marcela Genero Bocco Noviembre del 2002
MACROS
Asignar un nombre a un botn de comando
Para cambiarle el nombre al botn de comando, haga clic con
el botn derecho del ratn sobre el botn de comando y elija
del men contextual OBJETO BOTON DE COMANDO
EDITAR.
Asignar una macro a un botn de comando
Para asignarle una macro a un botn, elija el botn de modo
de diseo de la barra de controles. Luego haga clic con el
botn derecho del ratn sobre el botn de comando y elija del
men contextual VER CODIGO, escriba el cdigo asociado,
vuelva a Excel con la opcin ARCHIVO VOLVER A
EXCEL y desactive el modo de diseo.
36
Marcela Genero Bocco Noviembre del 2002
18
MACROS
Ejemplo de un botn de comando
37
Marcela Genero Bocco Noviembre del 2002
MACROS
Agregar una barra de herramientas nueva
Seleccione el comando VER BARRA DE HERRAMIENTAS PERSONALIZAR
NUEVA
38
Marcela Genero Bocco Noviembre del 2002
19
MACROS
Agregar una botn a una barra de herramientas
Seleccione
VER
BARRA
DE
HERAMIENTAS
PERSONALIZAR COMANDOS y seleccione la categora
de comandos Macros, selecciones arrastre el botn de la cara
sonriente hasta la barra de herramientas de macros. Luego
haciendo clic con el botn derecho podr asignarle una macro
a este botn o cambiar el diseo del botn, etc.
39
Marcela Genero Bocco Noviembre del 2002
Parte 3:
Variables, Constantes,
Expresiones y Tipos de
Datos
40
Marcela Genero Bocco Noviembre del 2002
20
41
Marcela Genero Bocco Noviembre del 2002
Bytes usados
Rango de valores
Long
1 0 a 255
2 Verdadero o Falso
2 -32.768 hasta 32.767
-2.147.483.648 hasta
4 2.147.483.647
Single
Double
Currency
-3.402823E38 a -1.401298E-4545
(para valores negativos) y
1.4012298E-45 a 3.42823E38
4 (para valores positivos)
8
8
Date
Object
String (de longitud variable)
String (de longitud fija)
42
Marcela Genero Bocco Noviembre del 2002
21
mbito
Variables locales
Una variable local es una variable declarada dentro de un procedimiento. Estas
variables se pueden usar slo en el procedimiento en que se declararon. Cuando el
procedimiento finliza, la variable deja de existir y Excel libera su memoria.
43
Marcela Genero Bocco Noviembre del 2002
Variables locales
La manera ms comn de declarar una variable local es situarla dentro de una
instruccin DIM.
Sub MiSub()
DIM x As Integer
DIM First As Long
DIM InerestRate As Single
DIM TodaysDate As Date
DIM UserName As String * 20
Aqu se sita el cdigo del procedimiento
End Sub
Esto tambin es vlido:
DIM x As Integer, y As Integer, z As Integer
Esto no es vlido:
DIM x, y, z As Integer
44
Marcela Genero Bocco Noviembre del 2002
22
Variables Public
Para que una variable est disponible para todos los procedimientos de un proyecto
de Vba, se declara la variable a nivel de mdulo con el uso de la palabra public.
Public IntersAnual as Long
45
Marcela Genero Bocco Noviembre del 2002
Variables Static
Las variables estticas son un caso especial. Se declaran a nivel de procedimiento y
retienen su valor despus de que el procedimiento finaliza.
Sub Ejemplo()
Static Counter As Integer
Aqu va el cdigo
End Sub
46
Marcela Genero Bocco Noviembre del 2002
23
CONSTANTES
Declarar Constantes
Las constantes se declaran usando Const.
Const NumTrim As Integer = 4
Const Inters = 0.05, Periodo = 12
Const Nombre Mod as String = Macros Presupuestos
Public Const NombreApp As String = Aplicacin Presupuestos
Al igual que las variables, las constantes tambin poseen un mbito.
Para que una constante est disponible slo dentro de in determinado
procedimiento, hay que declararla despus de Sub o Function para convertirla en
una constante local.
Para que una constante est disponible para todos los procedimientos de un
mdulo, se tiene que declarar antes del primer procedimiento de un mdulo.
Para que una constante est disponible para todos los mdulos de un libro de
trabajo, hay que usar la palabra Public, y declarar la constante antes del primer
procedimiento de un mdulo.
47
Marcela Genero Bocco Noviembre del 2002
CONSTANTES
Declarar Constantes
Excel y VBA contienen muchas constantes predeterminadas, que se pueden usar sin
necesidad de declararlas; de hecho no es necesario conocer el valor de estas
constantes para usarlas.
Sub CalcManual()
Application.Calculation = xlManual
End Sub
24
EXPRESIONES DE ASIGNACIN
Una expresin de asignacin es una instruccin de VBA que realiza evaluaciones
matemticas y asigna el resultado a una variable o aun objeto.
VBA usa el signo igual = como operador de asignacin.
x=1
Se puede usar una secuencia de
x=x+1
continuacin (espacio seguido de
x = (y * 2) / (z * 2)
un signo de subrayado) para
FileOpen = true
facilitar la lectura de expresiones
muy largas.
Range(Ao). Value = 1995
49
Marcela Genero Bocco Noviembre del 2002
OPERADORES ARITMTICOS
+ Suma, - Resta, * Multiplicacin, / Divisin, \ Divisin entera,
Mod Resto, ^ exponencial, & Concatenacin
OPERADORES COMPARATIVOS
= Igual, < Menor, > Mayor, <= Menor o igual, >= Mayor o
igual, <> Distinto
OPERADORES LGICOS
Not (negacin lgica, And (conjuncin lgica), Or (disyuncin
lgica), XoR (exclusin lgica), Eqv (equivalencia en dos
expresiones), Imp (implicacin lgica)
50
Marcela Genero Bocco Noviembre del 2002
25
MATRICES
Una matriz es un grupo de elementos del mismo tipo que tienen un nombre
comn; para referirse aun elemento especfico de una matriz se usa el nombre
de la matriz y un nmero de ndice.
Se puede declarar una matriz con DIM o Public como cualquier variable.
MATRICES MULTIDIMESIONALES
DIM MiMatriz(1 To 100, 1 to 10) As Integer
MiMatriz(1,2) = 20
51
Marcela Genero Bocco Noviembre del 2002
VARIABLES DE OBJETO
Una variable de objeto es una variable que representa un objeto entero, como puede
ser un rango o una hoja de clculo.
Las variables de objeto son importante por dos razones:
Pueden simplificar el cdigo
Pueden hacer que el cdigo se ejecute ms de prisa.
Se declaran con DIM o Public.
Por ejemplo, la expresin siguiente declara AreaEntradaDatos como un objeto Range.
Para ver como simplifican el cdigo, veamos un ejemplo sin usar variables de objeto:
Sub VarSinObj();
Worksheets(Hoja1).Range(A1).Value = 124
Worksheets(Hoja1).Range(A1).Font.Bold = True
Worksheets(Hoja1).Range(A1).Font. Italic = True
End Sub
52
Marcela Genero Bocco Noviembre del 2002
26
Esta rutina introduce un valor en la celda A1 de la HOJA1, del libro de trabajo activo,
y despus aplica Negrita y cursiva a su contenido. Para reducir el cdigo se puede
condensar la rutina con una variable de objeto.
Sub VarObj();
Dim MiCelda As Range
Set Micelda = Worksheets(Hoja1).Range(A1)
MiCelda.Value = 124
MiCelda.Font.Bold = True
MiCelda.Font. Italic = True
End Sub
FUNCIONES INTEGRADAS
Las funciones integradas de VBA no son las misma que las de Excel. La funcin
UCASE de VBA, que convierte una cadena a maysculas es equivalente a la funcin
MAYUSC de Excel.
Para obtener la lista de funciones de
Sub MostrarRaiz()
VBA, se teclea en el cdigo VBA
MiValor = 25
seguido de un punto. El Editor de VB
RaizCuadrada = Sqr(MiValor)
despliega una lista con todas las
MsgBox RaizCuadrada
funciones.
End Sub
54
Marcela Genero Bocco Noviembre del 2002
27
FUNCIONES INTEGRADAS
El objeto WorsheetFunction, que est contenido en el objeto Application, contiene
todas las funciones de hoja de clculo que se pueden llamar desde los procedimientos
VBA. Veamos un ejemplo para convertir un nmero decimal en nmero romano.
Sub MostrarRomano
ValorDecimal = 1999
ValorRomano = Application.WorsheetFunction.Romano(ValorDecimal)
MsgBox ValorRomano
End Sub
Es importante saber que no se puede usar una funcin de hoja de clculo que tenga
una funcin de VBA equivalente.
Por ejemplo no se puede usar la funcin de hoja de clculo RAIZ, porque VBA tiene
la funcin SQR. La siguiente sentencia da error:
Application.WorksheetFunction.RAIZ(144)
55
Marcela Genero Bocco Noviembre del 2002
Parte 4:
Manipulacin objetos y
colecciones
56
Marcela Genero Bocco Noviembre del 2002
28
VBA ofrece dos importantes dos importantes estructuras que pueden simplificar el
trabajo con objetos y colecciones:
Estructuras With ...End With
Estructuras For Each...next
29
Sub CerrarActivo()
For Each Book In Workbooks
If Book.Name <> ActiveWorkbook.Name Then Book.Close
Next Book
End Sub
Sub ConvertirMayus()
For Each Cell In Selection
Cell.Value = UCASE(Cell.Value)
Next Cell
End Sub
Convierte a maysculas un
rango previamente
seleccionado
59
Marcela Genero Bocco Noviembre del 2002
ESTRUCTURAS IF...THEN
Se usa para ejecutar una o ms instrucciones de forma condicional. La sintaxis general
es:
If condicin Then inst_verdaderas [Else inst_falsas]
Sub Positivos()
a = InputBox("Ingrese un nmero")
If a > 0 Then
MsgBox "Nmero Positivo"
End If
End Sub
Ingresa un nmero, y si es
mayor que cero muestra el
mensaje Nmero Positivo
Sub Positivos_Negativos()
a = InputBox("Ingrese un nmero")
If a > 0 Then MsgBox "Nmero Positivo" Else _
MsgBox "Nmero negativo"
End Sub
Ingresa un nmero, y si es
mayor que cero muestra el
mensaje Nmero Positivo,
y si no Nmero Negativo
60
30
ESTRUCTURAS IF...THEN
Ingresa un nmero, y si es
Sub Positivos_Negativos_Cero()
mayor que cero muestra el
a = InputBox("Ingrese un nmero")
mensaje Nmero Positivo,
si es menor que cero
If a > 0 Then
muestra el mensaje
MsgBox "Nmero Positivo"
Nmero Negativo, y si es
ElseIf a < 0 Then
cero muestra el mensaje
MsgBox "Nmero negativo "
Cero
ElseIf a = 0 Then
MsgBox " Cero "
End If
End Sub
La funcin IIF de VBA es parecida a la funcin IF (SI) de Excel
IIF(expresin, parte verdadera, parte falsa)
Sub Descuento()
MsgBox IIf(Range("A1") = 0, "Cero", "Distinto de Cero")
End Sub
61
Marcela Genero Bocco Noviembre del 2002
31
63
Marcela Genero Bocco Noviembre del 2002
64
32
BUCLES FOR...NEXT
Esta sentencia de iteracin se ejecuta un nmero determinado de veces
Su sintaxis es:
For contador = empezar To finalizar [Step valorincremento]
[Instrucciones]
[Exit For]
[instrucciones]
Next [contador]
Sub SumaNmeros
Sum = 0
For Count = 0 To 10
Sum = Sum + Count
Next Count
MsgBox Sum
End Sub
65
BUCLES FOR...NEXT
Sub SumaNmerosPares
Suma los nmeros pares
Sum = 0
entre 0 y 10
For Count = 0 To 10 Step 2
Sum = Sum + Count
Next Count
MsgBox Sum
End Sub
Sub BuclesAnidados
Dim MiMatriz (1 To 3, 1 To 3)
Asigna el valor 2 a
todos las casillas de una
For i = 1 To 3
matriz de 3 x 3
For j = 1 to 3
MiMatriz(i,j) = 2
Next j
Next i
End Sub
66
33
BUCLES DO...WHILE
Do While se ejecuta mientras se verifica una condicin especificada. Do While
puede tener cualquiera de estas dos sintaxis.
Do [While condicion]
[instrucciones]
[Exit Do]
[instrucciones]
Loop
Sub DoWhileDemo()
Do While IsEmpty(ActiveCell)
ActiveCell.Value = 0
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Do
[instrucciones]
[Exit Do]
[instrucciones]
Loop [While condicion]
67
Marcela Genero Bocco Noviembre del 2002
BUCLES DO...UNTIL
El bucle se ejecuta hasta que la condicin llegue a ser verdadera. Do Until puede tener
cualquiera de estas dos sintaxis.
Do Until condicion]
[instrucciones]
[Exit Do]
[instrucciones]
Loop
Do
[instrucciones]
[Exit Do]
[instrucciones]
Loop [Until condicion]
Sub DoUntilDemo()
Do
ActiveCell.Value = 0
ActiveCell.Offset(1, 0).Select
Loop Until Not IsEmpty(ActiveCell)
End Sub
68
Marcela Genero Bocco Noviembre del 2002
34
Parte 5:
Procedimientos SUB con
VBA
69
Marcela Genero Bocco Noviembre del 2002
35
36
73
37
Parte 6:
Procedimientos FUNCTION
con VBA
75
Marcela Genero Bocco Noviembre del 2002
38
78
Marcela Genero Bocco Noviembre del 2002
39
40
81
Marcela Genero Bocco Noviembre del 2002
41
42
85
Marcela Genero Bocco Noviembre del 2002
86
43
88
Marcela Genero Bocco Noviembre del 2002
44
NOMBRE DE CATEGORIA
0 Todas
1 Financieras
2 Fecha y hora
3 Matemticas y trigonomtricas
4 Estadsticas
5 Bsqueda y referencia
6 Base de datos
7 Texto
8 Lgicas
9 Informacin
10 Comandos
11 Personalizado
12 Control de macros
13 DDE/Externas
14 Definidas por el usuario
15 Ingeniera
Marcela Genero Bocco Noviembre del 2002
89
Parte 7:
Formularios
90
Marcela Genero Bocco Noviembre del 2002
45
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).
91
Marcela Genero Bocco Noviembre del 2002
UserForms
INSERTAR UN NUEVO 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).
92
Marcela Genero Bocco Noviembre del 2002
46
UserForms
Ventana
Propiedades
93
Marcela Genero Bocco Noviembre del 2002
UserForms
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.Clik()
End Sub
Cuando se despliega el UserForm, permanece visible en la pantalla hasta que se
oculta. El procedimiento puede tanto cargar 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.
94
Marcela Genero Bocco Noviembre del 2002
47
UserForms
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.
95
Marcela Genero Bocco Noviembre del 2002
UserForms
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.
96
Marcela Genero Bocco Noviembre del 2002
48
UserForms
CONTROLES DISPONIBLES PARA EL USUARIO
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.
97
Marcela Genero Bocco Noviembre del 2002
UserForms
CONTROLES DISPONIBLES PARA EL USUARIO
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.
98
Marcela Genero Bocco Noviembre del 2002
49
UserForms
CONTROLES DISPONIBLES PARA EL USUARIO
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 contrl 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.
99
Marcela Genero Bocco Noviembre del 2002
100
Marcela Genero Bocco Noviembre del 2002
50
UserForms
AJUSTAR LOS CONTROLES DEL CUADRO DE DILOGO
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.
101
Marcela Genero Bocco Noviembre del 2002
UserForms
AJUSTAR LOS CONTROLES DEL CUADRO DE DILOGO
102
Marcela Genero Bocco Noviembre del 2002
51
UserForms
AJUSTAR LAS PROPIEDADES DEL CONTROL
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.
103
Marcela Genero Bocco Noviembre del 2002
UserForms
USAR LA VENTANA DE PROPIEDADES
104
Marcela Genero Bocco Noviembre del 2002
52
UserForms
USAR LA VENTANA DE 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.
105
Marcela Genero Bocco Noviembre del 2002
UserForms
CAMBIAR EL ORDEN DE TABULACION
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
53
UserForms
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
107
Marcela Genero Bocco Noviembre del 2002
UserForms
DESPLEGAR UN UserForm
Sub MostrarDilogo()
UserForm1().show
End Sub
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.
108
Marcela Genero Bocco Noviembre del 2002
54
UserForms
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.
109
Marcela Genero Bocco Noviembre del 2002
UserForms
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
110
Marcela Genero Bocco Noviembre del 2002
55
UserForms
CREACIN DEL CUADRO DE DILOGO
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
111
Marcela Genero Bocco Noviembre del 2002
UserForms
CREACIN DEL CUADRO DE DILOGO
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
112
Marcela Genero Bocco Noviembre del 2002
56
UserForms
CREACIN DEL CUADRO DE DILOGO
UserForms
ESCRIBIR UN CDIGO PARA DESPLEGAR EL CUADRO DE DILOGO
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
114
Marcela Genero Bocco Noviembre del 2002
57
UserForms
PROBAR EL UserForm
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:
UserForms
AADIR PROCEDIMIENTOS DE CONTROLADOR DE EVENTO
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)
116
Marcela Genero Bocco Noviembre del 2002
58
UserForms
AADIR PROCEDIMIENTOS DE CONTROLADOR DE EVENTO
Private Sub BotnAceptar_Click()
Sheets(Hoja1).Activate
Next = Row = 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
117
Marcela Genero Bocco Noviembre del 2002
UserForms
AADIR PROCEDIMIENTOS DE CONTROLADOR DE EVENTO
118
Marcela Genero Bocco Noviembre del 2002
59
UserForms
VALIDAR LOS 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.
119
Marcela Genero Bocco Noviembre del 2002
Parte 8:
Controles
120
Marcela Genero Bocco Noviembre del 2002
60
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.
121
Marcela Genero Bocco Noviembre del 2002
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:
122
Marcela Genero Bocco Noviembre del 2002
61
123
Marcela Genero Bocco Noviembre del 2002
62
125
Marcela Genero Bocco Noviembre del 2002
63
127
Marcela Genero Bocco Noviembre del 2002
128
Marcela Genero Bocco Noviembre del 2002
64
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.
129
Marcela Genero Bocco Noviembre del 2002
Label4.Visible = False
End Sub
130
Marcela Genero Bocco Noviembre del 2002
65
If CamaAdicional = 1 Then
Precio = Precio + 1500
End If
If BaoCompleto = 1 Then
Precio = Precio + 2000
End If
TextBox4 = Precio
TextBox4.Visible = True
Label4.Visible = True
End Sub
131
Marcela Genero Bocco Noviembre del 2002
132
Marcela Genero Bocco Noviembre del 2002
66
EL 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 propiedadListStyle.
133
Marcela Genero Bocco Noviembre del 2002
EL 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)
134
Marcela Genero Bocco Noviembre del 2002
67
EL CONTROL LISTBOX
Aadir elementos a un Cuadro de lista en tiempo de diseo
135
Marcela Genero Bocco Noviembre del 2002
EL 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).
136
Marcela Genero Bocco Noviembre del 2002
68
EL CONTROL LISTBOX
Aadir elementos a un Cuadro de lista en tiempo de ejecucin
Sub ShowUserForm1()
With UserForm1.ListBox1
.RowSource =
.AddItemEnero
.AddItemFebrero
.AddItemMarzo
.AddItemAbril
.AddItemMayo
.AddItemJunio
.AddItemJulio
.AddItemAgosto
.AddItemSeptiembre
End With
UserForm1. Show
End Sub
137
Marcela Genero Bocco Noviembre del 2002
EL 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
138
Marcela Genero Bocco Noviembre del 2002
69
EL CONTROL LISTBOX
Seleccin de las opciones en el ListBox
La propiedad MultiSelect que en el momento de crear el control tiene el valor 0Single, 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
139
Marcela Genero Bocco Noviembre del 2002
EL 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.
140
Marcela Genero Bocco Noviembre del 2002
70
EL 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
141
Marcela Genero Bocco Noviembre del 2002
EL CONTROL LISTBOX
Elaborar un Cuadro de lista desde otra lista
71
EL 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
143
Marcela Genero Bocco Noviembre del 2002
EL CONTROL LISTBOX
Mover elementos de un cuadro de lista
144
Marcela Genero Bocco Noviembre del 2002
72
EL CONTROL LISTBOX
Mover elementos de un cuadro de lista
145
Marcela Genero Bocco Noviembre del 2002
EL 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 dospginas. 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 controlpropiamente 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.
146
Marcela Genero Bocco Noviembre del 2002
73
EL 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
147
Marcela Genero Bocco Noviembre del 2002
74
150
Marcela Genero Bocco Noviembre del 2002
75
EL 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.
151
Marcela Genero Bocco Noviembre del 2002
EL 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
152
Marcela Genero Bocco Noviembre del 2002
76
EL CONTROL RefEdit
EJEMPLO
153
Marcela Genero Bocco Noviembre del 2002
EL 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
154
Marcela Genero Bocco Noviembre del 2002
77
EL CONTROL RefEdit
EJEMPLO
Private Sub Opcin_Producto_Click()
Set UserRange = Range(RefEdit1.Text )
prod = 1
For Each cell In UserRange
prod = prod * cell.Value
Next cell
TextBox1 = prod
End Sub
155
Marcela Genero Bocco Noviembre del 2002
Parte 9:
Rangos
156
Marcela Genero Bocco Noviembre del 2002
78
Mover un rango
Sub Mover_Rango()
Range(A1:A8).Cut Range(C4)
End Sub
158
Marcela Genero Bocco Noviembre del 2002
79
159
Marcela Genero Bocco Noviembre del 2002
160
Marcela Genero Bocco Noviembre del 2002
80
161
Marcela Genero Bocco Noviembre del 2002
81
82
166
Marcela Genero Bocco Noviembre del 2002
83
84
169
Marcela Genero Bocco Noviembre del 2002
170
85
Parte 10:
Grficos
171
Marcela Genero Bocco Noviembre del 2002
172
86
173
Marcela Genero Bocco Noviembre del 2002
SEAT
1200
BMW
2000
AUDI
3200
FIAT
1300
RENAULT
CANTIDAD
AO 2000
3500
3000
2500
2000
1500
1000
500
0
3200
3100
2000
1300
1200
SEAT
3100
BMW
AUDI
FIAT
RENAULT
MARCAS
174
Marcela Genero Bocco Noviembre del 2002
87
Sub grafico()
Range("A2:E6").Select
Charts.Add
ActiveChart .ChartType = xlColumnClustered
ActiveChart .SetSourceData Source:=Sheets("Hoja1").Range("A2:E6"), PlotBy:= _
xlColumns
ActiveChart .Location Where:=xlLocationAsObject , Name:="Hoja1"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "VENTAS DEL AO 2000"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "MARCAS"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "CANTIDAD"
End With
ActiveChart .HasLegend = False
ActiveChart .ApplyDataLabels Type:=xlDataLabelsShowValue, LegendKey:=False
End Sub
175
88
178
Marcela Genero Bocco Noviembre del 2002
89
179
Marcela Genero Bocco Noviembre del 2002
180
90
91
92
93