You are on page 1of 30

VISUAL BASIC PARA EXCEL.

GENERALIDADES.
Hay dos maneras de generar cdigos VBA:
Introduciendo el cdigo 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 ms productivos.
La desventaja de estas macros es que nunca
conseguiremos entender cmo funciona realmente Visual
Basic.
Por lo tanto aqu nos vamos a centrar en esta ltima
manera de generar cdigos VBA. Los cdigos podrn
referirse a un procedimiento (lo ms usual) o a una
funcin.
En VBA se distingue mediante colores el tipo de
cdigo introducido. En azul aparecen las palabras
reservadas del lenguaje VBA, o cdigo reservado. En negro
los datos que introducimos y, en verde, los comentarios o
aclaraciones relativas a la funcin que desempea el
cdigo que generamos en su conjunto. Por lo tanto, no
podremos introducir variables, funciones o procedimientos
con nombres iguales al cdigo o palabra reservada de VBA.
Para introducirnos de lleno en la programacin en
VBA debemos adquirir unos conocimientos previos a la
hora de programar. En VBA tenemos cdigos de tipo
objeto, propiedad y mtodo.

Pongamos el ejemplo de una caravana. La caravana


sera el objeto, la cual tiene unas propiedades, y el uso que
le damos a la caravana seran los mtodos (figura 1).

Figura 1

Pero habr caravanas del mismo tipo que la nuestra y


con las mismas propiedades. Para diferenciarlas nos hace
falta la matrcula. Esta matrcula la pondramos entre
parntesis.
Adems, habr objetos que tengan mismos mtodos.
Por ejemplo, una caravana sirve para transportar gente,
igual que un coche. Por lo tanto comparten un mismo uso o
mtodo.
Y habr otros mtodos que no sean compartidos entre
objetos. Por ejemplo, una caravana sirve para vivir, pero un
coche no.

Ahora extrapolemos este ejemplo a Excel, y


centrmonos en una celda. La celda sera el objeto, con
una serie de propiedades configurables, y con unos
mtodos que son el uso que podemos dar a la celda (figura
2).
Otro

Figura 2

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 estn jerarquizados. Pensemos en
un juego de muecas rusas, en el que segn las vas
abriendo vas encontrando dentro nuevas muecas de
menor tamao. Lo mismo ocurre con los objetos VBA

Figura 3

(figura 3).

Jerarqua del punto.


Volvamos al ejemplo de la caravana. Imaginemos que
tenemos un objeto llamado as dentro de VBA. El cdigo a
escribir bien podra ser el siguiente:
Caravana(Matrcula).Color=1

Donde la palabra color hace referencia a una


propiedad, y como propiedad que es deber tener un valor.
Otro cdigo bien podra ser este otro:
Caravana(Matrcula).Vivir.

Donde la palabra vivir hace referencia a un mtodo,


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 cdigo completo en esta jerga sera por ejemplo el
siguiente:
Excel.Libro.Hoja.Celda.Valor=1

La propiedad sera el cdigo valor, y como propiedad


tiene un valor, que en este caso es igual a 1.
Ahora ya estamos preparados para entender el cdigo
VBA correcto a utilizar, que sera del tipo siguiente:
Application.Workbooks(Libro1).Worksheets(Hoja1).Ra
nge(B5).Value=1

Cuando vamos a utilizar este cdigo en un objeto


activo, podemos borrar el cdigo referente a todos los
objetos que lo contienen.
Por ejemplo, imaginemos que vamos a asociar el
cdigo anterior a un botn que crearemos en la hoja Hoja1.
Se sobrentender que el botn actuar sobre la celda B5
de la hoja Hoja1 del libro Libro1 y de la aplicacin que
estamos utilizando, que es Excel. Por lo tanto el cdigo 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
cdigo final resumido sera el siguiente:
Range(B5)=1

En definitiva, si prevemos que el cdigo va a


funcionar en hojas distintas, aadiremos el cdigo del
objeto referente a la hoja. Si adems prevemos que va a
utilizarse en diferentes libros, aadiremos el cdigo
referente al libro. Y si adems resulta que prevemos que el
cdigo va a utilizarse en diferentes programas que
soporten VBA tendremos que aadir el objeto referente a la
aplicacin.
Si en lugar de a un procedimiento, el cdigo se refiere
a una funcin, los mtodos sern funciones.
Si an con todo lo explicado no tiene claro lo que son
los mtodos y las propiedades no se preocupe. Segn vaya
escribiendo el cdigo le aparecer un desplegable (figura
4). Los que aparecen con un icono verde a la izquierda son
mtodos y funciones, y los que salen en gris con una mano
son propiedades.

Mdulos.
Estn almacenados en el
libro Excel y solamente
pueden verse o editarse
Figura 4
utilizando el Editor de Visual
Basic. Existen dos tipos de mdulos: el standard y el de
clase. El nombre de los mdulos no debe contener
espacios.

El cdigo puede
referirse a
procedimientos o a
funciones (function).
stos ltimos pueden
servir para crear
frmulas
personalizadas y, para
utilizarlas, habra que
irse a la opcin
Definida por el usuario
de la ventana Insertar
funcin (figura 5).

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 descripcin
orientativa los tipos de datos soportados por Excel a la
hora de declarar variables.
TIPO DATO

DESCRIPCION

Byte

Datos numricos del 0 al


255

Boolean

Datos de tipo true/false.

Integer

Datos numricos de
nmeros enteros que van
desde -32768 a 32767.

Long

Datos numricos de
nmeros enteros grandes.

Single

Datos numricos de
nmeros decimales cortos.

Double

Datos numricos de

nmeros decimales largos.


Decimal

Datos numricos de
nmeros decimales
extremadamente largos.

Currency

Datos de tipo moneda.

Range, Selection, etc

Datos de tipo objeto.

String

Datos compuestos por


cadenas de caracteres
(palabras o frases).

Variant

Datos 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 nmero relativo a una edad podramos optar
segn la tabla por un dato de tipo Byte o un dato de tipo
Integer, ya que los dos son de tipo numrico. Sin embargo,
el rango de nmeros 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 sera el ms
adecuado, pues el rango en el que acta es el ms
ajustado.

DECLARACIN DE VARIABLES.
Definicin de variable.
Espacio en la memoria del ordenador donde se puede
almacenar un valor que podr variar a lo largo de la
ejecucin de un programa. Se suelen declarar con el
cdigo reservado Dim, pero no siempre. Por ejemplo, en las
variables pblicas se usa el cdigo 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 cdigo
de un procedimiento. Es el caso ms comn 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 mdulo.


Es la variable que ha sido declarada fuera de todos
los procedimientos pero dentro del mismo mdulo. Es una
variable comn a todos los procedimientos y, por lo tanto,
reconocida por todos ellos.
Los valores de dicha variable deben de ir en cada
procedimiento.

Variable pblica.
En este caso, la variable se define en un mdulo
cualquiera y fuera de todos los procedimientos, pero en
lugar del cdigo reservado Dim usamos el cdigo Public,
tambin reservado. Est declarada en el mdulo en que lo
est, esta variable ser reconocida por todos los
procedimientos por los que sea llamada.

Declaracin.
En la primera lnea abrimos el procedimiento.
En la segunda lnea introducimos la declaracin
propiamente dicha de la variable. Una variable se puede

declarar mediante varios cdigos, usualmente el cdigo


Dim. Despus de este cdigo ya escribiramos el nombre
de la variable.
El nombre de la variable debe cumplir con las
siguientes caractersticas:
Debe empezar por una letra.
Debe estar formada como mucho de 200
caracteres, pero cuanto ms corto sea mejor.
No se admiten espacios ni caracteres especiales.
Despus del nombre de la variable debemos escribir
el cdigo 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 ms recursos.
Un ejemplo de declaracin sera el siguiente:
Dim Nombre As String

En la tercera lnea damos valor a la variable,


mediante el uso del signo =. Los valores en texto van entre
comillas y los valores numricos no. De esta forma, la
tercera lnea nos podra quedar de la siguiente manera:
Nombre=Mara

En las siguientes lneas va el cdigo que define lo que


queremos hacer con esas variables y sus valores. Como
ejemplo podramos poner el siguiente:
Msgbox Hola & Nombre

En la ltima lnea ya cerraramos el procedimiento.


En definitiva el cdigo entero podra ser ste.
Sub tipo_datos ()
Dim Nombre As String
Nombre=Mara
Msgbox Hola & Nombre
End sub

Ahora imaginemos que tenemos el siguiente


procedimiento:
Sub tipo_datos ()
Dim Nombre As String
Dim Edad As Byte
Nombre=Mara
Edad=15
MsgBox "Hola " & Nombre & " tienes " & Edad & " aos."
End sub

Este cdigo podra quedar tambin de la siguiente


forma:
Sub tipo_datos ()
Dim Nombre As String, Edad As Byte
Nombre=Mara: Edad=15
MsgBox "Hola " & Nombre & " tienes " & Edad & " aos."
End sub

Es importante declarar las variables. Si no lo


hicieramos el cdigo del programa que estemos creando
dar lugar a fallos difciles de identificar. Se puede
configurar Visual Basic para que nos avise cuando se nos
olvide declarar alguna variable. Para activar esta opcin
hay que seguir el camino siguiente:
Men Herramientas/Opciones/pestaa
Editor/Requerir declaracin de variables.
Una vez hayamos configurado esta opcin, en todos
los mdulos que creemos a partir de entonces aparecer el
texto Opcin Explicit, que nos indicar que est opcin ya
est funcionando.

DECLARACIN DE CONSTANTES.

Definicin de constante.
Espacio en la memoria del ordenador donde se puede
almacenar un valor que podr no vara a lo largo de la
ejecucin de un programa. Como no vara suelen
declararse a nivel de mdulo o pblicamente.

Cmo declarar constantes a nivel de mdulo.


Se declararn fuera de los procedimientos, utilizando
la palabra o cdigo reservado Const y seguido del nombre
que le demos a la constante.
El nombre de la constante debe cumplir con las
siguientes caractersticas:
Debe empezar por una letra.
Debe estar formada como mucho de 200
caracteres, pero cuanto ms corto sea mejor.
No se admiten espacios ni caracteres especiales.
Es recomendable que despus del nombre de la
constante escribamos el cdigo As, seguido del tipo de
dato a utilizar. Despus escribiremos el signo = seguido del
valor de la constante, encerrado entre comillas si es un
valor textual.
Despus abriramos los procedimientos que van a
utilizar la constante. Dentro de ellos ira el cdigo que
define lo que queremos hacer con esas variables y sus
valores.
Y para finalizar ira la lnea que cierra el
procedimiento.
Un ejemplo podra ser ste:
Const valor As Integer = 7
Sub declaracion_constantes()
MsgBox valor
End Sub

Cmo declarar constantes pblicas.


La declaracin pblica de una constante se realiza
tambin fuera de los procedimientos y anteponiendo el
cdigo o palabra reservada Public al otro cdigo 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 programacin. Es una gran variable donde podemos
almacenar varios valores. Pueden ser de una dimensin o
de dimensiones mltiples. Los ndices se podran definir
como los lugares especficos que ocupan los valores dentro
de la matriz, motivo por el cual a los ndices se les llama
tambin posiciones. De aqu en adelante llamaremos a los
ndices de esta ltima forma para facilitar el
entendimiento.

Posiciones en matrices de una dimensin.


Ms arriba hemos definido a las posiciones como los
lugares especficos que ocupan los valores dentro de la
matriz. Para poder entender esto en el caso de una matriz
de una dimensin debemos imaginarnos dicha matriz
como un rectngulo dividido en varias partes.

3 Cada

parte
sera
una posicin, de las cuales la ms baja es por defecto la
posicin 0, aunque se puede configurar VBA para que la
primera posicin sea la 1.
Figura 6

Cada posicin 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.

Declaracin de matrices de una dimensin.


Suponiendo que la matriz fuera local a nivel de
procedimiento los pasos a seguir seran los siguientes:
1. En la primera lnea abrimos el procedimiento.
Sub declaracion_matrices()

2. Un ejemplo de cdigo para la segunda lnea sera


el siguiente:
Dim Mirango(0 to 4) As Integer

Dim sera la palabra reservada que declara la matriz.


Mirango sera el nombre de la matriz. El cdigo entre
parntesis 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 cdigo As Integer
estamos definiendo el tipo de dato que tienen esos
valores.
Tambin se puede expresar esta segunda lnea
expresando solamente la ltima posicin:
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 lneas damos valores a cada
posicin. Para ello se escribe en cada lnea el
nombre de la matriz seguido de apertura y cierre
de parntesis, dentro de los cuales se indica la
posicin que ocupa el valor en cuestin. Despus
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 lneas se introduce el cdigo


que determina aquello que queremos hacer con
los valores.
Msgbox Mirango(4)

5. En la ltima fila cerraramos el procedimiento


End sub

Recopilando todo el cdigo introducido tendramos


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)
End sub

Qu ocurrira si habiendo declarado en la segunda


lnea que la matriz quedar dividida en cinco posiciones (0,
1, 2, 3 y 4) aadiramos otra lnea con el cdigo siguiente?
Mirango(5) = 11

Lo que pasara es que nos dara un error de


desbordamiento. VBA nos dice que tenemos dividida la
matriz en cinco posiciones y ese valor se refiere a una
sexta posicin que no existe.
Existen programadores que prefieren que las matrices
se dividan en posiciones de forma que la primera posicin
sea la 1 en lugar de la 0. Lo que a ms de uno se le
ocurrira sera poner el cdigo 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 posicin 0. Lo


que pasa es que no se ha hecho referencia a ella en
ninguna parte del cdigo. Dicho posicin alberga un valor
de 0.
Por lo tanto, Si queremos que la posicin 0 no exista y
la primera posicin a rellenar sea la 1 deberemos escribir
el siguiente cdigo fuera de los procedimientos:
Option Base 1

Quedara entonces el cdigo siguiente:


Option Base 1
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

Posiciones en matrices de dos dimensiones.


Este tipo de matriz hay que imaginrsela como el
tpico 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 nmeros separados por una coma. El primero
representa las columnas y el segundo las filas.

La matriz tendra que ser declarada mediante la


palabra

0,0

1,0

2,0

3,0

0,1

1,1

2,1

3,1

0,2

1,2

2,2

3,2

0,3

1,3

2,3

3,3

0,4

1,4

2,4

3,4

Figura 6

reservada correcta, normalmente Dim . Despus se


pondra entre parntesis dos nmeros: el primero sera el
que representa el total de columnas y el segundo el total
de filas. Ambos nmeros estaran separados por una coma.
Para terminar de declararla escribiramos la palabra
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 adjudicaramos valores a las posiciones


de la matriz. Por ejemplo, para adjudicar un valor a la
posicin 1,2 de la figura 6 se introducira el siguiente
cdigo.
Matriz (1,2)=7

EJEMPLOS DE PROCEDIMIENTOS.
Ejemplo 1. Procedimiento sub: Suma de dos
nmeros.
Sub suma ()
Sum=4+6
MsgBox La suma es: & sum

End Sub

En la primera lnea decimos que es un procedimiento


sub y le damos un nombre descriptivo de la accin que va
a realizar, seguido de parntesis de inicio y final.
En la segunda introducimos el cdigo de la suma y los
nmeros que intervienen en ella.
En la tercera le introducimos el cdigo 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
& despus de las comillas y seguido del cdigo de la
operacin, que en este caso es sum.
El cdigo de la cuarta lnea es con el que siempre se
cierra un procedimiento sub.

Ejemplo 2. Procedimiento function.


Function Operacin (num1, num2, num3)
Operacin=(num1-num2+num3)/(num2*1000)
End Function

En la primera lnea introducimos el nombre de la


operacin y, entre parntesis, los trminos que intervienen
en ella.
En la segunda lnea ponemos el nombre de la
operacin seguido del signo =. Despus de este signo
introducimos la frmula de la funcin, expresada con los
trminos.
El cdigo de la lnea tercera lnea 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 lnea escribimos el nombre del


procedimiento, lo ms descriptivo posible de la accin que
va a realizar, y seguido de parntesis de inicio y final.
En la segunda lnea le indicamos la hoja donde se
encuentra la celda a la que vamos a aadir el valor, y
tambin hacemos alusin a la propia celda. El cdigo Value
seguido del smbolo = sirve para indicar el valor que ha de
introducir.
Con la tercera lnea cerramos el procedimiento.

Ejemplo 4. Procedimiento sub: ventana de


informacin con valor de celda.
Sub LecturaDeValor ()
Msgbox Worksheets (Hoja1).Range (A1).Value
End Sub

En la primera lnea hemos escrito el nombre del


procedimiento, lo ms descriptivo posible, abriendo y
cerrando parntesis despus.
En la segunda lnea y mediante el cdigo Msgbox
estamos diciendo que nos debe de ensear una ventana,
en la cual debe aparecer el valor del rango y la hoja que se
especifica entre parntesis.
Con la tercera lnea 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 lnea introducimos el nombre del


procedimiento, de la forma ms descriptiva posible,
seguido de apertura y cierre de parntesis.

En la segunda lnea especificamos la hoja y el rango


al que afectar la accin. Por ltimo introducimos el cdigo
de la accin a realizar, que en este caso es Clear.
En la tercera lnea cerramos el procedimiento.
Este procedimiento nos puede servir, por ejemplo, a
la hora de hacer un botn mediante el cual indiquemos a
Excel que despus 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
Worksheets("Hoja2").Range("A1").Insert
Shift:=xlDown
End Sub

En la primera lnea hemos escrito el nombre del


procedimiento, lo ms descriptivo posible, seguido de
parntesis inicial y final.
En la segunda lnea hemos introducido el cdigo que
especifica la hoja y el rango o celda a copiar. Finalmente
hemos introducido el cdigo que corresponde a la accin
copiar.
En la segunda lnea hemos introducido el cdigo que
especifica la hoja y el rango o celda donde pegar lo
copiado. El cdigo Insert ordena que lo inserte. La parte
final indica que al insertar desplace una fila ms 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 sitan 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 lnea 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 lnea hemos escrito el nombre del


procedimiento, lo ms descriptivo posible, seguido de
parntesis inicial y final.
En la segunda lnea estamos indicando que lo que
debe hacer esta macro es lanzar una ventana informativa,
mediante el cdigo Msgbox. Con el cdigo Worksheets
indicamos en que hoja est la informacin que debe
presentar la ventana. Con el cdigo Comments(1)
indicamos qu comentario es el que contiene la
informacin (como entre parntesis 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 cdigo Text le estamos diciendo
que lo que queremos que aparezca de ese comentario sea
el texto, lo que contiene el comentario.
La ltima lnea 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 cdigo 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 todava 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
End Sub

En la primera lnea escribimos el procedimiento de la


forma ms descriptiva posible, seguido de parntesis
inicial y final.
En la segunda lnea lo que venimos a decir es que si
en el rango J5 de la hoja Hoja1 no hay ningn comentario
entonces haga lo que se indica en la tercera lnea.
Lo que decimos que haga en la tercera lnea es que
en el rango J5 de la hoja Hoja1 nos agregue el comentario
que viene entre comillas.
En la cuarta lnea 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 lnea.
En la quinta lnea le decimos que nos muestre una
ventana informativa con el comentario de la celda J5 de la
hoja Hoja1.
La sexta lnea es para dar por finalizada la condicin.

La sptima lnea 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 lnea aparece el cdigo Sub que se


refiere a un procedimiento, el cual se llama borrar.
El cdigo de la segunda lnea hace referencia a una
celda G6 de la hoja activa, y a un mtodo de ese objeto,
que es aquello que queremos que haga el objeto.
En la tercera lnea hemos puesto otro objeto referente
a la seleccin seguido de uno de sus mtodos, que es
aquello que queremos que haga el objeto. Este mtodo
(Clearcontents) lo que hace es eliminar el valor de la celda,
no su formato.
Para finalizar utilizamos en la cuarta lnea el cdigo
End Sub, con el que indicamos que hemos finalizado el
procedimiento.
Pero no hace falta seleccionar primero la celda.
Podemos crear un cdigo que elimine su valor
directamente, que sera 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 cdigo Sub de la primera lnea hace referencia a un


procedimiento que hemos llamado colorear.
En la segunda lnea hemos dicho que queremos
colorear el interior de la celda G6 de un color igual a
amarillo. Ntese que hemos antepuesto al color del
nombre el cdigo vb. En este caso hay dos propiedades:
Interior y Color. Color se puede decir que es una
subpropiedad de Interior.
Con el cdigo de la tercera lnea finalizamos el
procedimiento.
En caso de saber el cdigo 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)
End Sub

Ejemplo 11. Procedimiento sub: eliminar


valor y formato de celda.
Sub BorrarFomatoValor()
Range("G6").Select
Selection.Clear
End Sub

En la primera lnea escribimos Sub para indicar que es


un procedimiento, dndole el nombre ms representativo
posible.
En la segunda lnea decimos que nos seleccione la
celda G6.
En la tercera lnea decimos que nos limpie lo
seleccionado, es decir, la celda G6. Lo que hace el mtodo
Clear es eliminar el formato y valor de la celda.
Con la cuarta lnea cerramos el procedimiento.

Este cdigo se puede mejorar, puesto que para


eliminar el formato y valor de una celda y, en general,
realizar cualquier accin, no hace falta seleccionarlo. Por
tanto el cdigo tambin podra 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
MsgBox "Su salario en pesetas es " &
salariopesetas
End Sub

La primera lnea nos dice que hemos declarado una


constante llamada equivalencia de forma pblica y, como
tal, podr ser usada por cualquier procedimiento de
cualquier mdulo. Es de tipo Double por ser un dato de tipo
decimal con tres decimales.
En la segunda lnea abrimos un procedimiento que va
a usarla (se supone que habra ms procedimientos que la
usaran).
En la tercera lnea declaramos la variable
salarioeuros, que se declarar como As Currency por ser
de tipo moneda.
En la cuarta lnea declaramos la variable
salariopesetas, que se declarar tambin como As
Currency ya que es una variable del mismo tipo que la
anterior.

Tanto la variable declarada en la tercera lnea como


en la cuarta podrn utilizarse solamente dentro de este
procedimiento, por estar declaradas dentro de l. Ambas
son necesarias para realizar la operacin de conversin.
En la quinta lnea damos un valor a salarioeuros, que
al estar formado nicamente por nmeros no va encerrado
entre parntesis. Es el salario en euros que queremos
convertir.
En la sexta lnea realizamos la operacin mediante el
uso de la constante y variables declaradas.
Con el cdigo de la sptima lnea lo que conseguimos
es que salga una ventana de informacin, la cual aparece
gracias al cdigo o palabra reservada Msgbox. Entre
comillas metemos el texto que queremos que aparezca en
la ventana de informacin. Despus concatenamos con el
smbolo & la variable salariopesetas para que al hacer
funcionar el cdigo aparezca en la ventana el texto,
seguido del valor de dicha variable. Ntese como antes de
cerrar comillas se deja un espacio en blanco para que el
valor de la variable salariopesetas no quede pegado al
ltimo carcter 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 lnea abrimos procedimiento y le damos


nombre
En segunda lnea 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 lnea 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 lnea 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 lnea cerramos el procedimiento.
Este cdigo 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
micelda.Font.Italic = True
End Sub

En la primera celda se ha abierto y dado nombre al


procedimiento.
En la segunda lnea 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 lnea mediante la palabra reservada Set
estamos diciendo a VBA que introducir el cdigo 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 llamramos por su apodo para simplificar.
Si este ejemplo no sirviera podemos decir que con el
cdigo Set estamos asignando un atajo que equivaldr al
camino que habitualmente se sigue.

En las siguientes lneas procedemos a introducir el


mismo cdigo del inicio del ejemplo pero sustituyendo el
camino a seguir para dar con la celda por su atajo o apodo.
En la ltima lnea se cierra el procedimiento.

Ejemplo 14. Procedimiento sub: Recorrer los


valores de un rango mediante una ventana de
informacin.
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

En la primera abrimos y damos nombre al


procedimiento.
En la segunda lnea 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 lnea se inicia un bucle, en el que
estamos diciendo a VBA que por cada micelda que se
encuentre en la seleccin haga algo que todava no sabe.
Pero lo que si sabe ya con esta lnea es que si una
seleccin es un rango, micelda no puede ser otra cosa que
una celda.
En la cuarta lnea le indicamos la accin 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 lnea 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 ms limpio quede el cdigo.
Mtodo 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

En este caso vemos como en las lneas 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 lnea.
Este mtodo nos puede valer para un procedimiento
con poco cdigo, no siendo recomendable cuando dicho
cdigo ha de ser extenso. La razn es que para llegar a la
propiedad que queremos cambiar en cada lnea 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.
Mtodo 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 lnea.
En la tercera lnea 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 pestaa).
Por lo tanto, en las lneas 3, 4 y 5 cambiamos las
propiedades de la celda utilizando esta abreviatura, y as el
ordenador se hace menos lo al procesar el cdigo por
haber quedado ms simplificado.
Mtodo 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 mtodo hemos utilizado adems la


instruccin With - End With, dentro de la cual introducimos
las propiedades a cambiar con el valor que deben tomar.
Es el mtodo 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

Despus de abrir el procedimiento declaramos la


variable celda como el tipo de objeto que es (un rango).
En la tercera lnea y siempre que tengamos un rango
seleccionado le decimos que por cada celda que haya en la
seleccin haga lo que se indica en la cuarta y quinta lnea.
Y lo que tiene que hacer este procedimiento es, por tanto,
lo que digan dichas lneas: que aparezca una ventana
informativa con el valor de cada celda cada vez que
pulsemos el botn Aceptar de la ventana informativa.
En la ltima lnea cerramos el procedimiento.

You might also like