Sunteți pe pagina 1din 17

Iniciación a visual basic para macros

1.- Índice
Iniciación a visual basic para macros ................................................................. 1
1.- Índice ......................................................................................................... 1
2.- Introducción ............................................................................................... 2
3.- Visual Basic vs Excel................................................................................. 3
4.- El primer programa .................................................................................... 4
5.- Variables y asignación............................................................................... 5
6.- Instrucción condicional .............................................................................. 7
7.- Instrucción iterativas .................................................................................. 9
8.- Arrays y tuplas ......................................................................................... 12
9.- Constantes .............................................................................................. 14
10.- Acciones y funciones ............................................................................. 15
11.- Option Explicit........................................................................................ 17

www.mundoexcel.com 1/1
2.- Introducción
Este manual tiene como objetivo enseñar los fundamentos del lenguaje de
programación visual basic (VBA, Visual Basic for Applications) para macros,
con el fin de que la programación de macros sea lo más ágil posible. Todo
lo que aprenda en este manual le podrá servir para realizar macros en
Microsoft Word, Power Point, Excel, etc

Se requiere conocimientos de algoritmia (ver documento “Manual de


Programacion.pdf”). No tiene como objetivo ser una guía exhaustiva del
lenguaje de visual basic; para eso existen miles de manuales mucho más
detallistas. Como verá, este manual se caracteriza por ir al grano y ser
razonablemente escueto, ofreciendo una breve base de conocimiento.

2.1.- Convención
Para hacer más sencilla la lectura de este manual se aplican las siguientes
normas:

• El texto en negrita indica importancia


• El código de visual basic aparecerá en cursiva
• 1. El código de visual basic tendrá el número de línea; pero no debe poner
el número de línea al copiar el código
• Los recordatorios se marcan con subrayados

Recuerde: este NO es un manual para saber todas las funcionalidades de


visual basic

www.mundoexcel.com 2/2
3.- Visual Basic vs Excel
Dentro del aplicativo de Microsoft Excel existe la posibilidad de grabar
“Macros”, lo cual resulta útil ya que un mismo proceso se pueden realizar
tantas veces y en el momento que el usuario lo desee. Esto resulta de especial
utilidad para:

1. Realizar cálculos matemáticos


2. Grabar datos
3. Generar informes con formato determinado
4. Lectura y tratamiento de ficheros
5. Validación de datos
6. ...

Visual Basic es un lenguaje de alto nivel orientado a eventos.


• Alto nivel: el ordenador reconoce el lenguaje máquina; como este lenguaje
es bastante extenso y complicado se utilizan lenguajes más sencillos que
permiten realizar programación sin ser un experto. Mientras el lenguaje está
más alejado del lenguaje máquina, es de mayor nivel. Por ejemplo:
El lenguaje máquina es un lenguaje de bajo nivel, visual basic, cobol,
pascal, visual c, c... son lenguajes de alto nivel.
• Orientado a eventos: las instrucciones se ejecutan cuando se da algún
evento, es decir, cuando se da una condición como por ejemplo:
El usuario modifica una celda
El usuario hace un click sobre un botón
El usuario pasa el cursor del ratón sobre un botón
El usuario marca una lista desplegable
es decir, cualquier acto derivado de una acción explícita de un usuario
es un evento.

Recuerde: las operaciones que se programarán en visual basic están


agrupadas en funciones o acciones, con lo que, cuando se da un evento se
ejecutará la acción asociada al evento y allí será donde pondremos nuestro
código.

www.mundoexcel.com 3/3
4.- El primer programa
Vamos a ver nuestro primer programa
1. public sub ejemplo01()
2. MsgBox “Hola” ‘comentario
3. end sub

El siguiente programa esta compuesto por una acción (sub) de dominio público
(public) que se llama ejemplo01.

Tiene una única instrucción (MsgBox) que posee un parámetro (“Hola”)


Para indicar que una acción se acaba se utiliza la instrucción end sub

En la línea 2 puede ver que hay un comentario; para insertar comentarios debe
poner el símbolo ‘

Recuerde: cada instrucción se escribe en una línea, si desea escribir 2 o más


instrucciones en una misma línea utilice el : para separarlas, ejemplo:
1. MsgBox “Hola” : MsgBox “Adios”

www.mundoexcel.com 4/4
5.- Variables y asignación
Todo algoritmo razonablemente complejo requiere de la utilización de
variables donde guardar valores. En algunos lenguajes de programación,
como es el caso de visual basic, no se requiere la declaración explícita de las
variables

Al declarar las variables, se le debe indicar a qué tipo de variable se refiere,


la estructura de la declaración de la variable es:
dim [nombre de variable] as [tipo]

Veamos ejemplos:
1. dim a as integer ‘variable de tipo entero
2. dim b as long ‘variable de tipo entero largo
3. dim c as single ‘variable de tipo real corto
4. dim d as double ‘variable de tipo real largo
5. dim e as string ‘variable de cadena de caracteres
6. dim f as boolean ‘variable de tipo booleano, los posibles valores son
7. ‘True y False

La asignación de valores a las variables sirve para asignar un valor o un cálculo


a una variable y se utiliza con el símbolo =.
Veamos un ejemplo de declaración de variables y la asignación de valores:

1. public sub ejemplo02()


2. dim edad as integer ‘declaración de variables
3. dim numero as long
4. dim es_correcto as Boolean
5. dim precio as single
6. dim pi as double, media as double
7. dim dni as string
8. dim nombre as string, apellido1 as string, apellido2 as string
9. dim nombre_completo as string
10. dim nota00 as long, nota01 as long
11. ‘asignaciones
12. edad=10
13. numero =123456
14. precio=12.6
15. pi=3.141596
16. dni=”38119423S”
17. nota00=10
18. nota01=12
19. es_correcto = True
20. nombre =”Carolina”: apellido1=”García”: apellido2=”Tabary”
21. ‘operaciones
22. ‘operación aritmética
23. media=(nota00+nota01)/2
24. ‘operación con strings
25. ‘concatenación del nombre separándolo por espacios en blanco
26. nombre_completo = nombre & “ “ & apellido1 & “ “ & apellido2

www.mundoexcel.com 5/5
27. ‘operación con valores booleanos
28. es_correcto = (nota00>8) or (nota01>13) ‘con estos valores dará True
29. end sub

Convenciones:
• No puede declarar una variable cuyo nombre empiece por un número
(declaración no permitida: dim 3edad as long)
• No puede insertar espacios en blanco y caracteres especiales en el
identificador de la variable (declaración no permitida: dim edad persona as
long)
• Hay algunos nombre que no se pueden utilizar porque son palabras del
lenguaje visual basic (declaración no permitida: dim end as string)
• No se pueden declarar dos veces la misma variable en la misma
declaración (declaración no permitida: dim edad as long, edad as long)

Recuerde: al asignar un string (cadena de carácteres) el valor se pone entre “,


y al indicar el punto decimal se utiliza el . , ejemplos:
1. nombre=”manuel”
2. precio=12.6

www.mundoexcel.com 6/6
6.- Instrucción condicional
En este apartado se explicará la instrucción condicional if, cuya estructura es la
siguiente:
if (condicion) then
instrucciones
elseif (condicion) then ‘<---opcional
instrucciones
else ‘<---opcional
instrucciones
end if

En una instrucción if como máximo se ejecutará una rama de ejecución,


NUNCA se ejecutarán 2 ó mas ramas de ejecución, es decir, se ejecutará
como máximo un conjunto de instrucciones

Ejemplo:
1. public sub ejemplo03(edad as long)
2. if edad<0 then
3. MsgBox ”error”
4. MsgBox “La edad no puede ser negativa”
5. elseif edad>=0 and edad<10 then
6. MsgBox ”niño”
7. elseif edad>=10 and edad<20 then
8. MsgBox ”adolescente”
9. elseif edad>=20 and edad<30 then
10. MsgBox ”joven”
11. else
12. MsgBox ”adulto”
13. end if
14. end sub

Fíjese en este ejemplo:


• La acción recibe como parámetro un valor, que es la edad.
• En la linea 5, 7 y 9 la condición está compuesta por 2 predicados

Otro ejemplo:
1. public sub ejemplo04(valor as long)
2. dim valor1 as long
3. valor1=valor
4. if valor1<0 then
5. valor1 = -1*valor
6. end if
7. MsgBox ”El valor absoluto de “ & valor & “ es “ & valor1
8. end sub

www.mundoexcel.com 7/7
Otro ejemplo:
1. public sub ejemplo05(operacion as string, operador1 as long, operador as
long)
2. dim resul as double
3. dim hubo_error as boolean
4.
5. if operacion =”+” then
6. resul =operador1 + operador2
7. errore=False
8. elseif operacion =”-“ then
9. resul =operador1 - operador2
10. errore=False
11. elseif operacion =”*“ then
12. resul =operador1 * operador2
13. errore=False
14. elseif operacion =”/“ then
15. resul =operador1 / operador2
16. errore=False
17. else
18. errore=True
19. end if
20.
21. if errore then
22. MsgBox “El operador se desconoce”
23. else
24. MsgBox “El resultado de la operación fue ” & resul
25. end if
26. end sub

Recuerde: en visual basic se puede utilizar la sentencia select case/when/end


select para realizar instrucciones condicionales.

www.mundoexcel.com 8/8
7.- Instrucción iterativas
Se pueden hacer programas que repitan un conjunto de instrucciones, por
ejemplo:

1. public sub ejemplo06()


2. MsgBox “Hola1”
3. MsgBox “Hola2”
4. MsgBox “Hola3”
5. MsgBox “Hola4”
6. MsgBox “Hola5”
7. MsgBox “Hola6”
8. MsgBox “Hola7”
9. MsgBox “Hola8”
10. MsgBox “Hola9”
11. MsgBox “Hola10”
12. end sub

Como habrá visto en este ejemplo se repiten 10 veces el texto Hola,


añadiéndole un número, veamos una manera más sencilla y rápida de
escribirla

1. public sub ejemplo07()


2. dim indexe as long
3.
4. For indexe=1 to 10
5. MsgBox “Hola” & indexe
6. Next indexe
7. end sub

Este otro ejemplo posee una estructura iterativa de tipo For:


for variable=valor_ini to valor_fin [step 1]
instrucciones
next variable

En esta estructura se puede indicar cada cuánto se van haciendo saltos, por
ejemplo añadiéndole step –2 mostraría por pantalla lo siguiente en el últumo
ejemplo:
Hola1, Hola3, Hola5, Hola7, Hola9

Esta estructura sólo se puede ejecutar cuando se sabe cuantas vueltas de


iteraciones se van a realizar.
Veamos otro ejemplo:

1. public sub ejemplo08()


2. dim indexe as long
3. indexe=1
4. while indexe<11
5. MsgBox “Hola” & indexe
6. indexe=indexe+1

www.mundoexcel.com 9/9
7. wend
8. end sub

Aquí vemos una estructura iterativa de tipo While:


while condicion
instrucciones
wend

Al salir de la instrucción iterativa (bucle) se da la condición negada, en el último


ejemplo se da la negación de indexe<11 que es: indexe>=11

El 99% de los errores de programación están en la definición incorrecta


de los bucles. La condición del bucle se debe dar en algún caso en el que
haya un final, o un momento en que deje de darse la condición. En caso
contrario, el bucle no finalizaría nunca; veamos un ejemplo de bucle
infinito.

1. public sub ejemplo09(valor as long)


2. while valor<>-1 ‘el simbolo <> equivale a diferente
3. MsgBox “Hola” & indexe
4. valor=valor-1
5. wend
6. end sub

Fíjese que en este bucle el valor de la variable disminuye hasta que es valor=-
1; si el número que se introduce es positivo, este bucle tarde o temprano
acabará, pero si el número es menor que –1, por ejemplo –5... este bucle
NUNCA ACABARÁ.
El ejemplo correcto sería:

1. public sub ejemplo10(valor as long)


2. while valor>-1
3. MsgBox “Hola” & indexe
4. valor=valor-1
5. wend
6. end sub

Veamos más ejemplos de bucles:

1. public sub ejemplo11(valor as long)


2. ‘calculo del factorial
3. dim resul as long
4. resul=1
5. while valor>0
6. resul = resul * valor
7. valor=valor-1
8. wend
9. MsgBox “El valor factorial calculado es ” & resul
10. end sub

www.mundoexcel.com 10 / 10
Recuerde: debe realizar alguna operación dentro del bucle while para que la
condición del bucle cambie en alguna iteración y el bucle sea finito.

www.mundoexcel.com 11 / 11
8.- Arrays y tuplas
Probablemente tendrá de trabajar con muchas variables. Para ello existen
varias maneras de agruparlas en estructuras mayores y facilitar la tarea. Con
este objetivo se usan los arrays (vector ó tabla) y las tuplas (record).

Mostremos un ejemplo:

1. public sub ejemplo12()


2. dim nota00 as long
3. dim nota01 as long
4. dim nota02 as long
5. dim nota03 as long
6. dim nota04 as long
7. dim nota05 as long
8. dim nota06 as long
9. dim nota07 as long
10. dim nota08 as long
11. dim nota09 as long
12.
13. nota00= InputBox (“Indique la nota”)
14. nota01= InputBox (“Indique la nota”)
15. nota02= InputBox (“Indique la nota”)
16. nota03= InputBox (“Indique la nota”)
17. nota04= InputBox (“Indique la nota”)
18. nota05= InputBox (“Indique la nota”)
19. nota06= InputBox (“Indique la nota”)
20. nota07= InputBox (“Indique la nota”)
21. nota08= InputBox (“Indique la nota”)
22. nota09= InputBox (“Indique la nota”)
23. end sub

En este ejemplo se han tenido que crear 10 variables para leer las 10 notas,
pero ¿se imagina como quedaría el código si tuviera que leer 100 notas...?
Veamos como hacerlo de otra manera.

1. public sub ejemplo13()


2. dim nota(0 to 9) as long
3. dim indexe as long
4.
5. for indexe=0 to 9
6. nota(indexe)= InputBox (“Indique la nota”)
7. next indexe
8. end sub

La declaración de la variable que hay en línea 2 es un array unidimensional, o


lo que es lo mismo, con un único índice. Para definir un array bidimensional se
haría de la siguiente manera:
dim variable(1 to 10, 1 to 20) as long ‘es un array de 10x20

www.mundoexcel.com 12 / 12
En un array, todos los elementos son del mismo tipo de variable.

Veamos un ejemplo de declaración:

1. dim nombre_jug1 as string


2. dim nombre_jug2 as string
3. dim apellido1_jug1 as string
4. dim apellido1_jug2 as string
5. dim apellido2_jug1 as string
6. dim apellido2_jug2 as string
7. dim puntuacion_jug1 as long
8. dim puntuacion_jug2 as long

En este ejemplo se ve como existe un entidad superior que podría llamarse


jugador. Veamos como se podría definir de otra manera:

1. type jugador
2. dim nombre as string
3. dim apellido1 as string
4. dim apellido2 as string
5. dim puntuacion as long
6. end type
7.
8. dim jug1 as jugador
9. dim jug2 as jugador

De la línea 1 a la 6 se ha definido un nuevo tipo de variable (tupla o record) que


recibe el nombre de jugador. En las 2 siguientes líneas se definen 2 variables
de ese tipo. Para acceder a los diferentes elementos se haría de la siguiente
manera:

1. jug1.nombre = “Manolo”
2. puntuacion = jug1.puntuacion

En este caso, la tupla dispone de varias variables (con diferente tipo de


variable).

Por legibilidad y mejor mantenimiento de los programas es muy importante


utilizar arrays y tuplas.

Recuerde: se puede crear tanto un array de tuplas....como una tupla con algún
arrays.

www.mundoexcel.com 13 / 13
9.- Constantes
Cuando desee definir un valor que nunca se vaya a modificar, debe definir
una constante. El formato es el siguiente:

Const nombre de constante = valor de la constante

Ejemplo:
Const CONST_PI=3.1415
Const PASSWORD=”Carol”

Recuerde: Se aconseja definir las constantes escribiéndolas en mayúsculas

www.mundoexcel.com 14 / 14
10.- Acciones y funciones
Cuando se realizan aplicativos de cierto tamaño, se suelen repetir conjuntos de
instrucciones. Para no tener que repetir este código varias veces se aconseja el
uso de acciones (procedimientos) y funciones. A esta práctica se llama
programación modular.

La diferencia entre una acción y una función es que la función retorna un valor;
por contra la acción no.

Definición de acción:
sub nombre_accion (parámetros)
instrucciones
end sub

Definición de funciones
function nombre_funcion (parámetros) as [tipo de valor que retorna]
instrucciones
[nombre_funcion=....]
end function

Ejemplos:
1. public sub ejemplo14(par1 as long, par2 as long, resul as long)
2. resul=par1 + par2
3. end sub

1. public function ejemplo15(par1 as long, par2 as long) as long


2. ejemplo15 =par1 + par2
3. end function

1. public function ejemplo16() as long


2. ejemplo16 =3.1415
3. end function

4. public sub ejemplo17()


5. dim valor1 as long
6. dim valor2 as long
7. dim resul as long
8. valor1= InputBox (“Indique el primer parámetro”)
9. valor2= InputBox (“Indique el segundo parámetro”)
10. call ejemplo14(valor1, valor2,resul)
11. msgbox “la suma de “ & valor1 & “ y “ & valor2 & “ es “ & resul
12. resul = ejemplo15(valor1, valor2)
13. msgbox “la suma de “ & valor1 & “ y “ & valor2 & “ es “ & resul
14. end function

Fíjese en lo siguiente:
• El ejemplo14 y el ejemplo17 son acciones
• El ejemplo15 y el ejemplo16 son una funciones

www.mundoexcel.com 15 / 15
• En la línea 2 del ejemplo15 se puede ver como la función retorna el valor de
la suma de los dos parámetros
• En el ejemplo16 se ha creado un acción que no posee ningún parámetro
• En la línea 10 del ejemplo17 se llama a una acción con la instrucción
call
• En la línea 12 del ejemplo17 se llama a una función, retornando el valor
de la función sobre la variable resultante

10.1.- Ámbito de las variables


Cuando se declara una variable, esa variable es visible (se puede
modificar o leer su valor) sólo desde el ámbito donde se ha declarado.

Se pueden crear variables globales que son visibles desde todas las acciones y
funciones con la instrucción global, pero esta técnica se desaconseja por que
resulta muy complicado el mantenimiento y la depuración de errores.

Recuerde: NO UTILICE VARIABLES GLOBALES

www.mundoexcel.com 16 / 16
11.- Option Explicit
Se aconseja EXPLÍCITAMENTE que se declaren TODAS las variables. Es
muy triste estar validando un mal funcionamiento de un programa y darse
cuenta después de 2 horas que el error es que no se ha declarado la
variable correctamente y que hay 2 variables diferentes con el nombre
“parecido” de importe y impote

Ejemplo de un error típico:

1. public sub ejemplo18()


2. importe=10
3. while importe>0
4. impote = importe-1
5. wend
6. end sub

Para obligar a visual basic a que se deban declaran las variables se debe
escribir el siguiente código:
option explicit

Recuerde: UTLICE SIEMPRE LAS COMANDA OPTION EXPLICIT POR EL


BUEN FUNCIONAMIENTO DE LOS PROGRAMAS Y LA SALUD MENTAL DE
LOS PROGRAMADORES

www.mundoexcel.com 17 / 17

S-ar putea să vă placă și