Está en la página 1de 21

UNIDAD

TRABAJANDO CON VISUAL BASIC


7.1. Trabajo con variables
7.2. Tipo por defecto
7.3. Uso de matrices
7.4. Expresiones
7.5. Valores condicionales
7.6. Sentencias condicionales
7.7. Bucles

7.1. TRABAJO CON VARIABLES


Excel como cualquier otra aplicacin de ordenador necesita trabajar con datos, estos se
alojan en las celdas, cada una de ellas ene un po que determina la clase de informacin que
conene. Por ejemplo un texto, un nmero o una fecha segn lo que el usuario decida.
En los lenguajes de programacin, como es el caso de Visual Basic, el equivalente de las
celdas de Excel son las variables. Cada variable es un contenedor, que ene asignado un po,
dependiendo del cual podr contener una informacin u otra. Las variables son fundamentales
para trabajar con Visual Basic en Excel, ya que son los contenedores donde vamos a guardar
la informacin.
Para declarar una variable es necesario que abramos la ventana de visual Basic desde la
pestaa programador. En el editor de cdigo, aqu es donde tenemos que denir y trabajar las
variables. Para denir una variable debemos hacerlo indicando su nombre, y el po de dato
que puede contener. La declaracin de las variables generalmente se realiza al inicio del mtodo o funcin donde van a ser usadas, aunque no es obligatorio y puede hacerse en cualquier
otro lugar.
El formato de la declaracin es:

Las palabras Dim y As forman parte del conjunto de palabras reservadas de Visual Basic.
Variable es el nombre que deseamos dar a la variable, que puede estar formado por letras y
nmeros, sin espacios ni otros smbolos especiales.
Los pos principales para las variables pueden ser:
Boolean con los valores True O False.
Byte Nmeros enteros entre O y 255
Integer Nmeros enteros entre -32768 y 32767.
Long Nmeros enteros entre -2147483648 a 2147483647.
Single Nmeros decimales de precisin simple.
Double Nmeros decimales de precisin doble.

String Cadenas de caracteres.


Date Fechas.
Object Referencias a objetos.
Variant Cualquier po de dato.
Adems de los pos anteriores, se pueden usar variables para almacenar referencias a objetos, como puede ser una hoja de clculo, un libro completo o una celda. Adems, existe la
posibilidad de crear pos denidos por el usuario.
Creamos , por ejemplo una variable contador que nos ayude a contar una serie de datos,
comenzamos por la palabra reservada Dim el nombre de la variable contador la palabra reservada As y el po de dato que va a ser Tipo byte ya que nuestra cuenta no va a pasar de 255.

Creamos otra variable de po boolean que nos permita por ejemplo comprobar si una ocurrencia a sucedido o no. Comenzamos por la palabra reservada Dim el nombre de la variable
bandera la palabra reservada As y el po de dato que va a ser Tipo boolean como hemos
indicado.

Podemos crear tantas variables como necesitemos para nuestra aplicacin pero siempre
teniendo en cuenta el po de datos que vamos a guardar en ellas.

7.2. TIPO POR DEFECTO


Cuando declaramos una variable podemos no especicar un po para la variable, o tambin podemos ulizar directamente una variable sin declararla en estos casos visual Basic usa
el po por defecto: Variant. Una variable de este po puede contener cualquier valor: un texto, un nmero entero o con parte decimal, una fecha, etc.
Cuando se usa este po Visual Basic es capaz de efectuar automcamente, las conversiones necesarias entre variables Variant que conenen datos de disntos pos. Este es un po
muy exible, ya que es posible asignar a la variable cualquier valor y modicarlo cuando nos
interese.

Pero no todo son ventajas tambin ene sus inconvenientes. Las variables de este po
enden a necesitar ms espacio que las de otros pos. La recuperacin y asignacin de los
valores que conenen, es ms lenta puesto que es necesario determinar el po del dato antes
de operar sobre l.
Una variable de po Variant tambin puede contener algunos valores especiales, como
Empty, Nothing y Null, que realmente no son pos. Lo que hacen es determinar algunos estados de la variable, como la ausencia de un contenido o la presencia de un contenido nulo.
Podemos comprobar el po del dato contenido en una variable Variant usando la funcin
TypeName.
Vemos un ejemplo con variables de po variant de las que vamos mostrar su valor. En el
editor de visual Basic, tenemos un cdigo,

En el inicio de la funcin declaramos tres variables, una de po numrico entero, otra de


po cadena y una tercera sin po, lo cual equivale a usar Variant. Despus usamos el mtodo
Print de la ventana Inmediato, que permite que el valor que enviemos se muestre en la ventana
de inmediato, que es accesible desde el objeto Debug, donde mostramos el po actual de la
variable denida de po Variant, que debe estar vaca.

Despus asignamos un valor a la variable numrica, pasamos dicho valor a la variable Variant y mostramos de nuevo su po. Finalmente, asignamos el contenido de denido, que es
un nmero, a la variable String.
En ese momento Visual Basic efectuar automcamente la conversin de nmero a cadena. En la sentencia siguiente invermos el orden de los operandos, asignando la cadena a
denido. Al mostrar de nuevo su po vemos que ahora es string.
Para ejecutar el cdigo y ver el resultado en la ventana de inmediato pulsamos en el botn
de play de la barra de herramientas. Y podemos ver el valor de la variable variant en cada una
de las deniciones.

7.3. USO DE MATRICES


Cuando trabajamos con Excel solemos usar los rangos de celdas para almacenar valores y
operar sobre ellos como si fuesen un todo.
En Visual Basic, tambin podemos realizar esta operacin, deniendo matrices que son
variables que pueden almacenar un rango de valores.
Una matriz, es un conjunto de variables que comparten un mismo nombre pero que se diferencian unas de las otras por un ndice. Para declarar una matriz el proceso es el mismo que el

de una variable normal, pero en este caso es necesario que detrs del nombre de la variable,
y entre parntesis, se indique el nmero de elementos que va a tener la matriz.
Vamos a ver un ejemplo en el que declaramos una matriz con diez elementos, numerados
del 1 al 10, de po Variant. Ya que no declaramos el po.
Dim Matriz(10) As Variant
Para crear una matriz bidimensional, simplemente en el parntesis introducimos los valores de las columnas y las las.
Dim Bidimensional (10, 5) As Variant
Una vez declarada la matriz, para poder insertar datos en la matriz es necesario indicar la
la y la columna donde queremos insertar el valor, tal y como vemos en el cdigo.
Bidimensional(1, 1) = 1
Bidimensional(1, 2) = 2
Bidimensional(1, 3) = 3
Bidimensional(1, 4) = 4
Bidimensional(1, 5) = 5
Bidimensional(2, 1) = 6
Para leer o modicar los valores es necesario indicar la la y la columna del valor que queremos mostrar, como vemos en el cdigo.
Debug.Print Bidimensional(1, 1)
Debug.Print Bidimensional(1, 2)
Debug.Print Bidimensional(2, 1)
Si ejecutamos el cdigo desde el botn de play y vemos el contenido de la matriz en la
ventana de inmediato.

7.4. MBITO DE VARIABLES


Otro aspecto importante con el que tenemos que trabajar es el mbito de las variables,
podemos decir que las variables en Visual Basic enen un empo de vida, que depende del
mbito en el que han sido declaradas.
Podemos disnguir dos casos:
Variables locales a un procedimiento o funcin estas son las se declaran en el interior de
una funcin y tan slo pueden ulizarse desde ella
Variables globales estas son las que se declaran antes de cualquier otro elemento, al principio del modulo y estn disponibles para todo el mdulo de cdigo
Vamos a ver un ejemplo en el que tenemos un modulo en el que tenemos una declaracin
de variable global y dos funciones.

La Vglobal no est en el interior de ninguna de las dos funciones, es una variable global.
Esto signica que podemos usar esta variable desde cualquier punto del cdigo.
La variable VLocal por el contrario, se ha declarado en el interior de la primera funcin por
lo que no puede ser usada fuera de la funcin.
Si ejecutramos el cdigo, comprobaramos que no tenemos ningn error, aunque tericamente, no podramos ulizar la variable Vlocal desde segundafuncion, pero en realidad que
ocurre? Lo que ocurre es que la declaracin de variables en Visual Basic no es obligatoria por lo
que el entorno cree que cuando usamos a VLocal en segundafuncion realmente lo que estamos
haciendo es crear una nueva variable con el mismo nombre. Esto, puede inducir a errores. En
segundaFuncion podemos creer que estamos accediendo a la variable Vlocal pero lo que en
realidad ocurre es que hemos creado una variable local. Para evitar estos problemas lo mejor
es poner al inicio del mdulo la lnea siguiente: Opon Explicit, esta sentencia indica a Visual
Basic que la declaracin de variables es obligatoria antes de usarla.

Si ahora ejecutamos el modulo, nos aparece un mensaje de error que nos indica que la
variable no ha sido declarada.

7.5. EXPRESIONES
Cuando trabajamos con Excel generalmente los datos que usamos en el interior de una funcin o macro, !enen como nalidad producir algn resultado. Pero para operar con estos datos
necesitamos algn !po de elemento que nos permita trabajar con ellos, estos elementos son
los operandos de expresiones aritm!cas, relacionales y lgicas.
Estos operandos son los mismos que usamos cada vez cada vez que introducimos una frmula en una celda, en la que estamos u!lizando dados de este !po.
En Visual Basic, hay una serie de operadores que nos permiten crear ese !po de expresiones y el resultado se almacena, generalmente, en alguna variable, es decir la variable es como
la celda receptora del resultado de las formulas.

Vamos a ver algunos de los operadores que podemos usar en las expresiones, son operadores aritmcos, relacionales y lgicos, son iguales a los usados en Excel.
+ Suma los dos operandos.
- Resta el segundo operando del primero.
\ Divisin entera del primer operando entre el segundo.
Mod Resto de la divisin entera
* Mulplica los dos operandos
/ Divisin del primer operando entre el segundo
^ Potencia del primer operando, base al segundo que acta como exponente
= Comprueba si los dos operandos son iguales
<> Comprueba si los dos operandos son disntos
< Comprueba si el primer operando es menor que el segundo
<= Comprueba si el primer operando es menor o igual que el segundo
> Comprueba si el primer operando es mayor que el segundo.
>= Comprueba si el primer operando es mayor o igual que el segundo
And Devuelve True si los dos operandos son True.
Or Devuelve True si uno de los dos operandos, o bien ambos, son True.
Xor Devuelve True slo si uno de los dos operandos es True y el otro False.
Not Devuelve True si el operando es False y viceversa
A excepcin del operador Not, que toma un solo operando, todos los dems son binarios.
Esto signica que siempre actan sobre dos operandos, uno que est dispuesto a la izquierda
del operador y otro a la derecha. Dichos operandos pueden ser variables, datos constantes o
incluso otras expresiones.
Vamos a ver un ejemplo, tenemos un cdigo en el que guardamos en una variable usuario
el nombre del usuario de la aplicacin, despus ponemos lo que este en la variable usuario en
la celda acva, en la siguiente instruccin ponemos la fuente en negrita, y por ulmo autoajustamos la columna de la celda acva.

Probamos la macro, nos situamos en una celda y ejecutamos la macro.


Comprobamos como la macro escribe el nombre del usuario de la aplicacin, la fuente en
negrita y se autoajusta la columna completa.

7.6. VALORES CONDICIONALES


La funcin If nos permiten tomar un valor u otro dependiendo de que una expresin, relacional, o lgica sea cierta o falsa. Esta funcin !ene tres parmetros:
La expresin que debe evaluarse obteniendo True o False como resultado.
El valor a devolver en caso de que el resultado sea True.
El valor a devolver en caso de que el resultado sea False.
Vamos a ver un ejemplo, tenemos una hoja de clculo con las ventas de una serie de comerciales y queremos indicar mediante una funcin denida por el usuario si el resultado total
de las ventas del trimestre por vendedor es superior a 10000 es bueno si no es malo. Para ello
vamos a la pestaa programador, y seleccionamos la opcin visual Basic donde se nos abre el
editor, tenemos una funcin a la que llamamos ventas que va a recibir un argumento al que
hemos puesto de nombre valor. En la funcin comprobamos si valor es mayor de 10000 si lo
es devolvemos el valor buena, sino devolvemos el valor mala, que tenemos que guardar en la
funcin ventas.

Volvemos a la pestaa formulas y pulsamos en insertar funcin elegimos denidas por el


usuario, y seleccionamos la funcin que acabamos de crear.

En el cuadro de dialogo que aparece seleccionamos la celda que queremos comprobar y


obtenemos el resultado. Si es!ramos la formula tenemos el resultado de la evaluacin de las
ventas.

Si el caso es ms complejo y no se trata solamente de elegir entre dos valores a parr de


un condicional, podemos ulizar la funcin Switch. El nmero de parmetros, en este caso, es
variable y van formando parejas. El primer parmetro ser un condicional y el segundo el valor
a devolver si la condicin es cierta. En caso contrario se evaluar la expresin entregada como
tercer parmetro, repiendo el proceso.
Vamos a ver otro ejemplo volvemos al editor de visual Basic desde la pestaa programador
en este caso vamos a comprobar si las ventas son mayores de 100000 o iguales las ventas son
buenas si son mayores a 25 mil son regulares y si son menores o iguales a 25000 son malas. En
este caso ulizamos la funcin switch para gesonar los diferentes valores.

En la pestaa formulas y pulsamos en insertar funcin elegimos denida por el usuario, y


seleccionamos la funcin que acabamos de crear, en el cuadro de dialogo que aparece seleccionamos la celda que queremos comprobar y obtenemos el resultado. Si esramos la formula
tenemos el resultado de la evaluacin de las ventas.

7.7. SENTENCIAS CONDICIONALES


En muchas ocasiones necesitamos ejecutar unas sentencias u otras dependiendo de una
condicin que evaluamos si esta es cierta o falsa. Es similar a lo que podemos hacer con Excel
por ejemplo con la funcin SUMAR. SI. Con Visual Basic podemos conseguir esto mediante las
rdenes If y Selec to.
La instruccin If puede usarse de disntas formas, dependiendo de la complejidad de la
condicin a evaluar. Su formato ms sencillo, es la orden if seguida de una expresin condicional, la palabra Then y una o ms sentencias a ejecutar en caso de que la expresin condicional
sea cierta.

En el ejemplo tenemos una estructura condicional simple, tenemos una macro que comprueba el valor de la celda acva si el valor es mayor de 100000 el contenido de la celda se
pone en negrita.
Para probarla nos situamos en la hoja de Excel seleccionamos una celda vamos a macros
seleccionamos la macros negrita y la ejecutamos y podemos comprobar que como el valor es
mayor que 100000 el contenido de la celda se pone en negrita.

En el caso de que la expresin condicional sea falsa, la ejecucin pasa automcamente a


la sentencia que haya detrs del End If. Esta sentencia, y las siguientes, se ejecutarn siempre,
tanto si el condicional es verdadero como falso. Otras veces, podemos necesitar que una o ms
sentencias se ejecuten slo si el resultado del condicional es falso. Esto podemos conseguirlo
con la sentencia Else, que se pone detrs de las sentencias que se ejecutan cuando la expresin
es cierta, y va seguida de las sentencias que queremos ejecutar en caso de que el condicional
sea falso.
Si ampliamos el ejemplo anterior, en otra macro diferente, podemos hacer que si el contenido de la celda no es mayor de 100000 el texto se ponga en cursiva.

Para probarla nos situamos en la hoja de Excel seleccionamos una celda vamos a macros
seleccionamos la macro cursiva y la ejecutamos y podemos comprobar que como el valor es
menor que 100000 el contenido de la celda se pone en cursiva.

La estructura Select Case se usa cuando queremos evaluar el mismo valor varias veces y
segn este ejecutar una orden diferente. Vamos a verlo con un ejemplo, tenemos una funcin
incenvo que comprueba el valor que se pasa como argumento y segn el rango en el que este
pone una equeta al valor, si es mayor de 10000 es bueno, si es mayor de 50000 es regular y
si es menor es malo.

Para probar la funcin nos situamos en la hoja de Excel seleccionamos una celda vamos a la
pestaa formulas seleccionamos denidas por el usuario y seleccionamos la funcin incenvo
y la ejecutamos seleccionamos el valor que queremos y podemos comprobar que como el valor es mayor que 100000 nos aparece que la venta es buena, si arrastramos la formula vemos
como calcula el po de valor para cada celda.

7.8. BUCLES
Hay ocasiones en las que necesitamos que una o mas instrucciones se ejecuten repedamente para poder realizar una cierta tarea.
Tenemos mtodos diferentes para reper una o ms sentencias: conociendo el nmero de
veces que se debe reper, usando un condicional para saber cundo debe terminar.
El primer mtodo es el bucle por contador, en el que sabemos con antelacin cuantas veces
queremos reper la sentencia, el formato es el siguiente:

La variable usada para controlar las iteraciones del bucle recibe el nombre de contador,
ya que va contando las veces que se repite el bucle. Los valores inicio y n son los lmites que
tomar el contador.
Vemos un ejemplo, tenemos un bucle for que recorre todas las hojas del libro insertando
en ellas en la celda que indiquemos un dato concreto, en este caso el nombre de la empresa
por ejemplo o lo que queramos.

Primero tenemos la macro, despus comenzamos con el bucle for para todas las hojas del
libro desde la hoja uno hasta el nal de las hojas, esto lo conseguimos con Sheets. Count que
nos da el nmero de hojas que ene el libro. Primero seleccionamos el nmero de hoja que
en el primer caso ser la primera, despus escribimos lo que queramos y connuamos a la
siguiente hoja.
Si ejecutamos la macro, y vamos a las hojas de Excel vemos como en la celda A1 de cada
hoja tenemos el nombre de la empresa.

Vamos a ver ahora el bucle por condicin, en este bucle no tenemos por qu conocer de
antemano las veces que se va a ejecutar el bucle, por ejemplo si queremos recorrer todas las

celdas de una columna vamos a tener que hacerlo hasta que encontremos un dato que marque el n, en este caso no sabemos cuantas veces hay que reper el proceso, En estos casos
tenemos los bucles Do While /loop (hacer mientras) se reper mientras la condicin devuelva
True y Do Unl /Loop (hacer hasta) se reper mientras la condicin devuelva false.

En el ejemplo tenemos un bucle de iteracin Do-While-Loop, en el que realizamos la suma


de los datos de una columna completa en este caso la de totales de ventas, hacemos lo siguiente, seleccionamos la primera celda en la que estn los datos M2, asignamos a la variable suma que va a guardar el resultado el valor de la celda superior. Despus insertamos la
condicin para entrar o salir del While hacer mientras la celda acva no este vaca, despus
entramos en el bucle Do-While donde hay 2 lneas que se repiten hasta que la condicin no se
cumpla. La primera lnea recorre las lneas de la columna y accede a su contenido y la segunda
suma este contenido a la variable suma.
Con la palabra reservada Loop salimos o volvemos a entrar en el bucle segn se cumpla o
no la condicin. Cuando salimos del bucle se muestra el resultado de la suma en la celda acva.
Y por lmo se muestra el resultado de la suma en una estructura nueva que es el MsgBox que
nos muestra un pequeo cuadro de dialogo con el resultado.

La estructura Do Unl /Loop es igual a esta pero como hemos comentado el bucle se repite
mientras la condicin devuelva falso. La sintaxis es similar a la del bucle do while, tenemos el
bucle las sentencias a ejecutar y por lmo el loop para hacer que el bucle conne.