Documente Academic
Documente Profesional
Documente Cultură
CDIGO
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
FIRMA
GAS (ST)
FECHA
07/09/2010
AUTORES
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
NDICE
1.
CONTROLES DE FORMULARIOS.................................................................................................................................. 5
1.1.
INTRODUCCIN ................................................................................................................................................... 5
1.2.
ETIQUETA.............................................................................................................................................................. 6
1.3.
1.4.
1.5.
BOTN.................................................................................................................................................................... 6
1.6.
CASILLA DE VERIFICACIN.............................................................................................................................. 6
1.7.
BOTN DE OPCIN.............................................................................................................................................. 7
1.8.
1.9.
MACROS.......................................................................................................................................................................... 11
2.1.
2.2.
2.3.
2.4.
3.
EL EDITOR DE VBA....................................................................................................................................................... 18
3.1.
3.2.
3.3.
4.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
4.1.
4.2.
MATRICES ........................................................................................................................................................... 30
4.2.1. Declarar matrices ......................................................................................................................................... 30
4.2.2. Declarar matrices con varias dimensiones.................................................................................................... 31
4.3.
4.4.
4.5.
4.6.
4.7.
CONTROL DE LA EJECUCIN.......................................................................................................................... 38
4.7.1. Instrucciones GoTo ...................................................................................................................................... 38
4.7.2. Construcciones If Then ............................................................................................................................. 39
4.7.3. Construcciones Select Case.......................................................................................................................... 40
4.7.4. Bucles For Next......................................................................................................................................... 41
4.7.5. Bucles Do While .......................................................................................................................................... 42
4.7.6. Bucles Do Until............................................................................................................................................ 43
5.
FUNCIONES .................................................................................................................................................................... 44
5.1.
5.2.
6.
TABLAS DINMICAS.................................................................................................................................................... 47
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
6.1.
6.2.
7.
8.
7.2.
7.3.
7.4.
GRFICOS ....................................................................................................................................................................... 61
8.1.
8.2.
8.3.
8.4.
8.5.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
1. CONTROLES DE FORMULARIOS
1.1.
INTRODUCCIN
Como primera herramienta para automatizar y simplificar los trabajos se dispone de una serie de controles personalizables
asociados a celdas en los que no suele hacer falta introducir cdigo VBA para su uso.
Existen dos tipos diferentes de conjuntos de controles:
Controles de formulario
Controles ActiveX
Los controles de formulario son nicos para Excel mientras que los controles ActiveX son propios de formularios de Visual
Basic.
Su localizacin se encuentra en la Barra de Herramientas llamada Formularios.
Etiqueta
Cuadro de edicin
Cuadro de grupo
Botn
Casilla de verificacin
Botn de opcin
Cuadro de lista
Cuadro combinado
Cuadro combinado de lista
Cuadro combinado desplegable
Barra de desplazamiento
Control de giro
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
1.2.
ETIQUETA
Es un texto que proporciona informacin sobre un control, de la hoja de clculo o de un formulario.
1.3.
CUADRO DE EDICIN
No est disponible en libros de Microsoft Excel. Este control se proporciona para que se pueda trabajar con las hojas de
dilogo de Excel versin 5.0.
1.4.
CUADRO DE GRUPO
Agrupa los controles relacionados, como los botones de opcin o las casillas de verificacin. Es necesario para poder
activar los botones de opcin o las casillas de verificacin.
1.5.
BOTN
Ejecuta una macro cuando se hace clic en l.
1.6.
CASILLA DE VERIFICACIN
Activa o desactiva una opcin. Puede activarse ms de una casilla de verificacin a la vez en una hoja o en un grupo.
Valor. Determina el estado de la casilla de verificacin; es decir; si est activada (Activado), desactivada (Sin
activar) o ninguna de las dos (Mixto).
Vincular con la celda. Una celda que devuelve el estado de la casilla de verificacin. Si la casilla de verificacin
est activada, la celda del cuadro Vincular con la celda contiene VERDADERO. Si la casilla de verificacin est
desactivada, la celda contiene FALSO. Si la casilla de verificacin es mixta, la celda contiene #N/A. Si la celda
est vaca, Excel interpreta que el estado de la casilla de verificacin es FALSO.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
1.7.
BOTN DE OPCIN
Selecciona una de las opciones de un grupo contenido en un cuadro de grupo. Permite escoger una sola de todas las
posibilidades incluidas en el cuadro de grupo.
Propiedades principales del botn de opcin:
Valor. Determina el estado inicial del botn de opcin; es decir; si est activado (Activado), desactivado (Sin
activar).
Vincular con la celda. Devuelve el nmero del botn de opcin seleccionado en el grupo de opciones (el primer
botn de opcin es el nmero 1). Se debe de utilizar la misma celda Vincular con la celda para todas las opciones
de un grupo. Despus se podr utilizar el nmero devuelto en una frmula o macro para responder a la opcin
seleccionada.
1.8.
CUADRO DE LISTA
Muestra una lista de elementos.
Rango de entrada. Hace referencia al rango que contiene los valores que se mostrarn en el cuadro de lista.
Tipo de seleccin. Especifica el modo en que pueden seleccionarse los elementos de la lista. Si se define el tipo de
seleccin como Mltiple o Extendida, la celda especificada en el cuadro Vincular con la celda no se tendr en
cuenta. La seleccin mltiple o extendida no se puede vincular con una celda, por lo que deber usarse cdigo
VBA para poder usar la opcin.
Vincular con la celda. Devuelve el nmero del elemento seleccionado en el cuadro de lista (el primer elemento de
la lista es 1). Este nmero puede utilizarse en una frmula o macro para que devuelva el elemento real del rango
de entrada.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
1.9.
CUADRO COMBINADO
Es un cuadro con una lista desplegable. El elemento que se seleccione en el cuadro de lista aparecer en el cuadro de texto.
Rango de entrada. Hace referencia al rango que contiene los valores que se mostrarn en la lista desplegable.
Vincular con la celda. Devuelve el nmero del elemento seleccionado en el cuadro combinado (el primer
elemento de la lista es 1). Este nmero puede utilizarse en una frmula o macro para que devuelva el elemento real
del rango de entrada.
Lneas de unin verticales. Especifica el nmero de lneas que aparecer en la lista desplegable.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
1.10.
No disponible en libros de Microsoft Excel. Este control se proporciona para que pueda trabajar con las hojas de dilogo
de Excel versin 5.0.
1.11.
No disponible en libros de Microsoft Excel. Este control se proporciona para que pueda trabajar con las hojas de dilogo
de Excel versin 5.0.
1.12.
BARRA DE DESPLAZAMIENTO
Sirve para desplazarse a travs de un rango de valores cuando se hace clic en las flechas de desplazamiento o cuando se
arrastra el cuadro de desplazamiento. Puede moverse a travs de una pgina de valores haciendo clic entre el cuadro de
desplazamiento y una flecha de desplazamiento.
Propiedades principales de la barra de desplazamiento:
Valor actual. La posicin relativa del cuadro de desplazamiento dentro de la barra de desplazamiento.
Valor mximo. La posicin del cuadro de desplazamiento ms lejana a la parte superior de una barra de
desplazamiento vertical o al extremo derecho de una barra de desplazamiento horizontal.
Incremento. El tamao del espacio que se desplazar el cuadro de desplazamiento cuando se haga clic en la flecha
situada en cualquier extremo de la barra de desplazamiento.
Cambio de pgina. El tamao del espacio que se desplazar el cuadro de desplazamiento cuando se haga clic
entre el cuadro de desplazamiento y una de las flechas de desplazamiento.
Vincular con la celda. Devuelve la posicin actual del cuadro de desplazamiento. Este nmero puede utilizarse en
una frmula o macro para responder a la posicin del cuadro de desplazamiento.
Valor mnimo. La posicin del cuadro de desplazamiento ms prxima a la parte superior de una barra de
desplazamiento vertical o al extremo izquierdo de una barra de desplazamiento horizontal.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
1.13.
CONTROL DE GIRO
Aumenta o disminuye un valor. Para aumentar el valor, haga clic en la flecha arriba; para disminuir el valor, haga clic en
la flecha abajo.
Propiedades principales del control de giro:
Valor actual. La posicin relativa del control de giro dentro del rango de valores permitidos.
Valor mnimo. El valor ms bajo permitido para el control giro.
Valor mximo. El valor ms alto permitido para el control giro.
Incremento. La cantidad de aumento o disminucin del control de giro cuando se hace clic en las flechas.
Vincular con la celda. Devuelve la posicin actual del control de giro. Este nmero puede utilizarse en una
frmula o macro para que devuelva el valor real que el control de giro debe seleccionar.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
10
2. MACROS
Una macro es una secuencia de instrucciones que automatizan algunos aspectos de Excel de forma que podamos trabajar de
forma ms eficiente y reduciendo la posibilidad de errores.
No es necesario ser un usuario experto para crear y usar Macros de VBA simples. Los usuarios casuales pueden poner en
marcha la grabadora de macros y Excel grabar todas las acciones y las convertir en cdigo VBA. Cuando se ejecute la macro,
Excel ejecutar las acciones otra vez.
2.1.
CONTROLES DE MACRO
Los controles para la grabacin y ejecucin de las macros se encuentran en los siguientes sitios:
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
11
2.2.
Para grabar una macro se pulsa el botn Grabar macro y se abrir la ventana de la Figura 2.3.
2.3.
Al accionar el botn Macro se abre la ventana de la Figura 2.5. y en ella aparece un listado de las macros grabadas en el libro
o cargadas al abrir Excel. Una vez seleccionada se puede ejecutar completa, paso a paso, modificarla mediante VBA, crear una
macro nueva o eliminar una existente.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
12
Para crear una macro nueva se escribe el nombre y se pulsa Crear, que se habr activado al iniciar a escribir el nombre. De
esta forma se accede al Editor de VBA para introducir el cdigo de la macro.
Figura 2.5. Ventana Botn Macros...
2.4.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
13
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
14
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
15
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
16
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
17
3. EL EDITOR DE VBA
Todo el trabajo con VBA se realiza con el editor de Visual Basic (VBE). Es una aplicacin separada que trabaja perfectamente
integrada en Excel. Esto quiere decir que Excel puede abrir el editor de Visual Basic, pero no puede ejecutarse por separado.
Los mdulos de VBA se almacenan junto a los archivos del libro, pero no son visibles a menos que se active el editor de Visual
Basic.
3.1.
Cuando se trabaja con Excel se puede activar el editor de Visual Basic de las siguientes formas:
3.2.
Pulsando Alt-F11
Seleccionando Herramientas > Macro > Editor de Visual Basic
Haciendo clic en el botn del editor de Visual Basic que se encuentra en la barra de herramientas de Visual Basic.
El editor de Visual Basic consta de diferentes partes. Las ms importantes son las siguientes:
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
18
Lista de objetos
Explorador de
proyectos
Lista de propiedades
Ventana de
propiedades
Ventana
de cdigo
Ventana
immediato
Ventana
inspecciones
Ventana
locales
19
3.3.
Cuando se est trabajando con el editor de Visual Basic, cada libro de Excel y complemento que est abierto en ese momento se
considera un proyecto.
Cuando se activa el editor de Visual Basic, no se puede presuponer que el mdulo del cdigo que se est mostrando se
corresponde con el objeto sealado en la ventana del explorador de proyectos. Para asegurarnos de que estamos trabajando con
mdulo de cdigo correcto, se debe hacer siempre clic en el objeto en la ventana del explorador de proyectos.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
20
21
Para exportar un objeto, se selecciona de la ventana del explorador de proyectos y se escoge Archivo > Exportar archivo (o
pulsando Control-E). Aparecer un cuadro de dilogo que solicita un nombre de archivo. Si se exporta un UserForm, cualquier
cdigo asociado al mismo tambin se exportar.
Para importar un archivo a un proyecto, se selecciona el nombre del proyecto en la ventana del explorador de proyectos y se
escoge Archivo > Importar archivo. Aparecer un cuadro de dilogo que solicita un archivo. Slo se puede importar un archivo
que ha sido exportado utilizando Archivo > Exportar archivo.
Copiar y pegar. Copiar el cdigo de otro mdulo y pegarlo en el mdulo en el que se est trabajando.
Funcin de grabacin de macros. Utilizar la funcin de grabacin de macros de Excel para grabar acciones y
convertirlas en cdigo VBA.
Para iniciar una Subrutina se debe escribir la instruccin Sub+espacio+nombre(). automticamente Excel introduce la
instruccin End Sub. Nuestro cdigo se introducir entre estas dos lneas.
Sub ShowValue()
Msgbox Worksheets(Hoja1).Range(A1).Value
End Sub
El mtodo de escritura es el mismo que cualquier editor de textos salvo que a medida que se va introduciendo el cdigo las
instrucciones se visualizan en azul y los nombres, variables, etc. en negro.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
22
Una nica instruccin puede ser todo lo larga que haga falta. Sin embargo, para facilitar su lectura, es aconsejable dividirla en
dos o ms lneas. Para ello se coloca un espacio seguido de un carcter de subrayado al final de la lnea y despus se pulsa Intro
y se contina la instruccin en la siguiente lnea.
MsgBox No se puede encontrar & UCase(SHORTCUTMENUFILE) _
& vbCrLf & vbCrLf & El archivo debera encontrase en _
& ThisWorkbook.Path & vbCrLf & vbCrLf & _
Puede que tenga a volver a instalar el programa, vbCritical, APPNAME
Es posible personalizar la forma en que el Editor de VBA nos indica errores y cmo visualiza las instrucciones. Estas opciones
se hallan en Herramientas > Opciones.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
23
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
24
Cuando la opcin Separador de procedimientos est activada, se mostrarn barras de separacin al final de cada procedimiento
en la ventana de cdigo. Se puede observar la barra en la Figura 3.7.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
25
El principal propsito de VBA es manipular datos. Algunos datos se ubican en objetos, como rangos de hoja (valores
introducidos en las celdas). Otros datos se guardan en las variables que se crean. Una variable es simplemente una posicin de
almacenamiento del ordenador con nombre.
Los valores se asignan a una variable mediante el signo =. Las reglas que tiene VBA para los nombres de las variables:
Se pueden usar caracteres del alfabeto, nmeros y algunos caracteres de puntuacin, pero el primer carcter debe
ser una letra del alfabeto.
Los nombres de variables pueden llegar hasta los 254 caracteres. Pero no se recomiendan nombres tan largos.
No se pueden usar ni espacios ni puntos. Para hacer los nombres ms legibles debe usarse el guin bajo _.
Los caracteres especiales usados en instrucciones como (#, $, %, &, ! ) no pueden incluirse en un nombre de
variable.
Tipo de dato
Bytes usados
Matriz de valores
Byte
1 byte
0 a 255
Boolean
2 bytes
Verdadero o Falso
Integer
2 bytes
-32.768 a 32.768
Long
4 bytes
-2.147.483.648 a 2.147.483.648
Single
4 bytes
Double
8 bytes
-1,79769313486232E308 a -4,94065645841247E-324
(valores negativos); 4,94065645841247E-324 a
1,79769313486232E308 (valores positivos)
Currency
8 bytes
-922.337.203.685.477,5808 a 922.337.203.685.477,5808
Decimal
14 bytes
Data
8 bytes
Object
4 bytes
10 bytes + la longitud
de la matriz.
0 a aproximadamente 2 billones
La longitud de la
matriz
1 a aproximadamente 65.400
16 bytes
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
26
Tipo de dato
Bytes usados
Matriz de valores
22 bytes + la longitud
de la matriz
0 a aproximadamente 2 billones
Variable
mbito
Un solo procedimiento
Un solo mdulo
Incluyendo una declaracin Dim o Private antes del primer procedimiento de un mdulo.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
27
Sub Macro_1()
[El cdigo va aqu]
End Sub
Sub Macro_2()
[El cdigo va aqu]
End Sub
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
28
Period = 12
Cadenas de longitud fija: se declaran con un nmero especfico de caracteres. El valor mximo es 65.535
caracteres.
Cada carcter de una matriz necesita un byte para guardarlo y una pequea cantidad extra de almacenamiento para el
encabezado de cada cadena. Cuando se declara una variable de cadena mediante la instruccin Dim se puede especificar la
longitud (una cadena de longitud fija) o podemos dejar que VBA lo controle de forma dinmica (una cadena de longitud
variable).
Dim MyString As String * 50
29
de matriz de VBA.
Sumas ( + ).
Restas ( - ).
Multiplicaciones ( * ).
Divisiones ( / ).
Potencias ( ^ ).
Etc.
Igual ( = ).
Mayor que ( > ).
Menor que ( < ).
Mayor que o igual a ( >= ).
Menor que o igual a ( <= ).
No igual a ( <> ).
Operador
4.2.
Funcin
Not
And
Or
XoR
Eqv
Imp
MATRICES
Una matriz es un grupo de elementos del mismo tipo que tienen un nombre comn. Hacemos referencia a un elemento
especfica de la matriz usando el nombre de la matriz y un nmero de ndice.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
30
Cuando se declara una matriz, al especificar solamente el nmero de ndice ms alto, VBA asume que el 0 es el nmero de
ndice ms bajo. Por lo tanto el primer ejemplo tiene 101 elementos y el segundo 100 elementos.
Si se quisiera que VBA escogiera como 1 el ndice ms bajo para todas las matrices en las que se declare nicamente el valor
ms alto, se debera incluir la siguiente instruccin antes de cualquier procedimiento de mdulo:
Option Base 1
Para asignar un valor a un elemento de la matriz se indica entre parntesis el nmero del elemento y se indica el valor tras un
igual:
Matrix_3 (9) = 2.71828
4.3.
OBJETOS Y COLECCIONES
Cuando se trabaja con VBA hay que entender el concepto de objetos y modelos de objetos de Excel. Se pueden concebir en
trminos de jerarqua. En la parte superior de este modelo est el objeto Application (en este caso el propio Excel).
En la Ayuda de Excel el modelo de objetos completo de Excel est esquematizado.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
31
Algunos objetos pueden contener otros objetos. Por ejemplo, la coleccin Workbook consta de todos los objetos Workbook
abiertos y un objeto Workbook contiene otros objetos, algunos de los cuales son los siguientes:
Cada uno de estos objetos, a su vez, puede contener otros objetos. Una coleccin Worksheet consta de todos los objetos
Worksheet de un Workbook. Un objeto Worksheet consta de muchos otros objetos, entre los que se incluyen los
siguientes:
4.3.2. Colecciones
Una coleccin es un grupo de objetos de la misma clase y una coleccin es por s misma un objeto.
Para hacer referencia a un nico objeto de una coleccin, colocamos el nombre del objeto o el nmero de ndice entre parntesis
despus del nombre de la coleccin, como en este caso:
Worksheets (Hoja1)
Worksheets (1)
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
32
Nos referimos a un objeto en el cdigo VBA especificando su posicin en la jerarqua de objetos, usando un punto como
separador. Los nombres introducidos dentro de objetos deben indicarse entre comillas.
Por ejemplo, nos podemos referir a una libro llamado Book1.xls como Application.Workbooks(Book1.xls).
Esta expresin se refiere al libro Book1.xls de la coleccin Workbooks que recoge todos los libros abiertos en un instante. La
coleccin Workbooks est contenida en el objeto Application (que es Excel). Extendiendo esto a otro nivel, nos referiremos a la
hoja Sheet1 en el libro Book1 de la forma siguiente:
Application.Workbooks(Book1.xls).Worksheets(Sheet1)
Se puede llevar a otro nivel y referirse a una celda en concreto como sigue:
Application.Workbooks(Book1.xls).Worksheets(Sheet1).Range(A1)
Si se omiten referencias, Excel usa los objetos activos. Si Book1.xls es el libro activo, el procedimiento se puede simplificar de
la siguiente forma:
Worksheets(Sheet1).Range(A1)
Si se conoce que la hoja Sheet1 es la hoja activa, se puede simplificar incluso ms:
Range(A1)
Los objetos tienen propiedades. Una propiedad puede pensarse como un ajuste de un objeto. Por ejemplo, un objeto Range tiene
propiedades, como Value y Address. Un objeto Chart tiene propiedades como HasTitle y Type. Podemos usar VBA para
determinar propiedades de objetos y cambiarlas.
Nos referimos a las propiedades combinando el objeto con su propiedad, separndola mediante un punto.
Por ejemplo, nos podemos referir al valor de la celda A1en la hoja Sheet1 como sigue:
Worksheets(Sheet1).Range(A1).Value
Se pueden asignar valores a las variables. Para asignar el valor de la variable Interest a la celda A1 en la hoja Sheet1 se usa la
siguiente instruccin:
Interest = Worksheets(Sheet1).Range(A1).Value
Los objetos tienen mtodos. Un mtodo es una accin que es realizada por el objeto. Por ejemplo, uno de los mtodos para los
objetos Range es ClearContents. Este mtodo limpia el contenido de Range.
Los mtodos se especifican combinando el objeto con el mtodo, separado por un punto. Por ejemplo, para limpiar el contenido
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
33
4.4.
Un objeto Range est contenido en un objeto Worksheet y consta de una nica celda o serie de celdas de una hoja simple.
Para hacer referencia a objetos Range en el cdigo VBA lo hacemos de tres formas:
Propiedad Range
Propiedad Cells
Propiedad Offset
ActiveWorksheet
ActiveSheet
ActiveCell
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
34
La propiedad Range tambin reconoce nombres definidos en libros. Por ejemplo si una celda se llama Gamma podemos
introducir un valor en esa celda de la siguiente forma:
Worksheets(Sheet1).Range(Gamma).Value = 1
El siguiente ejemplo introduce el mismo valor en un rango de 20 celdas:
Worksheets(Sheet1).Range(A10:B10).Value = 3
Tambin se puede escribir con la segunda sintaxis de la forma:
Worksheets(Sheet1).Range(A10, B10).Value = 3
Para introducir un valor en una interseccin de celdas usamos el operador interseccin que en VBA es el espacio. En el
siguiente ejemplo introducimos el valor 3 a la celda C6:
Worksheets(Sheet1).Range(C1:C10 A6:E6).Value = 3
Para introducir el valor 3 en cinco celdas diferentes se puede usar la siguiente instruccin:
Worksheets(Sheet1).Range(A1;A3;A5;A7;A9).Value = 3
En el caso de que queramos trabajar con celdas activas aplicando la propiedad Range, la celda activa se transforma en el origen
de coordenadas de la nueva instruccin Range. Es decir, en el siguiente ejemplo se asigna el valor 5 a la celda una posicin a la
derecha y una posicin por debajo de la activa:
ActiveCell.Range(B2).Value = 3
VBA tiene como propiedad por defecto del objeto Range la propiedad Value, por lo tanto si se omite la escritura de .Value
el mismo VBA asigna el valor introducido a esta propiedad.
Worksheets(Sheet1).Range(A1) = 1
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
35
Worksheets(Sheet1).Cells(4, 2) = 7
Si se quiere hacer una entrada en una celda relativa a la celda activa se puede proceder del mismo modo que con la propiedad
Range. Sita nuestro origen de coordenadas en la celda activa y nos movemos en referencia a ella:
ActiveCell.Cells(1,1) = 3
La segunda sintaxis del mtodo Cells utiliza un solo argumento que es la posicin absoluta de la celda en el conjunto de la hoja.
Admite los valores comprendidos entre 1 y 16.777.216. Las celdas estn numeradas empezando en A1 y continuando hacia la
derecha y despus hacia abajo en la siguiente fila (65.536 filas por 256 columnas). Por ejemplo, la celda A1 es la 1, la B1 es la
2 y la A2 la 257. En el siguiente ejemplo se introduce el valor 6 en la celda H3:
Worksheets(Sheet1).Cells(520) = 6
Esta sintaxis puede utilizarse con un objeto Range. En este caso, la celda que se devuelve es relativa al objeto Range al que se
hace referencia. Por ejemplo, si el objeto Range es A1:D10 (40 celdas), la propiedad Cells puede tener un argumento de 1 a 40
y devolver una de las celdas en el objeto Range. En el siguiente ejemplo se introduce el valor 1500 en la celda A2 porque A2
es la quinta celda (contando desde la parte superior derecha y hacia abajo) en el rango al que se hace referencia:
Worksheets(Sheet1).Range(A1:D10).Cells(5) = 1500
Con la tercera sintaxis hacemos referencia a todas las celdas de la hoja.
4.5.
FUNCIONES INTEGRADAS
VBA tiene una gran cantidad de funciones integradas que simplifican los clculos y las operaciones. Para obtener una lista de
de las funciones propias de VBA, mientras escribimos cdigo debemos escribir VBA seguido de un punto (.) y se abrir un
men de donde podremos escoger la funcin necesaria.
Tambin es posible el uso de funciones propias de Excel como por ejemplo Mdeterm para calcular un determinante de una
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
36
matriz sin tener que programar el clculo mediante cdigo. Se debe de comprobar que VBA no tiene ninguna funcin propia
para realizar la misma accin ya que sino deberemos usar la funcin de VBA.
4.6.
VBA ofrece dos importantes construcciones que pueden simplificar el trabajo con objetos y colecciones:
37
[Exit For]
[instrucciones]
Next [elemento]
Un ejemplo concreto es el siguiente:
Sub Macro1( )
Dim MyArray(5) As Double
For i = 0 to 5
MyArray(i) = Rnd
Next i
For Each n In MyArray
Debug.Print n
Next n
End Sub
4.7.
CONTROL DE LA EJECUCIN
Algunos procedimientos de VBA comienzan en la parte superior y progresan lnea a lnea hacia abajo. Sin embargo, muchas
veces necesitaremos controlar el flujo de las rutinas omitiendo algunas instrucciones, ejecutando algunas instrucciones varias
veces y comprobando las condiciones para determinar qu har la rutina a continuacin. Otros modos de controlar la ejecucin
de los procedimientos VBA son:
Instrucciones Go To.
Construcciones If Then.
Bucles For Next.
Bucles Do While.
Bucles Do Until.
38
End Sub
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
39
Esta ltima construccin se podra introducir separando la instruccin ElseIf en dos partes, Else + If:
Sub Saludo_3( )
If Time < 0.5 Then
MsgBox Buenos das
Else
If Time >= 0.5 And Time < 0.75 Then
MsgBox Buenas tardes
Else
If Time >= 0.75 Then
MsgBox Good Evening
End If
End If
End If
End Sub
Existe una alternativa a la construccin If Then que es la funcin IIf. Esta funcin tiene tres argumentos y funciona de
forma casi igual que la funcin Si de Excel. Su sintaxis es:
IIf (expr , parte_verdad , parte_falso)
Donde:
40
Case Else
[instrucciones predeterminadas]
End Select
Un ejemplo de la construccin podra ser:
Sub Saludo_3 ( )
Select Case Weekday (Now)
Case 1 Or 7
MsgBox Es fin de semana
Case Else
MsgBox No es fin de semana
End Select
End Sub
41
Sub DoWhile_2( )
Do
ActiveCell.Value = 0
ActiveCell.Offset (1,0).Select
Loop While Not IsEmpty(ActiveCell)
End Sub
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
42
Do
[instrucciones]
[Exit Do]
[instrucciones]
Loop [until condicin]
Los ejemplos anteriores se escribiran de la siguiente forma:
Sub DoUntil_1( )
Do Until ActiveCell.Value = 0
ActiveCell.Value = 0
ActiveCell.Offset (1,0).Select
Loop
End Sub
Sub DoUntil_2( )
Do
ActiveCell.Value = 0
ActiveCell.Offset (1,0).Select
Loop Until ActiveCell.Value = 0
End Sub
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
43
5. FUNCIONES
Los procedimientos Function se pueden usar en dos situaciones:
5.1.
PROCEDIMIENTOS DE FUNCIN
Public (Opcional). Indica que todos los dems procedimientos de todos los dems mdulos de todos los
proyectos activos de VBA pueden acceder al procedimiento Function.
Private (Opcional). Indica que slo otros procedimientos del mismo mdulo que el procedimiento Function
pueden acceder a l.
Static (Opcional). Indica que los valores de las variables declaradas en el procedimiento Function se
mantienen entre una invocacin y otra.
Function (Obligatorio). Es la palabra clave que indica el principio de un procedimiento que devuelve un valor u
otros datos.
Nombre (Obligatorio). Representa cualquier nombre vlido del procedimiento Function, que debe seguir las
mismas reglas que un nombre de variable.
Lista argumentos (Opcional). Representa una lista de una o ms variables que representan argumentos
pasados al procedimiento Function. Los argumentos se encuentran entre parntesis. Usamos una coma para
separar dos argumentos.
End Function (Obligatorio). Es una palabra clave que indica el final del procedimiento.
Esta forma de definir funciones no puede utilizar nombres de funciones integradas en Excel ya que sino Excel usar la
predeterminada.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
44
Si el cdigo VBA necesita llamar a una funcin que ha sido definida en otro libro, se deber establecer una
referencia al otro libro usando el comando del editor de VB Herramientas > Referencias. Otra opcin es insertar la
referencia al archivo antes de la Function.
Las funciones declaradas como Private no aparecern en el cuadro de dilogo Pegar funcin de Excel. Por lo
tanto, no podr utilizarse como una frmula de hoja.
Los procedimientos Function no se pueden ejecutar mediante el comando Ejecutar del Editor de Visual Basic.
Podemos invocar funciones personalizadas desde un procedimiento, de la misma forma que invocamos funciones integradas.
Por ejemplo, tras definir una funcin llamada Integral, podemos introducir una instruccin como la que sigue:
Area = Integral (Matriz)
Esta instruccin ejecuta la funcin Integral con Matriz como argumento, devuelve el resultado de la funcin y lo asigna a
la variable Area.
Tambin podemos usar el mtodo Run del objeto Application como se muestra a continuacin:
Area = Application.Run (Integral, Matriz)
El primer argumento para el mtodo Run es el nombre de la funcin. Los siguientes argumentos representan los argumentos
para la funcin. Los argumentos para el mtodo Run pueden ser cadenas literales, nmeros o variables.
Usar funciones personalizadas en una frmula de hoja es similar a usar las funciones integradas, excepto que debemos
asegurarnos de que Excel puede localizar el procedimiento Function.
En el cuadro Insertar funcin de Excel, las funciones personalizadas aparecen por defecto bajo la categora Definidas por el
Usuario.
5.2.
ARGUMENTOS DE FUNCIN
Los argumentos pueden ser variables (incluyendo matrices), constantes, literales o expresiones.
Algunas funciones no tienen argumentos.
Algunas funciones tienen un nmero fijo de argumentos necesarios (entre 1 y 60).
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
45
En las funciones usadas en Excel separaremos los argumentos por un punto y coma ( ; ) a diferencia de como lo hacemos en
VBA.
= Integral2 (A1 ; B1)
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
46
6. TABLAS DINMICAS
Una tabla dinmica en Excel permite hacer resmenes de una Base de Datos, utilizndose para, promediar, o totalizar datos.
6.1.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
47
Semana en Columna
Vehculos en Fila
Cantidad en Datos.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
48
49
Mes
Semana Vehculo Cantidad
Marzo
3 Furgoneta 82961,77
Febrero
3 Furgoneta 73908,44
Enero
3 Furgoneta
2364,29
Tabla 6.2. Detalle de operaciones en una celda de la tabla dinmica.
Pulsando sobre los mens desplegables se pueden seleccionar las filas o columnas que deseemos ver en la tabla. Se indica en la
Figura 6.8.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
50
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
51
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
52
6.2.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
53
SourceData es el rea de los datos de la tabla que acta como Base de datos. Es el rango que se introduce en el
paso 2 del asistente visto antes. La forma de indicarlo ser cualquiera de las vistas anteriormente para indicar
rangos de celdas.
Para aadir los campos se debe hacer en la instruccin PivotTable. Aprovechando que hemos definido PT como
PivotTable se puede escribir de la siguiente forma:
With PT
.PivotFields(Mes).Orientation = xlPageField
.PivotFields(Semana).Orientation = xlColumnField
.PivotFields(Vehculo).Orientation = xlRowField
.PivotFields(Cantidad).Orientation = xlDataField
End With
Con esta instruccin se introducen los campos de forma anloga a como se hace con el asistente, con las siguientes
consideraciones:
Set PT = PTCache.CreatePivotTable _
(TableDestination:= Sheets(Name_sheet).Range(B10), _
TableName:=Tabla dinmica 1)
With PT
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
54
.PivotFields(Mes).Orientation = xlPageField
.PivotFields(Semana).Orientation = xlColumnField
.PivotFields(Vehculo).Orientation = xlRowField
.PivotFields(Cantidad).Orientation = xlDataField
End With
End Sub
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
55
7. FORMULARIOS INTEGRADOS
Los cuadros de dilogo son los elementos ms importantes de la interfaz de usuario de los programas Windows. En Excel se
pueden crear cuadros de dilogo personalizados creando UserForms.
7.1.
Los cuadros de dilogo se pueden crear partiendo de cero o se pueden aprovechar los ya integrados en Excel. Estos cuadros
integrados son:
7.2.
Es un cuadro de dilogo sencillo que permite al usuario introducir datos. Se puede introducir un texto, un nmero o incluso
seleccionar un rango.
La sintaxis de esta funcin es:
InputBox (Mensaje [, ttulo] [, predeterminado] [, xpos] [, ypos] _
[, archivo_ayuda, contexto])
Donde:
Esta funcin solicita al usuario alguna informacin. Esta informacin siempre es devuelta por la funcin como una cadena, por
lo que ser necesario convertir el resultado en un valor. Si la cadena devuelta es un nmero lo podemos transformar en un valor
numrico mediante el comando de VBA Val.
Se puede aadir un ttulo para el cuadro de dilogo, un valor predeterminado y especificar su posicin en la pantalla. Si se
especifica un tema de ayuda personalizado, el cuadro de introduccin de datos incluir un botn de ayuda.
Por ejemplo la siguiente lnea crea el cuadro de dilogo de la figura 7.1.
Username = InputBox("Entre su nombre", "Identificacin")
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
56
7.3.
La utilizacin del mtodo InputBox de Excel en lugar del de VBA tiene tres ventajas:
Cdigo
Significado
Una frmula.
Un nmero.
16
64
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
57
7.4.
La funcin MsgBox de VBA es un medio sencillo de mostrar un mensaje al usuario o de obtener una respuesta simple (como
Aceptar o Cancelar).
La sintaxis es la siguiente:
MsgBox(Prompt[, Buttons][, Title][, Helpfile, Context])
Donde:
Buttons. Opcional. Una expresin numrica que determina qu botones e iconos se muestran en el cuadro de
mensaje.
Helpfile, Context. Opcional. El archivo de ayuda y el tema de ayuda.
Las constantes usadas para los botones de la funcin MsgBox se indican en la siguiente tabla:
Constante
Valor
Descripcin
vbOKOnly
vbOKCancel
vbAbortRetryIgnore
vbYesNoCancel
vbYesNo
vbRetryCancel
vbCritical
16
vbQuestion
32
vbExclamation
48
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
58
Constante
Valor
Descripcin
vbInformation
64
vbDefaultButton1
vbDefaultButton2
256
vbDefaultButton3
512
vbDefaultButton4
768
vbSystemModal
4096
Constante
Valor
Descripcin
vbOK
Aceptar.
vbCancel
Cancelar.
vbAbort
Anular.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
59
Constante
Valor
Descripcin
vbRetry
Reintentar.
vbIgnore
Omitir.
vbYes
S.
vbNo
No.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
60
8. GRFICOS
8.1.
PARMETROS BSICOS
Excel mantiene todos los grficos como objetos de grfico dentro del Modelo de objetos de Excel.
Excel guarda cada hoja de grfico como un objeto de grfico, que son subordinados del correspondiente objeto Workbook.
Cada objeto de grfico tiene diferentes objetos subordinados que representan los diferentes elementos de un grfico.
Los grficos incrustados son los grficos que se aaden a una hoja de clculo existente en un punto determinado. En este caso el
grfico queda subordinado al objeto Worksheet. Todos los grficos de una misma hoja de clculo forman una coleccin
ChartObject que contiene todos los grficos de esa hoja.
Los principales objetos subordinados al objeto Chart son los siguientes:
Axes Collection. Incluye los siguientes objetos AxisTitle, Border, Gridlines y TickLabels.
ChartArea. Incluye los objetos Border, Font e Interior.
ChartGroups Collection. Coleccin de los objetos ChatrGroup que representan cada grupo de datos en un
grfico.
PageSetup. Contiene la informacin de configuracin de la pgina incluyendo mrgenes, medida del papel, etc.
ChartTitle. Representa el ttulo de un grfico. Incluye los objetos Border, Characters, Font e
Interior.
DataTable. Representa la tabla de datos de un grfico. Incluye un objeto Border.
Floor. Representa el suelo de un grfico 3D. Incluye los objetos Border e Interior.
Legend. Representa la leyenda del grfico. Incluye los objetos Font, Border, Interior y
LegendEntries.
SeriesCollection Collection. Contiene los objetos Series que representan los datos en el grfico. Incluye
los objetos Border, Points e Interior.
Tab. Representa una lengeta de un grfico.
Walls. Representa las paredes de un grfico 3D. Incluye los objetos Border e Interior.
Excel tiene 14 tipos de grficos teniendo cada uno al menos dos subtipos de grficos. Se selecciona un grfico especificando un
valor de la constante xlChartType para la propiedad ChartType.
8.2.
Cuando se crea un grfico, VBA crea un nuevo objeto Chart que contiene todas las opciones correspondientes al grfico.
Adems contiene diferentes objetos que representan las caractersticas del grfico.
Como existe la posibilidad de crear una hoja de grfico o incrustar un grfico en una hoja, cuando se crea un grfico en una
nueva hoja se usa el objeto Chart directamente, cuando se incrusta en una hoja se utiliza la coleccin de objetos
ChartObjects.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
61
Para crear una hoja de grfico separada se usa el mtodo Add con el objeto Chart. Con este mtodo se pueden usar tres
parmetros diferentes para especificar la localizacin del grfico y el nmero de hojas a aadir. Utilizando el parmetro
Before se especifica la hoja antes de la cual ir el grfico. El parmetro After indica despus de qu hoja se situar la hoja
de grfico. Finalmente si se desean crear mltiples hojas de grfico se usa el parmetro Count para indicar el nmero de hojas
a aadir.
El cdigo a introducir empieza por declarar el nuevo grfico:
Dim Nuevo_grafico As Chart
Se aade mediante la instruccin:
Set Nuevo_grafico = ThisWorkbook.Charts.Add()
Cambiamos el nombre a la hoja de grfico con la instruccin:
Nuevo_grafico.Name = Nuevo nombre de hoja
En cualquier grfico se debe especificar el rango de datos. Esto se realiza mediante la instruccin SetSourceData que necesita
dos parmetros diferentes. Su sintaxis es:
Nuevo_grafico.SetSourceData :=Source, PlotBy
Donde:
Un ejemplo sera:
Charts(1).SetSourceData Source:=Sheets(1).Range("A1:A10"),
PlotBy:=xlColumns
8.3.
Cuando se incrusta un grfico en una hoja, se crea un objeto Chart dentro de un objeto Worksheet ya que se pueden situar
diversos grficos en la misma hoja. Por esta razn es necesario utilizar la coleccin ChartObjects para trabajar con esos
grficos.
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
62
Para aadir un grfico a una hoja existente se debe usar el mtodo Add con el objeto ChartObjects. El mtodo Add tiene
cuatro parmetros opcionales para ayudar a la situacin y localizacin de los grficos. stos son:
Left. Este parmetro se utiliza para especificar la localizacin del grfico respecto el margen izquierdo de la
columna A.
Top. Este parmetro se utiliza para especificar la localizacin del grfico respecto el margen superior de la fila 1.
Width. Este parmetro se utiliza para especificar el ancho inicial del grfico.
Height. Este parmetro se utiliza para especificar el alto inicial del grfico.
El tipo de grfico se especifica mediante la propiedad ChartType. Con esta propiedad se especifica el tipo de grfico
mediante la constante XlChartType.
El cdigo a introducir empieza por declarar el nuevo grfico:
Dim Nuevo_grafico As ChartObject
Se aade mediante la instruccin:
Set Nuevo_grafico = Sheets(Sheet1).ChartObjects.Add(Left:=50, Top:= 30, _
Width:=400, Height:=400)
En cualquier grfico se debe especificar el rango de datos. Esto se realiza mediante la instruccin SetSourceData que necesita
dos parmetros diferentes. Su sintaxis es:
Nuevo_grafico.Chart.SetSourceData := Source, PlotBy
Donde:
Un ejemplo sera:
Nuevo_grafico.Chart.SetSourceData Source:=Sheets(1).Range("A1:A10"), _
PlotBy:=xlColumns
Para especificar el tipo de grfico se usa otra instruccin de la siguiente manera:
Nuevo_grafico.Chart.ChartType = xl3DColumn
8.4.
Para la construccin de un grfico se pueden usar las propiedades del asistente para grficos de Excel. En l se especificarn los
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
63
parmetros necesarios para crearlo, no siendo necesarios todos. Estos parmetros son:
Source. Variant opcional. Rango que contiene los datos de origen del nuevo grfico. Si este argumento se omite,
Microsoft Excel modificar la hoja de grficos activa o el grfico seleccionado en la hoja de clculo activa.
PlotBy. Variant opcional. Especifica si los datos de cada serie estn en filas o en columnas. Puede ser una de las
siguientes constantes XlRowCol: xlRows o xlColumns.
CategoryLabels. Variant opcional. Un nmero entero que especifica el nmero de filas o de columnas del
rango de origen que contienen rtulos de categoras. Los valores permitidos van desde cero hasta uno menos que
el nmero mximo de las categoras o series correspondientes.
SeriesLabels. Variant opcional. Un nmero entero que especifica el nmero de filas o de columnas del rango
de origen que contienen rtulos de series. Los valores permitidos van desde cero hasta uno menos que el nmero
mximo de las categoras o series correspondientes.
Format. Variant opcional. El nmero de opcin de los autoformatos integrados. Puede ser un nmero del 1 al
10, dependiendo del tipo de la galera. Si este argumento se omite, Microsoft Excel elegir un valor
predeterminado basndose en el tipo de la galera y en el origen de los datos.
HasLegend:=True, _
CategoryTitle:="Year", ValueTitle:="Sales"
Los tipos de grfico XlChartType son:
8.5.
xlArea. Dibuja valores y colores individuales en un rea para resaltar las series de datos.
xlBar. Muestra datos en columnas horizontales para ilustrar la relacin entre datos.
xlColumn. Muestra datos en columnas horizontales para ilustrar la relacin entre datos.
xlLine. Dibuja valores individuales en una lnea continua para ilustrar las tendencias de los datos.
xlPie. Muestra la relacin de cada dato con el resto en un todo completo.
xlRadar. Dibuja cada serie de datos en unos ejes separados.
xlXYScatter. Dibuja diferentes fuentes de datos mediante diferentes barras de tiempo.
xlCombination. Crea una combinacin de grficos.
xl3DLine. Dibuja relaciones entre datos en una lnea continua con una representacin en 3D.
xl3DPie. Muestra la relacin de cada dato con el resto en un todo completo en 3D.
xl3DSurface. Dibuja los datos para crear un grfico con forma topogrfica en 3D.
xlDoughnut. Muestra las relaciones entre los valores de los datos en un crculo completo.
Una vez se ha creado un grfico, se puede redefinir el rango de datos que usa Excel para crear el grfico. Para aadir una nueva
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
64
serie de datos al rango existente de un grfico creado, se crea un nuevo objeto de Series y se aade a la coleccin
SeriesCollection con el mtodo Add.
La coleccin SeriesCollection representa todas las series de datos que Excel representa en un grfico, siendo cada serie
de datos un objeto Series diferente.
Con el mtodo Add se pueden usar cinco parmetros distintos:
Source. Variant requerida. Los nuevos datos, ya sea como un objeto Range o como una matriz de puntos de
datos.
Rowcol. Opcional. Especifica si los nuevos datos estn en filas o columnas especificando la constante
xlColumns o xlRows.
SeriesLabels. Variant opcional. No se tiene en cuenta si Source es una matriz. True si la primera fila o
columna contiene el nombre de la serie de datos. False si la primera fila o columna contiene el primer punto de
datos de la serie. Si este argumento se omite, Microsoft Excel intentar determinar la ubicacin del nombre de la
serie a partir del contenido de la primera fila o columna.
CategoryLabels. Variant opcional. No se tiene en cuenta si Source es una matriz. True si la primera fila o
columna contiene el nombre de los rtulos de categoras. False si la primera fila o columna contiene el primer
punto de datos de la serie. Si este argumento se omite, Microsoft Excel intentar determinar la ubicacin del rtulo
de categoras a partir del contenido de la primera fila o columna.
Replace. Variant opcional. Si CategoryLabels es True y Replace es True, las categoras especificadas
reemplazarn a las existentes en la serie. Si Replace es False, no se reemplazarn las categoras ya existentes. El
valor predeterminado es False.
Worksheets("Sheet1").ChartObjects(1).Activate
ActiveChart.SeriesCollection.Add Source:=Worksheets("Sheet1").Range("B1:B10")
920-100920-INICIACION_VBA_EXCEL-ED1.DOC
65