Visual Basic Para Excel

37
VISUAL BASIC PARA EXCEL. GENERALIDADES. Hay dos maneras de generar códigos VBA: Introduciendo el código VBA directamente en la ventana de Visual Basic. Con macros que graban las acciones que vamos realizando mediante el empleo de diversas herramientas que nos brinda Excel. La ventaja de las macros es que no necesitamos de conocimientos de VBA para generar acciones que nos hagan ser más productivos. La desventaja de estas macros es que nunca conseguiremos entender cómo funciona realmente Visual Basic. Por lo tanto aquí nos vamos a centrar en esta última manera de generar códigos VBA. Los códigos podrán referirse a un procedimiento (lo más usual) o a una función. En VBA se distingue mediante colores el tipo de código introducido. En azul aparecen las palabras reservadas del lenguaje VBA, o código reservado. En negro los datos que introducimos y, en verde, los comentarios o aclaraciones relativas a la función que desempeña el código que generamos en su conjunto. Por lo tanto, no

description

asd

Transcript of Visual Basic Para Excel

Page 1: Visual Basic Para Excel

VISUAL BASIC PARA EXCEL.

GENERALIDADES.

Hay dos maneras de generar códigos VBA:

Introduciendo el código VBA directamente en la ventana de Visual Basic.

Con macros que graban las acciones que vamos realizando mediante el empleo de diversas herramientas que nos brinda Excel.

La ventaja de las macros es que no necesitamos de conocimientos de VBA para generar acciones que nos hagan ser más productivos.

La desventaja de estas macros es que nunca conseguiremos entender cómo funciona realmente Visual Basic.

Por lo tanto aquí nos vamos a centrar en esta última manera de generar códigos VBA. Los códigos podrán referirse a un procedimiento (lo más usual) o a una función.

En VBA se distingue mediante colores el tipo de código introducido. En azul aparecen las palabras reservadas del lenguaje VBA, o código reservado. En negro los datos que introducimos y, en verde, los comentarios o aclaraciones relativas a la función que desempeña el código que generamos en su conjunto. Por lo tanto, no podremos introducir variables, funciones o procedimientos con nombres iguales al código o palabra reservada de VBA.

Para introducirnos de lleno en la programación en VBA debemos adquirir unos conocimientos previos a la hora de programar. En VBA tenemos códigos de tipo objeto, propiedad y método.

Page 2: Visual Basic Para Excel

Pongamos el ejemplo de una caravana. La caravana sería el objeto, la cual tiene unas propiedades, y el uso que le damos a la caravana serían los métodos (figura 1).

Pero habrá caravanas del mismo tipo que la nuestra y con las mismas propiedades. Para diferenciarlas nos hace falta la matrícula. Esta matrícula la pondríamos entre paréntesis.

Además, habrá objetos que tengan mismos métodos. Por ejemplo, una caravana sirve para transportar gente, igual que un coche. Por lo tanto comparten un mismo uso o método.

Y habrá otros métodos que no sean compartidos entre objetos. Por ejemplo, una caravana sirve para vivir, pero un coche no.

Ahora extrapolemos este ejemplo a Excel, y centrémonos en una celda. La celda sería el objeto, con una serie de propiedades configurables, y con unos métodos que son el uso que podemos dar a la celda (figura 2).

Figura 2

Figura 1

Page 3: Visual Basic Para Excel

Otro concepto que debemos tener claro es el de las instancias de un objeto, que son repeticiones del mismo objeto pero con distintas propiedades.

Todos estos objetos están jerarquizados. Pensemos en un juego de muñecas rusas, en el que según las vas abriendo vas encontrando dentro nuevas muñecas de

menor tamaño. Lo mismo ocurre con los objetos VBA (figura 3).

Jerarquía del punto.

Volvamos al ejemplo de la caravana. Imaginemos que tenemos un objeto llamado así dentro de VBA. El código a escribir bien podría ser el siguiente:

Caravana(Matrícula).Color=1

Donde la palabra color hace referencia a una propiedad, y como propiedad que es deberá tener un valor.

Otro código bien podría ser este otro:

Caravana(Matrícula).Vivir.

Donde la palabra vivir hace referencia a un método, que es el uso que estamos dando al objeto caravana.

Extrapolemos esto a VBA. Para cambiar una propiedad de un objeto celda y utilizando una jerga que se entienda, el código completo en esta jerga sería por ejemplo el siguiente:

Excel.Libro.Hoja.Celda.Valor=1

La propiedad sería el código valor, y como propiedad tiene un valor, que en este caso es igual a 1.

Ahora ya estamos preparados para entender el código VBA correcto a utilizar, que sería del tipo siguiente:

Figura 3

Page 4: Visual Basic Para Excel

Application.Workbooks(“Libro1”).Worksheets(“Hoja1”).Range(“B5”).Value=1

Cuando vamos a utilizar este código en un objeto activo, podemos borrar el código referente a todos los objetos que lo contienen.

Por ejemplo, imaginemos que vamos a asociar el código anterior a un botón que crearemos en la hoja Hoja1. Se sobrentenderá que el botón actuará sobre la celda B5 de la hoja Hoja1 del libro Libro1 y de la aplicación que estamos utilizando, que es Excel. Por lo tanto el código se puede resumir de la siguiente forma:

Range(“B5”).Value=1

A su vez, la propiedad por defecto del objeto Range es precisamente la propiedad Value. Todas las propiedades por defecto de los objetos pueden obviarse. Por tanto, el código final resumido sería el siguiente:

Range(“B5”)=1

En definitiva, si prevemos que el código va a funcionar en hojas distintas, añadiremos el código del objeto referente a la hoja. Si además prevemos que va a utilizarse en diferentes libros, añadiremos el código referente al libro. Y si además resulta que prevemos que el código va a utilizarse en diferentes programas que soporten VBA tendremos que añadir el objeto referente a la aplicación.

Si en lugar de a un procedimiento, el código se refiere a una función, los métodos serán funciones.

Si aún con todo lo explicado no tiene claro lo que son los métodos y las propiedades no se preocupe. Según vaya escribiendo el código le aparecerá un desplegable (figura 4). Los que aparecen con un icono verde a la izquierda son métodos y funciones, y los que salen en gris con una mano son propiedades.

Page 5: Visual Basic Para Excel

Módulos.

Están almacenados en el libro Excel y solamente pueden verse o editarse utilizando el Editor de Visual Basic. Existen dos tipos de

módulos: el standard y el de clase. El nombre de los módulos no debe contener espacios.

El código puede referirse a procedimientos o a funciones (function). Éstos últimos pueden servir para crear fórmulas personalizadas y, para utilizarlas, habría que irse a la opción Definida por el usuario de la ventana Insertar función (figura 5).

Las funciones y procedimientos tampoco pueden contener espacios al nombrarlos. Igualmente debemos tener en cuenta que a una celda se la puede considerar un rango, un rango compuesto por una sola celda.

TIPOS DE DATOS SOPORTADOS POR EXCEL.

En la siguiente tabla se indican con una descripción orientativa los tipos de datos soportados por Excel a la hora de declarar variables.

TIPO DATO DESCRIPCION

ByteDatos numéricos del 0 al 255

Figura 5

Figura 4

Page 6: Visual Basic Para Excel

Boolean Datos de tipo true/false.

IntegerDatos numéricos de números enteros que van desde -32768 a 32767.

LongDatos numéricos de números enteros grandes.

SingleDatos numéricos de números decimales cortos.

DoubleDatos numéricos de números decimales largos.

DecimalDatos numéricos de números decimales extremadamente largos.

Currency Datos de tipo moneda.

Range, Selection, etc Datos de tipo objeto.

StringDatos compuestos por cadenas de caracteres (palabras o frases).

VariantDatos de tipo indefinido. No es aconsejable.

Vista esta tabla tenemos que tener en cuenta una cosa. Si, por ejemplo, prevemos que una variable va a adoptar el número relativo a una edad podríamos optar según la tabla por un dato de tipo Byte o un dato de tipo Integer, ya que los dos son de tipo numérico. Sin embargo, el rango de números en el dato de tipo Integer es mucho mayor que el dato de tipo Byte. Quiere decirse entonces que si utilizamos el Integer consumiremos recursos de memoria innecesarios. El dato de tipo Byte sería el más adecuado, pues el rango en el que actúa es el más ajustado.

DECLARACIÓN DE VARIABLES.

Page 7: Visual Basic Para Excel

Definición de variable.

Espacio en la memoria del ordenador donde se puede almacenar un valor que podrá variar a lo largo de la ejecución de un programa. Se suelen declarar con el código reservado Dim, pero no siempre. Por ejemplo, en las variables públicas se usa el código reservado Public.

Las variables pueden ser de tipo primitivo o de tipo objeto. De tipo primitivo son aquellas en las que al declararlas especificamos el tipo de dato que es:

Dim nombre As String

De tipo objeto son aquellas en las que al declararlas especificamos el tipo de objeto que es (una celda, un libro, una hoja, etc):

Dim micelda As Range

Variable local a nivel de procedimiento.

Es la variable que ha sido declarada dentro del código de un procedimiento. Es el caso más común y es única del procedimiento donde se ha declarado. El hecho de ser única del procedimiento donde se ha declarado implica que si la llamamos desde otro procedimiento, al no estar declarada en él no la reconoce y sale error.

Variable local a nivel de módulo.

Es la variable que ha sido declarada fuera de todos los procedimientos pero dentro del mismo módulo. Es una variable común a todos los procedimientos y, por lo tanto, reconocida por todos ellos.

Los valores de dicha variable deben de ir en cada procedimiento.

Page 8: Visual Basic Para Excel

Variable pública.

En este caso, la variable se define en un módulo cualquiera y fuera de todos los procedimientos, pero en lugar del código reservado Dim usamos el código Public, también reservado. Esté declarada en el módulo en que lo esté, esta variable será reconocida por todos los procedimientos por los que sea llamada.

Declaración.

En la primera línea abrimos el procedimiento.

En la segunda línea introducimos la declaración propiamente dicha de la variable. Una variable se puede declarar mediante varios códigos, usualmente el código Dim. Después de este código ya escribiríamos el nombre de la variable.

El nombre de la variable debe cumplir con las siguientes características:

Debe empezar por una letra.

Debe estar formada como mucho de 200 caracteres, pero cuanto más corto sea mejor.

No se admiten espacios ni caracteres especiales.

Después del nombre de la variable debemos escribir el código As, seguido del tipo de dato a utilizar. Si esto último no lo escribimos nos lo tomará como un dato de tipo Variant, el cual consume más recursos.

Un ejemplo de declaración sería el siguiente:

Dim Nombre As String

En la tercera línea damos valor a la variable, mediante el uso del signo =. Los valores en texto van entre comillas y los valores numéricos no. De esta forma, la tercera línea nos podría quedar de la siguiente manera:

Nombre=”María”

Page 9: Visual Basic Para Excel

En las siguientes líneas va el código que define lo que queremos hacer con esas variables y sus valores. Como ejemplo podríamos poner el siguiente:

Msgbox “Hola “& Nombre

En la última línea ya cerraríamos el procedimiento.

En definitiva el código entero podría ser éste.

Sub tipo_datos ()

Dim Nombre As String

Nombre=”María”

Msgbox “Hola “ & Nombre

End sub

Ahora imaginemos que tenemos el siguiente procedimiento:

Sub tipo_datos ()

Dim Nombre As String

Dim Edad As Byte

Nombre=”María”

Edad=15

MsgBox "Hola " & Nombre & " tienes " & Edad & " años."

End sub

Este código podría quedar también de la siguiente forma:

Sub tipo_datos ()

Dim Nombre As String, Edad As Byte

Nombre=”María”: Edad=15

MsgBox "Hola " & Nombre & " tienes " & Edad & " años."

End sub

Es importante declarar las variables. Si no lo hicieramos el código del programa que estemos creando dará lugar a fallos difíciles de identificar. Se puede configurar Visual Basic para que nos avise cuando se nos

Page 10: Visual Basic Para Excel

olvide declarar alguna variable. Para activar esta opción hay que seguir el camino siguiente:

Menú Herramientas/Opciones…/pestaña Editor/Requerir declaración de variables.

Una vez hayamos configurado esta opción, en todos los módulos que creemos a partir de entonces aparecerá el texto Opción Explicit, que nos indicará que está opción ya está funcionando.

DECLARACIÓN DE CONSTANTES.

Definición de constante.

Espacio en la memoria del ordenador donde se puede almacenar un valor que podrá no varía a lo largo de la ejecución de un programa. Como no varía suelen declararse a nivel de módulo o públicamente.

Cómo declarar constantes a nivel de módulo.

Se declararán fuera de los procedimientos, utilizando la palabra o código reservado Const y seguido del nombre que le demos a la constante.

El nombre de la constante debe cumplir con las siguientes características:

Debe empezar por una letra.

Debe estar formada como mucho de 200 caracteres, pero cuanto más corto sea mejor.

No se admiten espacios ni caracteres especiales.

Es recomendable que después del nombre de la constante escribamos el código As, seguido del tipo de dato a utilizar. Después escribiremos el signo = seguido del valor de la constante, encerrado entre comillas si es un valor textual.

Después abriríamos los procedimientos que van a utilizar la constante. Dentro de ellos iría el código que

Page 11: Visual Basic Para Excel

define lo que queremos hacer con esas variables y sus valores.

Y para finalizar iría la línea que cierra el procedimiento.

Un ejemplo podría ser éste:

Const valor As Integer = 7

Sub declaracion_constantes()

MsgBox valor

End Sub

Cómo declarar constantes públicas.

La declaración pública de una constante se realiza también fuera de los procedimientos y anteponiendo el código o palabra reservada Public al otro código o palabra reservada Const.

Public Const valor As Integer = 7

Sub declaracion_constantes()

MsgBox valor

End Sub

MATRICES.

Son estructuras que poseen casi todos los lenguajes de programación. Es una gran variable donde podemos almacenar varios valores. Pueden ser de una dimensión o de dimensiones múltiples. Los índices se podrían definir como los lugares específicos que ocupan los valores dentro de la matriz, motivo por el cual a los índices se les llama también posiciones. De aquí en adelante llamaremos a los índices de esta última forma para facilitar el entendimiento.

Page 12: Visual Basic Para Excel

Posiciones en matrices de una dimensión.

Más arriba hemos definido a las posiciones como los lugares específicos que ocupan los valores dentro de la matriz. Para poder entender esto en el caso de una matriz de una dimensión debemos imaginarnos dicha matriz

como un rectángulo dividido en varias partes.

Cada parte sería una posición, de las cuales la más baja es por defecto la posición 0, aunque se puede configurar VBA para que la primera posición sea la 1.

Cada posición alberga en su interior un valor.

En el caso de la figura podemos apreciar una matriz constituida por 4 posiciones, y por lo tanto será una matriz con 4 valores.

Declaración de matrices de una dimensión.

Suponiendo que la matriz fuera local a nivel de procedimiento los pasos a seguir serían los siguientes:

1. En la primera línea abrimos el procedimiento.

Sub declaracion_matrices()

2. Un ejemplo de código para la segunda línea sería el siguiente:

Dim Mirango(0 to 4) As Integer

Dim sería la palabra reservada que declara la matriz. Mirango sería el nombre de la matriz. El código entre paréntesis nos dice que la matriz queda dividida en cinco partes, es decir, cinco posiciones: 0, 1, 2, 3 y 4. Por lo tanto la matriz tendrá cinco valores. Con el código As Integer estamos definiendo el tipo de dato que tienen esos valores.

Figura 6

3210

Page 13: Visual Basic Para Excel

También se puede expresar esta segunda línea expresando solamente la última posición:

Dim Mirango(4) As Integer

Y ya se da por hecho que contiene cinco posiciones que van desde la 0 a la 4.

3. En las siguientes líneas damos valores a cada posición. Para ello se escribe en cada línea el nombre de la matriz seguido de apertura y cierre de paréntesis, dentro de los cuales se indica la posición que ocupa el valor en cuestión. Después se escribe el signo = seguido del valor.

Mirango(0) = 32

Mirango(1) = 2

Mirango(2) = 1

Mirango(3) = 3

Mirango(4) = 12

4. En las siguientes líneas se introduce el código que determina aquello que queremos hacer con los valores.

Msgbox Mirango(4)

5. En la última fila cerraríamos el procedimiento

End sub

Recopilando todo el código introducido tendríamos esto:

Sub declaracion_matrices()

Dim Mirango(4) As Integer

Mirango(0) = 32

Mirango(1) = 2

Mirango(2) = 1

Mirango(3) = 3

Mirango(4) = 12

Msgbox Mirango(4)

Page 14: Visual Basic Para Excel

End sub

¿Qué ocurriría si habiendo declarado en la segunda línea que la matriz quedará dividida en cinco posiciones (0, 1, 2, 3 y 4) añadiéramos otra línea con el código siguiente?

Mirango(5) = 11

Lo que pasaría es que nos daría un error de desbordamiento. VBA nos dice que tenemos dividida la matriz en cinco posiciones y ese valor se refiere a una sexta posición que no existe.

Existen programadores que prefieren que las matrices se dividan en posiciones de forma que la primera posición sea la 1 en lugar de la 0. Lo que a más de uno se le ocurriría sería poner el código de la siguiente forma:

Sub declaracion_matrices()

Dim Mirango(4) As Integer

Mirango(1) = 2

Mirango(2) = 1

Mirango(3) = 3

Mirango(4) = 12

Msgbox Mirango(4)

End sub

Pero en este caso sigue habiendo una posición 0. Lo que pasa es que no se ha hecho referencia a ella en ninguna parte del código. Dicho posición alberga un valor de 0.

Por lo tanto, Si queremos que la posición 0 no exista y la primera posición a rellenar sea la 1 deberemos escribir el siguiente código fuera de los procedimientos:

Option Base 1

Quedaría entonces el código siguiente:

Option Base 1

Sub declaracion_matrices()

Dim Mirango(4) As Integer

Page 15: Visual Basic Para Excel

Mirango(1) = 2

Mirango(2) = 1

Mirango(3) = 3

Mirango(4) = 12

Msgbox Mirango(4)

End sub

Posiciones en matrices de dos dimensiones.

Este tipo de matriz hay que imaginársela como el típico juego de hundir barcos, en el que para poder hundirlos hay que dar posiciones en dos direcciones. Las posiciones en este tipo de matrices quedan definidas por dos números separados por una coma. El primero representa las columnas y el segundo las filas.

La

matriz tendría que ser declarada mediante la palabra reservada correcta, normalmente Dim . Después se pondría entre paréntesis dos números: el primero sería el que representa el total de columnas y el segundo el total de filas. Ambos números estarían separados por una coma. Para terminar de declararla escribiríamos la palabra

Figura 6

3,42,41,40,4

3,32,31,30,3

3,22,21,20,2

3,12,11,10,1

3,02,01,00,0

Page 16: Visual Basic Para Excel

reservada As, seguida de la que define al tipo de dato. Aquí mostramos un ejemplo acorde con la figura 6:

Dim matriz (4,5) As Integer

Luego ya pues adjudicaríamos valores a las posiciones de la matriz. Por ejemplo, para adjudicar un valor a la posición 1,2 de la figura 6 se introduciría el siguiente código.

Matriz (1,2)=7

EJEMPLOS DE PROCEDIMIENTOS.

Ejemplo 1. Procedimiento sub: Suma de dos números.

Sub suma ()

Sum=4+6

MsgBox “La suma es: “ & sum

End Sub

En la primera línea decimos que es un procedimiento sub y le damos un nombre descriptivo de la acción que va a realizar, seguido de paréntesis de inicio y final.

En la segunda introducimos el código de la suma y los números que intervienen en ella.

En la tercera le introducimos el código MsgBox, que sirve para que nos salga una ventana. Entre comillas se pone el texto que ha de aparecer en la ventana. Para hacer que aparezca el resultado de la suma se introduce el signo & después de las comillas y seguido del código de la operación, que en este caso es sum.

El código de la cuarta línea es con el que siempre se cierra un procedimiento sub.

Ejemplo 2. Procedimiento function.

Function Operación (num1, num2, num3)

Operación=(num1-num2+num3)/(num2*1000)

Page 17: Visual Basic Para Excel

End Function

En la primera línea introducimos el nombre de la operación y, entre paréntesis, los términos que intervienen en ella.

En la segunda línea ponemos el nombre de la operación seguido del signo =. Después de este signo introducimos la fórmula de la función, expresada con los términos.

El código de la línea tercera línea es el que se utiliza siempre para cerrar un procedimiento de tipo function.

Ejemplo 3. Procedimiento sub: introducir valor en una celda determinada.

Sub CambiaValorDeCelda ()

Worksheets (“Hoja1”). Range (“A1”).Value=12345

End Sub

En la primera línea escribimos el nombre del procedimiento, lo más descriptivo posible de la acción que va a realizar, y seguido de paréntesis de inicio y final.

En la segunda línea le indicamos la hoja donde se encuentra la celda a la que vamos a añadir el valor, y también hacemos alusión a la propia celda. El código Value seguido del símbolo = sirve para indicar el valor que ha de introducir.

Con la tercera línea cerramos el procedimiento.

Ejemplo 4. Procedimiento sub: ventana de información con valor de celda.

Sub LecturaDeValor ()

Msgbox Worksheets (“Hoja1”).Range (“A1”).Value

End Sub

Page 18: Visual Basic Para Excel

En la primera línea hemos escrito el nombre del procedimiento, lo más descriptivo posible, abriendo y cerrando paréntesis después.

En la segunda línea y mediante el código Msgbox estamos diciendo que nos debe de enseñar una ventana, en la cual debe aparecer el valor del rango y la hoja que se especifica entre paréntesis.

Con la tercera línea cerramos el procedimiento.

Ejemplo 5. Procedimiento sub: eliminar valores y formatos de un rango o celda.

Sub BorrarValoresYformatos ()

Worksheets (“Hoja1”).Range (“A1:C3”).Clear

End Sub

En la primera línea introducimos el nombre del procedimiento, de la forma más descriptiva posible, seguido de apertura y cierre de paréntesis.

En la segunda línea especificamos la hoja y el rango al que afectará la acción. Por último introducimos el código de la acción a realizar, que en este caso es Clear.

En la tercera línea cerramos el procedimiento.

Este procedimiento nos puede servir, por ejemplo, a la hora de hacer un botón mediante el cual indiquemos a Excel que después de haber introducido una serie de valores en una hoja que utilizamos como plantilla, éstos nos lo borre (porque ya lo hayamos imprimido, por ejemplo) y que la hoja se quede limpia.

Ejemplo 6. Procedimiento sub: copiar valores de un rango o celda de una hoja a otro rango o celda de otra.

Sub CopiarAotroLugar()

Worksheets("Hoja1").Range("D3").Copy

Page 19: Visual Basic Para Excel

Worksheets("Hoja2").Range("A1").Insert Shift:=xlDown

End Sub

En la primera línea hemos escrito el nombre del procedimiento, lo más descriptivo posible, seguido de paréntesis inicial y final.

En la segunda línea hemos introducido el código que especifica la hoja y el rango o celda a copiar. Finalmente hemos introducido el código que corresponde a la acción copiar.

En la segunda línea hemos introducido el código que especifica la hoja y el rango o celda donde pegar lo copiado. El código Insert ordena que lo inserte. La parte final indica que al insertar desplace una fila más abajo el dato que ya contenga la celda de destino. Esto es así porque cuando tenemos una hoja que la utilizamos como registro donde quedan reflejados los datos que introducimos desde otra hoja que utilizamos como plantilla, los últimos datos registrados se sitúan en la primera fila, por lo que todo lo que esté en esa primera fila debe bajar una para dejar sitio al registro nuevo.

Con la cuarta línea se cierra el procedimiento.

Ejemplo 7. Procedimiento sub: ventana informativa de comentario.

Sub comentario ()

MsgBox Worksheets("Hoja1").Comments(1).Text

End sub

En la primera línea hemos escrito el nombre del procedimiento, lo más descriptivo posible, seguido de paréntesis inicial y final.

En la segunda línea estamos indicando que lo que debe hacer esta macro es lanzar una ventana informativa, mediante el código Msgbox. Con el código Worksheets

Page 20: Visual Basic Para Excel

indicamos en que hoja está la información que debe presentar la ventana. Con el código Comments(1) indicamos qué comentario es el que contiene la información (como entre paréntesis tenemos un 1, le estamos indicando que el comentario que debe aparecer en la venta informativa es el comentario que hemos creado en primer lugar). Con el código Text le estamos diciendo que lo que queremos que aparezca de ese comentario sea el texto, lo que contiene el comentario.

La última línea es para cerrar el procedimiento.

Si no sabemos en qué orden hemos creado el comentario que debemos hacer que aparezca en la ventana informativa podemos utilizar este otro procedimiento:

Sub comentario ()

MsgBox Worksheets("Hoja1").Range (“F6”). Comment. Text

End sub

Con el código Range estamos indicando la celda donde está el comentario deseado. Por lo tanto ya queda claro qué comentario es.

Ejemplo 8. Procedimiento sub: insertar comentario en una celda si ésta todavía no lo tiene.

Sub insertarcomentario()

If Worksheets("Hoja1").Range("J5").Comment Is Nothing Then

Worksheets("Hoja1").Range("J5").AddComment "Celda corregida."

Else

Msgbox Worksheets("Hoja1").Range("J5"). Comment. Text

End If

Page 21: Visual Basic Para Excel

End Sub

En la primera línea escribimos el procedimiento de la forma más descriptiva posible, seguido de paréntesis inicial y final.

En la segunda línea lo que venimos a decir es que si en el rango J5 de la hoja Hoja1 no hay ningún comentario entonces haga lo que se indica en la tercera línea.

Lo que decimos que haga en la tercera línea es que en el rango J5 de la hoja Hoja1 nos agregue el comentario que viene entre comillas.

En la cuarta línea le decimos que de lo contrario, en caso de que en el rango J5 de la hoja Hoja1 haya un comentario, haga lo que se dice en la quinta línea.

En la quinta línea le decimos que nos muestre una ventana informativa con el comentario de la celda J5 de la hoja Hoja1.

La sexta línea es para dar por finalizada la condición.

La séptima línea es para dar por finalizado todo el procedimiento.

Ejemplo 9. Procedimiento sub: eliminar valor de celda.

Sub borrar()

Range("G6").Select

Selection.ClearContents

End Sub

En la primera línea aparece el código Sub que se refiere a un procedimiento, el cual se llama borrar.

El código de la segunda línea hace referencia a una celda G6 de la hoja activa, y a un método de ese objeto, que es aquello que queremos que haga el objeto.

En la tercera línea hemos puesto otro objeto referente a la selección seguido de uno de sus métodos, que es

Page 22: Visual Basic Para Excel

aquello que queremos que haga el objeto. Este método (Clearcontents) lo que hace es eliminar el valor de la celda, no su formato.

Para finalizar utilizamos en la cuarta línea el código End Sub, con el que indicamos que hemos finalizado el procedimiento.

Pero no hace falta seleccionar primero la celda. Podemos crear un código que elimine su valor directamente, que sería del tipo siguiente:

Sub borrar()

Range("G6"). ClearContents

End Sub

Ejemplo 10. Procedimiento sub: colorear celda.

Sub colorear ()

Range("G6").Interior.Color = vbYellow

End Sub

El código Sub de la primera línea hace referencia a un procedimiento que hemos llamado colorear.

En la segunda línea hemos dicho que queremos colorear el interior de la celda G6 de un color igual a amarillo. Nótese que hemos antepuesto al color del nombre el código vb. En este caso hay dos propiedades: Interior y Color. Color se puede decir que es una subpropiedad de Interior.

Con el código de la tercera línea finalizamos el procedimiento.

En caso de saber el código RGB referente al color que queremos usar podremos variar el procedimiento para que quede de la siguiente forma:

Sub colorear ()

Range("G6").Interior.Color = rgb (125, 245, 56)

Page 23: Visual Basic Para Excel

End Sub

Ejemplo 11. Procedimiento sub: eliminar valor y formato de celda.

Sub BorrarFomatoValor()

Range("G6").Select

Selection.Clear

End Sub

En la primera línea escribimos Sub para indicar que es un procedimiento, dándole el nombre más representativo posible.

En la segunda línea decimos que nos seleccione la celda G6.

En la tercera línea decimos que nos limpie lo seleccionado, es decir, la celda G6. Lo que hace el método Clear es eliminar el formato y valor de la celda.

Con la cuarta línea cerramos el procedimiento.

Este código se puede mejorar, puesto que para eliminar el formato y valor de una celda y, en general, realizar cualquier acción, no hace falta seleccionarlo. Por tanto el código también podría ser el siguiente.

Sub BorrarFomatoValor()

Range("G6").Clear

End Sub

Ejemplo 12. Procedimiento sub: convertir euros a pesetas.

Public Const equivalencia As Double = 166.386

Sub declaracion_constantes()

Dim salarioeuros As Currency

Dim salariopesetas As Currency

salarioeuros = 1500

salariopesetas = salarioeuros * equivalencia

Page 24: Visual Basic Para Excel

MsgBox "Su salario en pesetas es " & salariopesetas

End Sub

La primera línea nos dice que hemos declarado una constante llamada equivalencia de forma pública y, como tal, podrá ser usada por cualquier procedimiento de cualquier módulo. Es de tipo Double por ser un dato de tipo decimal con tres decimales.

En la segunda línea abrimos un procedimiento que va a usarla (se supone que habría más procedimientos que la usarían).

En la tercera línea declaramos la variable salarioeuros, que se declarará como As Currency por ser de tipo moneda.

En la cuarta línea declaramos la variable salariopesetas, que se declarará también como As Currency ya que es una variable del mismo tipo que la anterior.

Tanto la variable declarada en la tercera línea como en la cuarta podrán utilizarse solamente dentro de este procedimiento, por estar declaradas dentro de él. Ambas son necesarias para realizar la operación de conversión.

En la quinta línea damos un valor a salarioeuros, que al estar formado únicamente por números no va encerrado entre paréntesis. Es el salario en euros que queremos convertir.

En la sexta línea realizamos la operación mediante el uso de la constante y variables declaradas.

Con el código de la séptima línea lo que conseguimos es que salga una ventana de información, la cual aparece gracias al código o palabra reservada Msgbox. Entre comillas metemos el texto que queremos que aparezca en la ventana de información. Después concatenamos con el símbolo & la variable salariopesetas para que al hacer funcionar el código aparezca en la ventana el texto,

Page 25: Visual Basic Para Excel

seguido del valor de dicha variable. Nótese como antes de cerrar comillas se deja un espacio en blanco para que el valor de la variable salariopesetas no quede pegado al último carácter del texto.

Ejemplo 13. Procedimiento sub: introducir valor en celda y darle formato.

Sub variables_objeto()

Worksheets(1).Range("B5") = 124

Worksheets(1).Range("B5").Font.Bold = True

Worksheets(1).Range("B5").Font.Italic = True

End Sub

En primera línea abrimos procedimiento y le damos nombre

En segunda línea llegamos hasta la celda y luego le damos valor. No hay que escribir la propiedad Value porque como es la propiedad por defecto del objeto Range se sobrentiende.

En tercera línea llegamos hasta el objeto Font y, de éste introducimos la propiedad Bold. Damos el valor true para activar la propiedad Bold. Lo que hace es poner el valor en negrita.

En tercera línea llegamos hasta el objeto Font y, de éste introducimos la propiedad Italic, y luego le damos el valor true para activarla. Lo que hace es poner el valor en cursiva.

Con la última línea cerramos el procedimiento.

Este código se puede escribir de la siguiente forma:

Sub variables_objeto()

Dim micelda As Range

Set micelda = Worksheets(1).Range("B5")

micelda = 124

micelda.Font.Bold = True

Page 26: Visual Basic Para Excel

micelda.Font.Italic = True

End Sub

En la primera celda se ha abierto y dado nombre al procedimiento.

En la segunda línea declaramos la variable micelda como dato de tipo objeto, concretamente Range. Es como si estuvieramos dando el nombre micelda a una celda o rango.

En la tercera línea mediante la palabra reservada Set estamos diciendo a VBA que introducir el código micelda es lo mismo que introducir el camino normal para llegar a ella. Es como si en lugar de decir el nombre y apellido de una persona le llamáramos por su apodo para simplificar. Si este ejemplo no sirviera podemos decir que con el código Set estamos asignando un atajo que equivaldrá al camino que habitualmente se sigue.

En las siguientes líneas procedemos a introducir el mismo código del inicio del ejemplo pero sustituyendo el camino a seguir para dar con la celda por su atajo o apodo.

En la última línea se cierra el procedimiento.

Ejemplo 14. Procedimiento sub: Recorrer los valores de un rango mediante una ventana de información.

Para este ejemplo se sobrentiende que debe haber un rango seleccionado en la hoja de Excel.

Sub variables_objeto()

Dim micelda As Range

For Each micelda In Selection

MsgBox micelda.Value

Next micelda

End Sub

Page 27: Visual Basic Para Excel

En la primera abrimos y damos nombre al procedimiento.

En la segunda línea declaramos una variable cuyo tipo de dato será un objeto de tipo Range. Hasta aquí VBA no sabe si la variable se refiere a un rango o a una celda (ya que el objeto Range puede ser cualquiera de las dos cosas).

En la tercera línea se inicia un bucle, en el que estamos diciendo a VBA que por cada micelda que se encuentre en la selección haga algo que todavía no sabe. Pero lo que si sabe ya con esta línea es que si una selección es un rango, micelda no puede ser otra cosa que una celda.

En la cuarta línea le indicamos la acción que debe realizar: abrir una ventana en la que vayan apareciendo los valores de cada celda cada vez que hagamos clic en aceptar.

En la quinta línea se cierra el bucle y en la sexta se cierra todo el procedimiento.

Ejemplo 15. Procedimiento sub: tres formas de dar formato a una celda.

En este ejemplo vamos a dar un formato a la celda B5 de una hoja. Podemos hacerlo de tres formas diferentes.

Debemos tratar siempre de escoger la forma en la que más limpio quede el código.

Método no recomendado.

Sub formatocelda()

Worksheets(2).Range("B5").Value = 124

Worksheets(2).Range("B5").Font.Bold = True

Worksheets(2).Range("B5").Font.Italic = True

End Sub

Page 28: Visual Basic Para Excel

En este caso vemos como en las líneas 2, 3 y 4 hemos tenido que especificar en qué hoja está la celda B5 a la que queremos dar formato. Igualmente hemos tenido que especificar las propiedades que queremos manipular en cada línea.

Este método nos puede valer para un procedimiento con poco código, no siendo recomendable cuando dicho código ha de ser extenso. La razón es que para llegar a la propiedad que queremos cambiar en cada línea hemos tenido que especificar en qué hoja y en qué celda ha de cambiarse dicha propiedad. Por ejemplo en este caso hemos tenido que especificar la hoja y el rango (en este caso una celda) tres veces, por lo que el procedimiento se puede demorar.

Método medianamente recomendado.

Sub formatocelda()

Dim ruta As Range

Set ruta = Worksheets(2).Range("B5")

ruta.Value = 124

ruta.Font.Bold = True

ruta.Font.Italic = True

End Sub

En este otro caso vemos que hemos declarado una variable como tipo rango en la segunda línea.

En la tercera línea decimos que esa variable es una especie de abreviatura para llegar a una celda de una hoja determinada (en este caso la celda B5 de la hoja que ocupa la segunda pestaña).

Por lo tanto, en las líneas 3, 4 y 5 cambiamos las propiedades de la celda utilizando esta abreviatura, y así el ordenador se hace menos lío al procesar el código por haber quedado más simplificado.

Page 29: Visual Basic Para Excel

Método recomendado.

Sub formatocelda()

Dim ruta As Range

Set ruta = Worksheets(2).Range("B5")

With ruta

.Value = 124

.Font.Bold = True

.Font.Italic = True

End With

End Sub

En este tercer método hemos utilizado además la instrucción With - End With, dentro de la cual introducimos las propiedades a cambiar con el valor que deben tomar. Es el método que menos se demora.

Ejemplo 16. Procedimiento sub: bucle con celdas.

Sub variables_objeto()

Dim celda As Range

For Each celda In Selection

MsgBox celda.Value

Next celda

End Sub

Después de abrir el procedimiento declaramos la variable celda como el tipo de objeto que es (un rango).

En la tercera línea y siempre que tengamos un rango seleccionado le decimos que por cada celda que haya en la selección haga lo que se indica en la cuarta y quinta línea. Y lo que tiene que hacer este procedimiento es, por tanto, lo que digan dichas líneas: que aparezca una ventana informativa con el valor de cada celda cada vez que pulsemos el botón Aceptar de la ventana informativa.

Page 30: Visual Basic Para Excel

En la última línea cerramos el procedimiento.