Sei sulla pagina 1di 36

1

Introduccin a las macros en Microsoft Office 2010



1. Qu es una macro?

Macro es la abreviatura de macroinstruccin, que es una serie de instrucciones que se almacenan
para que se puedan ejecutar de forma secuencial mediante una sola llamada u orden de ejecucin.
Dicho de otra forma, es una instruccin compleja, formada por otras instrucciones ms sencillas. Esto
permite la automatizacin de tareas repetitivas.

Las macros suelen almacenarse en el mbito del propio programa que las utiliza y se ejecutan
pulsando una combinacin especial de teclas o un botn especialmente creado y asignado para tal
efecto.

2. Las macros en Microsoft Office

Casi todas las aplicaciones que forman el paquete Office permiten la grabacin, reproduccin y
modificacin de macros. Internamente las macros se almacenan en un lenguaje de programacin
propiedad de Microsoft llamado Visual Basic, en su versin reducida para Office: VBA (Visual Basic for
Applications, o Visual Basic para Aplicaciones).

3. Seguridad en las macros

Aunque Microsoft decide integrar VBA en Office con la intencin de hacer el da a da ms sencillo,
todo lenguaje de programacin puede utilizarse con malas intenciones, es decir: desgraciadamente
pueden elaborarse virus informticos utilizando VBA.

Por esta razn cualquier documento de Office podra contener un virus, los programas antivirus
buscan virus en su interior, y el propio paquete Microsoft Office permite configurar diferentes niveles de
seguridad para que las macros contenidas en un documento se ejecuten slo con nuestro conocimiento
y permiso.

4. Las extensiones de archivo

Un ordenador guarda la informacin en forma de archivos o ficheros (que a su vez pueden estar
dentro de una o varias carpetas).

Los archivos tienen un nombre que puede ser elegido libremente por el usuario, y que en Windows
desde hace ya muchos aos permite el uso de espacios, letras maysculas o minsculas, tildes y otros
smbolos y puede ser relativamente largo.

Lo que no tanta gente sabe es que despus de dicho nombre hay un punto seguido por un conjunto
de caracteres (habitualmente tres, aunque pueden ser ms), a lo que se denomina extensin del
archivo.

El ordenador no sabe qu tipo de informacin contiene un archivo (fotografa, msica, vdeo,
texto). Es mediante la extensin como el PC asocia cada tipo de archivo con el programa con el que fue
creado, o con el que podemos abrirlo.

Ejemplo:

Mi perro y yo en mi pueblo . jpg


Nombre de archivo Extensin

2
5. Ver las extensiones de archivo en Windows

Si cambiamos la extensin de un archivo por otra que Windows no conoce, al hacer doble click en
dicho archivo el ordenador no sabr con que programa abrirlo. Para evitar este tipo de accidentes, por
defecto Windows nos oculta las extensiones de archivo.

Sin embargo tanto por temas de seguridad como simplemente por tener un control completo del
funcionamiento de nuestro Sistema Operativo, se recomienda encarecidamente a cualquier usuario
visualizar las extensiones de archivo.

Para hacerlo debemos seguir el siguiente procedimiento desde el Explorador de Archivos de
Windows:

Windows XP:
Herramientas Opciones de carpeta
Windows Vista / 7:
Organizar Opciones de carpeta y bsqueda
















Pestaa Ver
Quitar el click de la opcin Ocultar las extensiones de archivo para tipos de archivo conocidos




3
6. Extensiones de archivo en Microsoft Office

Es importante conocer las extensiones de archivo correspondientes a cada una de las aplicaciones de
Microsoft Office:

Microsoft Office 2000, XP y 2003

Aplicacin Extensiones
Word
.doc (documento)
.dot (plantilla)
Excel
.xls (documento)
.xlt (plantilla)
.xla (complemento)
PowerPoint
.ppt (presentacin)
.pps (presentacin, autoarranque)
.pot (plantilla)
.sld (diapositiva)
Access
.mdb (base de datos) (.accdb en Office 2007/2010)
.mde (base de datos ejecutable)(.accde en Office 2007/10)

Con la publicacin de Office 2007 se modifican los formatos de archivo para ser abiertos (basados en
XML), y para distinguirlos de los antiguos formatos propietarios y binarios se les coloca una x al final
de la extensin. As que un documento elaborado con Word 2010 se guardara con la extensin .docx,
una hoja de clculo diseada con Excel 2010 se guardara como .xlsx, etc.

Tambin en la versin 2010 de Office, si insertamos macros en cualquier documento, deber ser
guardado con una m al final de la extensin, en vez de la tpica x. Por ejemplo, una hoja de clculo
de Excel 2010 que contenga macros ser guardada con la extensin .xlsm.

7. Grabar una macro en Office 2010

Es conveniente grabar una macro cuando continuamente estamos repitiendo procesos que implican
varias operaciones, y que resultan complicados o costosos.

Aunque es posible grabar macros desde casi cualquier aplicacin de Office, debemos elegir una para
hacer nuestras primeras pruebas. Bastar con abrir un archivo cualquiera de Microsoft Excel que
contenga informacin.










En la tira de opciones debemos pasar a la
pestaa Vista.

En ella encontramos en ltima posicin el botn/desplegable Macros.

Desplegndolo elegiremos Grabar macro:

Aparece ahora una ventana que en la que se nos solicita diferente informacin:

4

Nombre de la macro: En este nombre no pueden utilizarse espacios, ees, tildes, ni caracteres
extraos como %, &, / Sin embargo s que puede utilizarse la barra baja (_) para separar
diferentes palabras.

Mtodo abreviado: Combinacin de teclas que puede utilizarse para ejecutar la macro
posteriormente. Se recomienda no elegir una combinacin de tipo Ctrl + tecla, ya que el propio
Office tiene la mayora de ellas asignadas ya a alguna operacin. Es preferible elegir una
combinacin del tipo Ctrl + Mayus + tecla.

Descripcin: Aqu con total libertad podemos escribir un texto largo que describa qu hace la
macro, cuando fue grabada o cualquier tipo de informacin que ms adelante podr ser
consultada.

Cuando hacemos click sobre el botn Aceptar comienza la grabacin de la macro: el ordenador
guarda cada uno de los pasos que hagamos dentro de la aplicacin (en este caso Excel). Por ello es
necesario antes de llegar a este punto tener muy claro cada paso que vamos a dar, y no realizar
operaciones innecesarias que podran hacer que nuestra macro se ejecute de forma mucho ms lenta, o
incluso llegue a fallar. Se recomienda incluso crear un pequeo guin de los pasos antes de grabar la
macro, de forma que durante la grabacin no tengamos ninguna duda.

Una vez terminada la grabacin podemos detenerla de dos formas diferentes:



Desplegando el botn Macros y eligiendo la opcin
Detener grabacin




Ms sencillo y a mano: podemos utilizar el botn detener que aparece en la barra de estado (en
la parte inferior de la aplicacin, en este caso Excel)



Una vez grabada la macro podr ejecutarse utilizando la combinacin de teclas especificada
anteriormente.


Tambin existe la opcin de crear un botn que ejecutar
dicha macro en la barra de herramientas personalizada
(encima del men Archivo, la pestaa de color que
encontramos en la parte superior izquierda de cualquier
aplicacin de Office 2010).



5

Para ello en primer lugar pulsaremos sobre el men Archivo para luego pulsar el botn Opciones
y por ltimo situarnos en Barra de herramientas de acceso rpido.



Ahora en el desplegable de la izquierda (Comandos disponibles en) elegimos Macros.

En el desplegable de la derecha (Personalizar barra de herramientas de acceso rpido) podemos
elegir:

o Para todos los documentos (predeterminado): El botn que vamos a crear estara
disponible siempre en Excel, independientemente del documento con el que estemos
trabajando.

o Sin embargo si elegimos la otra opcin el botn slo estar disponible en el archivo en el que
estamos trabajando.

Ya slo nos quedara pulsar en el botn Modificar para elegir la imagen que se ver en el botn.




6
8. Guardar como archivo con macros

En Office 2003 un documento con o sin macros tiene la misma extensin. Por ejemplo: un
documento de Word se guardar con la extensin .doc, tanto si contiene macros como si no.

Sin embargo en Office 2010 por seguridad los documentos con macros deben guardarse con la
extensin correspondiente a la aplicacin con la que los creamos, pero aadiendo una m al final. As,
un documento de Excel que no contiene macros se guardara con la extensin .xlsx, mientras que si
contiene macros debe guardarse con la extensin .xlsm.

Por eso si guardamos el documento de Excel en el que estamos haciendo nuestras pruebas se nos
avisar de todo esto y si queremos que nuestra macro pueda ejecutarse en un futuro deberemos elegir
No en el cuadro de dilogo siguiente:



Ahora aparecer el cuadro de dilogo Guardar como, donde deberemos abrir el desplegable
Guardar como tipo en la parte inferior y elegir Libro de Excel habilitado para macros:






7
9. Seguridad de macros

Como se ha comentado anteriormente al estar basadas las macros en un lenguaje de programacin
bastante potente (VBA), podra insertarse cdigo malicioso (virus) en cualquier documento de Office.

Por esta razn, Office por defecto al abrir un documento que contenga macros las bloquea, nos avisa
de ello, y permite habilitarlas si estamos seguros de su procedencia y confiamos en ellas.

Al abrir cualquier archivo con macros nos aparecer, bajo la tira de opciones una advertencia, con un
botn Habilitar contenido a su lado. Al pulsar en l habilitamos las macros si realmente confiamos en
ellas:





Office dispone de un completo Centro de confianza donde se puede especificar como tratar
documentos con contenido potencialmente peligroso (macros, vnculos a lugares en Internet, etc.)



8
Otra forma de llegar sera a travs del men Archivo Opciones. Luego elegiramos Centro de
confianza y pulsamos en el botn Configuracin del Centro de confianza.



En el Centro de Confianza pueden configurarse muchos aspectos de la seguridad en Office (se
recomienda que investigue por su cuenta, ya que hay opciones muy interesantes y potentes). En nuestro
caso nos interesa la seguridad en las macros, por lo que pinchamos en la seccin Configuracin de
macros en la parte izquierda:



Aqu podemos especificar qu hace Office si se encuentra con un documento que contiene macros.
Por ejemplo, si estamos completamente seguros de que todos los documentos con macros que
recibimos son de confianza, y no queremos que Office nos moleste con advertencias de seguridad,
podramos elegir Habilitar todas las macros. Realmente esto no es muy recomendable, pero no deja
de ser un simple ejemplo de lo que se puede hacer desde el Centro de Confianza.



9
10. El listado de macros. El IDE de VBA

Y si queremos eliminar alguna macro ya grabada? O modificar su combinacin de teclas, o su
descripcin?



Para ello podemos acceder al listado de macros: de nuevo en
la pestaa Vista, desplegando el botn Macros, elegimos
la opcin Ver macros


Aparecer ahora una ventana en la que disponemos del listado de macros ya grabadas.

Con el desplegable Macros en podemos visualizar
slo las macros grabadas en el documento actual
(Este libro), o bien las macros que funcionaran en
cualquier documento, o pertenecientes a otros
documentos abiertos (Todos los libros abiertos).

Con el botn Eliminar borramos la macro
seleccionada en la lista.

Con el botn Opciones podemos cambiar la
combinacin de teclas o descripcin de la macro
seleccionada.

Con el botn Ejecutar" ejecutaramos la macro
seleccionada (aunque hay formas ms sencillas de
ejecutarla, con la combinacin de teclas, o si hemos
creado un botn en la barra de herramientas de acceso
rpido)

Por ltimo, si pulsamos el botn Modificar Office nos lleva al IDE de VBA. Aqu realmente podemos
ver como ha quedado grabada nuestra macro: son un montn de lneas de cdigo ahora totalmente
incomprensibles para nosotros, pero que segn avancemos en este mdulo intentaremos comprender.



Un IDE (Integrated Development Environment, o Entorno de Desarrollo Integrado) es un conjunto
de herramientas que sirven para desarrollar programas en un determinado lenguaje de programacin,
as como testearlos y depurarlos de una forma cmoda.

Para salir del IDE de VBA simplemente cerramos su ventana, ya que volveremos a la aplicacin de
Office en la que estbamos (en este caso Excel).

10
11. La pestaa Programador

Existe una pestaa/ficha en la tira de opciones que por defecto est oculta, pero nosotros vamos sin
duda a necesitarla: se trata de la pestaa Programador.

Para mostrarla debemos ir al men Archivo de la parte superior izquierda de la aplicacin (en este
caso Excel). All elegiremos Opciones Personalizar la cinta de opciones y basta con marcar la
opcin Programador de la columna derecha.





Al pulsar en Aceptar podemos comprobar como efectivamente ha aparecido una nueva pestaa
llamada Programador en la cinta de opciones, con un montn de herramientas que con seguridad a lo
largo de este mdulo nos sern de mucha utilidad:





11
Introduccin a la programacin en VBA

1. Nuestro primer programa: Hola, mundo

Es ya una tradicin que cuando alguien comienza a estudiar cualquier lenguaje de programacin el
primer programa que se elabora trata de conseguir que el ordenador nos salude, con un mensaje
parecido a hola, mundo (o hello world en ingls). Por supuesto nosotros no podemos dejar de
cumplir esta tradicin Vamos all!

1. Abrimos Excel con una hoja de clculo en blanco. Inmediatamente la guardamos como un Libro de
Excel habilitado para macros (*.xlsm) en nuestra carpeta de trabajo. Podemos llamarle por
ejemplo Aprendiendo.xlsm.

2. Pasamos a la pestaa Programador de la cinta de opciones. Si no se ve esta pestaa en el punto
11 ya hemos explicamos como mostrarla.

3. En la segunda seccin, Controles, desplegamos Insertar. Dentro de la segunda categora,
Controles ActiveX, elegimos el primero botn.


4. El puntero del ratn se convierte ahora en una cruz,
y arrastrndolo sobre nuestra hoja de clculo
podemos dibujar un rectngulo, que al soltar el
ratn se convertir en un botn.

5. Una vez dibujado el botn debemos asegurarnos de
que queda seleccionado (lo notaremos porque esta
rodeado de bolitas blancas). Si no es as debemos
asegurarnos de que el botn Modo diseo est
apretado, y entonces hacer un solo click sobre el
botn recin dibujado, para seleccionarlo.

6. Hacemos doble-click sobre el botn seleccionado. Llegaremos al IDE de Visual Basic, y nos
encontraremos entre dos lneas de cdigo ya escritas (aparecen en negrita a continuacin).
Nosotros debemos escribir simplemente una lnea, que es la que nos saludar:

Private Sub CommandButton1_Click()

MsgBox Hola, mundo

End Sub

7. Ahora cerramos el IDE de Visual Basic, con lo que volvemos a Excel. Para poder utilizar nuestro
botn hay que desactivar el Modo diseo, pulsando en el botn con este nombre, que quedar
suelto. Ahora al pulsar en nuestro flamante botn el ordenador debera ya saludarnos.



Enhorabuena! Acabas de hacer tu primer programa en VBA.

12

2. Programacin Orientada a Objetos (POO)

VBA es un lenguaje de programacin orientado a objetos (en ingls Object Oriented Programming,
OOP). Qu significa esto? Estos tipos de lenguajes hacen uso de las siguientes caractersticas:

Clases
Objetos
Propiedades
Mtodos
Eventos

Veamos que significa cada una de ellas, trabajando siempre con un ejemplo ficticio escrito en
pseudocdigo, para intentar comprender cada concepto:

Clases: Una clase es el esqueleto para definir ms adelante todos los objetos que queramos. La
clase contiene las propiedades, mtodos y eventos comunes. Despus cada objeto podr ser
personalizado aadiendo propiedades, mtodos o eventos exclusivos para l.


Clase Coche:

Propiedades:

o Marca
o Color
o Combustible

Mtodos:

o Arrancar
o Acelerar
o Frenar
o Apagar

Eventos

o SeAcabaCombustible
o SeFrenaMuyEnSeco


Objetos: Un objeto toma el esqueleto definido por una clase, y lo copia para un caso particular.
As los objetos estn basados en clases, de las que heredan las propiedades, mtodos y eventos.
Sin embargo una vez creados son completamente independientes entre s.

Declarar_objeto CocheLaura como Coche
Declarar_objeto CocheJavi como Coche

CocheLaura.Color = Rojo
CocheJavi.Color = Verde


Propiedades: Una propiedad es un atributo que define el aspecto o comportamiento de un objeto.
Las propiedades pueden modificarse o leerse. Sin embargo existen propiedades de solo lectura, que
no pueden modificarse.

En VBA accedemos a las propiedades escribiendo el nombre de un objeto, seguido de un punto (.) y
despus el nombre de la propiedad en cuestin:



13
Escribir en una propiedad: establecemos como combustible para el coche de Laura
gasolina:
CocheLaura.Combustible = gasolina

Leer una propiedad: mostramos cual es el combustible del coche de Javi:
MsgBox El combustible del coche de Javi es & CocheJavi.Combustible

Notas (VBA):

o El operador & (ampersand, o and en ingles, y) sirve para concatenar textos, es decir: para
colocar un texto despus de otro.
o Los textos o cadenas de caracteres (strings en ingles) deben encerrarse entre dobles comillas.
o La instruccin de VBA MsgBox muestra un cuadro de dialogo (ventana sencilla) que contiene
el mensaje que deseemos en su interior.
Ejemplo:
MsgBox Hola & Dani

VBA mostrara un cuadro de dialogo con el texto Hola Dani en su interior

Obsrvese que se deja un espacio tras la palabra Hola, y antes de cerrar las dobles
comillas. As la palabra siguiente, Dani, no se pega con la anterior.


Mtodos: Un mtodo es una orden que damos a un objeto. El objeto conoce dicha orden y
ejecutara las acciones correspondientes (que habrn sido programadas por nosotros)

Declarar_metodo CocheLaura.Arrancar ()

Sentarse en asiento del conductor
Ponerse el cinturn
Meter la llave
Poner punto muerto
Girar la llave hasta que el motor arranque
Quitar freno de mano

Fin_metodo

En VBA para ejecutar un mtodo se escribe el nombre del objeto, seguido de un punto (.) y despus
el nombre del mtodo:

CocheLaura.Arrancar()


Eventos: Es una accin que ocurre sobre un objeto, ante la cual sabe reaccionar, y ejecuta un
cdigo.

Desde que es creado el objeto vive tranquilamente hasta que algo que ocurre sobre el. Entonces,
si sabe como reaccionar (es decir, tiene declarado ese evento) ejecutara las acciones
correspondientes (programadas por nosotros, por supuesto).

En VBA los eventos se declaran escribiendo el nombre del objeto, seguido de un guion bajo ( _ ) y
despus el nombre del evento:

DeclararEvento CocheJavi_SeAcabaCombustible ()

Encender luz del piloto de reserva
Si no hay ni gota de combustible: parar el motor

FinEvento

14

Tanto los mtodos como los eventos pueden recibir parmetros o argumentos, que de alguna forma
modifican el comportamiento del cdigo.

En VBA los parmetros que espera recibir un mtodo o evento se especifican en su declaracin,
entre parntesis despus del nombre del mtodo/evento, si hay varios separados por comas.

DeclararEvento CocheJavi_SeFrenaMuyEnSeco (Velocidad, RuedasResbalan)

Si RuedasResbalan y Velocidad > 0: activar ABS
Si Velocidad = 0: disparar Airbag

FinEvento

Por ultimo existe un tipo especial de objetos, que son aquellos que pueden dibujarse y con los que
el usuario puede interactuar: botones, desplegables, listas es decir, los elementos que habitualmente
utilizamos en cualquier programa de Windows para explicar que queremos hacer.

Pues bien, a estos objetos especiales en VBA se les denomina controles.


3. Mejorando nuestro Hola, mundo

Apliquemos ahora todo lo aprendido en el punto anterior a nuestro pequeo y simple programa
Hola, mundo:

Con el botn Modo diseo apretado hacemos un solo click
sobre el botn que dibujamos. Quedara seleccionado, con sus
bolitas blancas alrededor.

Ahora, en la tira de opciones, junto al botn Modo diseo
encontramos otro botn Propiedades: lo pulsamos. Aparecer una
ventana que nos permite modificar las propiedades de nuestro
botn en tiempo de diseo (es decir: sin que el programa se est
ejecutando).

La primera propiedad es la ms importante: se trata de Name
o el nombre del botn. Es muy importante establecer un buen
nombre para cada objeto que dibujemos o declaremos, ya que mas
tarde al escribir cdigo tendremos que referirnos siempre a este
nombre.

Si nos olvidamos de cambiar el nombre y lo hacemos mas
tarde, cuando ya hay mucho cdigo escrito, puede ser una autentica
locura arreglar el estropicio.

Por eso vamos a cambiar ahora el nombre del botn, al que
llamaremos cmdSaludar.

Para los nombres de variables, objetos, procedimientos, etc. en VBA hay que tener en cuenta ciertas
restricciones:

Prohibidos los espacios. No se admite discusin sobre esto. Si en un nombre hay mas de una palabra
podemos separarlas con la barra baja ( _ ) o bien utilizando maysculas y minsculas. Por ejemplo:
PrimerApellido o segundo_apellido.


15
No utilizar ees, tildes, o caracteres extraos. Las ees y tildes, aunque en un PC con Windows en
castellano pueden funcionar, en un PC con Windows en otro idioma podran dar muchos problemas.
Los caracteres extraos muchos de ellos sencillamente estn prohibidos, como: * / % ( ) [ ] + - ,
; : & Asi que para no andar con dudas de cuales pueden utilizarse y cuales no pues no
utilizamos ninguno y listo!

La notacin hungara

Por qu hemos puesto las letras cmd antes del nombre del botn (Saludar)?

Si a un control le llamamos simplemente Saludar al verlo dentro de nuestro cdigo no sabramos
que tipo de control es: si es un botn, una lista desplegable, una ventana...

La notacin hngara utiliza prefijos predefinidos antes del nombre de los objetos, controles o
variables, de forma que con un solo vistazo sabemos de qu tipo es cada objeto, control o variable en
nuestro cdigo.

En este modulo utilizaremos la notacin hngara solamente para los controles, y estos son los
prefijos ms habituales:

Prefijo Control
frm Formulario
lbl Label
txt TextBox
fr Frame
cmd CommandButton
opt OptionButton
chk CheckBox
img Imagen (mapa de bits)

Si ahora, despus de cambiar el nombre de nuestro botn a cmdSaludar, le hacemos doble-click
llegaremos al IDE de VBA, y qu ha pasado? Vamos a comentarlo entre nosotros, con el profesor y
buscar alguna solucin entre todos a este problema.

As que ya sabis: a partir de ahora

MUY IMPORTANTE !!

Al terminar de dibujar un control, la primera operacin debe ser siempre cambiarle el nombre
(propiedad Name). Y a partir de entonces no debe volver a cambiarse este nombre.

Vamos a cambiar algunas propiedades ms para mejorar el aspecto de nuestro botn:

Caption: Es el texto que aparece dentro del botn, que ahora es un triste CommandButton1.
Pongamos algo ms descriptivo de lo que el botn hace, como por ejemplo Saldame. En esta
propiedad puede escribirse texto con total libertad, utilizando espacios, tildes, ees, y cualquier
carcter que necesitemos.

Font: En esta propiedad, pulsando el botn [] podemos elegir el tipo de letra, tamao para el
texto que aparece dentro del botn.

ForeColor: Es el color de frente (foreground en ingls). En este caso es el color para el texto que
aparece dentro del botn.


16
BackColor: Es el color de fondo (background en ingls). Es el color del botn.

Ahora nuestro botn es mucho ms elegante, verdad? Bien, pues las propiedades que hemos
aprendido en este apartado (Name, Caption, Font, ForeColor y BackColor) son comunes a muchos de los
controles que utilizaremos durante este modulo, con lo que podremos personalizarlos y darles el
aspecto que mas nos guste.



4. Duplicar controles

Si ahora queremos crear otro botn parecido al que ya tenemos deberamos repetir todo el
proceso que hemos visto en el apartado anterior, y sin duda es un proceso bastante largo y tedioso

Menos mal que podemos copiar y pegar un control que ya tenemos dibujado, de la siguiente
forma:

Seleccionamos el botn cmdSaludar con un solo click (el botn Modo diseo debe estar
apretado). Una vez veamos las bolitas blancas alrededor copiamos el control al portapapeles,
pulsando el botn derecho del ratn y eligiendo la opcin Copiar del men contextual, o bien
pulsando la combinacin de teclas Ctrl + C (mucho ms fcil y rpido).

Des-seleccionamos el botn, pinchando en cualquier celda de nuestra hoja de calculo. Entonces
pulsamos el botn derecho del ratn y elegimos la opcin Pegar del men contextual, o bien
utilizamos la combinacin de teclas Ctrl + V (mucho ms fcil y rpido).

Ahora en el la copia del botn no podemos olvidarnos de cambiar su nombre (Name). Le
pondremos cmdRecoger. Tambin cambiamos su Caption, escribiremos Recoger.

Vamos a copiar ahora de nuevo el botn que acabamos de crear, cmdRecoger, pero esta vez lo
haremos de una forma algo diferente, para que elijis la que ms os guste u os parezca ms cmoda:

Seleccionamos el botn cmdRecoger con un solo click (el botn Modo diseo debe estar
apretado). Una vez veamos las bolitas blancas alrededor comenzamos a moverlo a otro lugar,
arrastrndolo.

Antes de soltar el botn izquierdo del raton pulsamos la tecla Ctrl, veremos que al lado del puntero
del raton aparece un smbolo [+]. Si ahora soltamos el botn izquierdo del ratn (sin soltar la tecla
Ctrl) et voila! Ya hemos duplicado nuestro botn Ahora ya puedes soltar la tecla Ctrl, no vaya a
ser que cojas agujetas ;)

No olvidemos cambiar el nombre (Name) del nuevo botn, le pondremos cmdSumar1. Tambien
cambiamos su Caption, escribiendo simplemente el smbolo +.

Ahora haz por tu cuenta una copia de este ultimo botn, ponle el nombre (Name) cmdRestar1 y
como Caption el smbolo -.

Por ultimo en una celda que quede entre los botones cmdSumar1 y cmdRestar1 escribe un
numero de prueba, por ejemplo 4. Luego aplica el formato que te apetezca a dicha celda para
que quede bonita.



17
Nuestro interfaz debera haber quedado parecida a la de la siguiente figura:



5. Las variables

Como ya te imaginaras VBA no solo es capaz de trabajar con datos fijos, como nuestro saludo
Hola, mundo. En la mayora de los programas serios trabajaremos con datos que irn cambiando a
medida que trabajemos con ellos a estos datos se les denomina variables, precisamente porque en
cualquier momento pueden cambiar si as lo deseamos.

Debes imaginar una variable como una caja con un nombre, dentro de la cual podemos guardar la
informacin que nos interese. La informacin se guarda con una asignacin, de la siguiente forma:

NombreVariable = Valor a guardar

Vamos a probar esto programando el botn cmdRecoger. Con el Modo diseo activado, haz
doble-click sobre l, con lo que llegamos al IDE de VBA, y aparecemos ya dentro del evento click del
botn, con lo que vamos a programar que ocurre al pulsar el botn. Solo debes escribir dos lneas de
cdigo:

Private Sub cmdRecoger_Click()

Numero = 8 + 2

MsgBox El nmero es: & Numero

End Sub

La primera lnea es una asignacin, mediante la cual guardamos un 8 en la variable con nombre
Numero. Es muy importante que comprendas que el ordenador interpreta las asignaciones
leyendo de derecha a izquierda: evala la expresin a la derecha del igual (8 + 2), y el resultado
que obtiene (10) lo almacena en la variable a la izquierda del igual (Numero).

En la segunda lnea utilizamos la instruccin MsgBox de VBA para visualizar un mensaje dentro de un
cuadro de dialogo, como ya hicimos en el Hola, mundo. La diferencia es que ahora parte de ese
mensaje es un texto fijo, que escribimos entre dobles comillas: El numero es: . Pero luego
concatenamos (utilizando &) la variable, que va sin dobles comillas, ya que NO es un texto fijo.

Podemos ya salir del IDE de VBA, desactivar el Modo diseo y probar el botn, que debera
mostrar un cuadro de dialogo como este:





18
6. La importancia de declarar las variables

Podramos decir que en nuestro programa estamos declarando implcitamente la variable
Numero. Qu significa esto? La variable Numero no exista, el ordenador la crea cuando le pedimos
que guarde 8 + 2 en su interior.

Este tipo de declaracin es muy cmoda, pero puede traernos serios problemas y dolores de
cabeza. Vamos a hacer una prueba que os dejara claro de que hablamos:

Con el Modo diseo activado, hagamos doble-click sobre el botn cmdRecoger, con lo que
llegamos al IDE de VBA, y modificamos el cdigo:

Cambiamos: MsgBox El nmero es: & Numero
Por: MsgBox El nmero es: & Numer

(Hemos borrado la o de Numero)

Salgamos del IDE de VBA, desactivemos el Modo diseo y probemos el botn cmdRecoger. Qu
pasa? En el cuadro de dialogo vemos El numero es y nada mas!

Por qu? En la variable Numero efectivamente hay almacenado un 10, pero nuestro MsgBox
por accidente intenta visualizar una variable que realmente no existe: Numer. Lo preocupante es
que VBA no ha dado ningn error, simplemente intenta visualizar la variable Numer y como no
existe pues no muestra nada. Esto en un programa mas serio o complejo podra darnos muchos
dolores de cabeza, hasta que averigemos que nos hemos olvidado de la o de marras :P

Activemos de nuevo el Modo diseo y hagamos doble-click sobre el botn cmdRecoger, llegando
de nuevo al cdigo. Ahora hay que colocarse en la primera lnea, arriba del todo, y escribir lo siguiente:

Option Explicit

Salgamos del IDE, desactivemos el Modo Diseo y volvamos a probar el botn. Qu ocurre ahora?




Esta vez VBA nos da un error de compilacin: no se ha definido la
variable. Adems nos marca la lnea de cdigo en la que intentamos
almacenar 8 + 2 en Numero.







Al pulsar el botn Aceptar de la ventana de error VBA nos
resalta la lnea donde hemos tenido un problema, y el programa
queda pausado. Para poder hacer cualquier modificacin en el
programa en primer lugar debemos detenerlo del todo. Y eso lo
hacemos pulsando el botn de stop en la barra de herramientas
superior.



19
Al aadir la lnea Option Explicit (siempre al comienzo de nuestro programa) VBA nos exige que
declaremos una variable antes de utilizarla, con el objetivo de detectar y corregir fcilmente posibles
errores posteriores de tecleado.

Muy bien, pero cmo se declara una variable?

Option Explicit

Private Sub cmdRecoger_Click()

Dim Numero As Single

Numero = 8 + 2

MsgBox El nmero es: & Numero

End Sub

Ahora volvemos a probar nuestro programa. Qu ocurre? El error que nos da VBA es el mismo de
antes? Cmo podemos arreglarlo? Entendis ahora por qu y cmo nos ayuda exigir la declaracin de
variables con Option Explicit? Comentad todo esto entre vosotros y con el profesor.

No os preocupis si ahora mismo no entendis del todo la lnea que hemos aadido, la explicaremos
con detalle en un apartado posterior.

En resumen:

MUY IMPORTANTE !!

Asegurarse siempre de que en la primera lnea de nuestros programas esta la instruccin Option
Explicit

Como es posible que en algn momento se nos pueda olvidar esto, podemos configurar el IDE de
VBA para que automticamente se aada esta lnea al principio de todos los programas que hagamos a
partir de hoy (este cambio no se aplica a los programas anteriores, ojo !!)

En el IDE de VBA vamos al men Herramientas y luego a Opciones. En la pestaa Editor
debemos marcar la opcin Requerir declaracin de variables:





20
7. Declarar variables: Dim As. Tipos de datos

En el apartado anterior hemos visto como es completamente recomendable que VBA nos exija
declarar una variable antes de utilizarla (para ello utilizbamos Option Explicit al principio de nuestro
programa.

Declarar una variable es cmo crear una caja en la que despus guardaremos cierta informacin.
Y bien y cmo declaramos una variable en VBA? Pues con la sentencia Dim As, que se utiliza de la
siguiente forma:

Dim NombreVariable As TipoDatos

Como veis al declarar una variable hay que especificar qu tipo de datos vamos a guardar en su
interior. Y qu tipos de datos existen en VBA?

Boolean: Una variable de este tipo slo puede tomar dos valores: true (verdadero) o false (falso)
String: Cadena de caracteres o texto

Nmero:

o Enteros: Son los nmeros que no admiten parte decimal. Tenemos los siguientes tipos:

Byte: Para almacenar un nmero desde 0 hasta 255
Integer: Para almacenar un nmero desde -32.768 hasta 32.767
Long: Para almacenar un nmero desde -2.147.483.648 hasta 2.147.483.647

o Reales: Son los nmeros que pueden tener parte decimal. Tenemos los siguientes tipos:

Single: Nmero con coma flotante, desde -3,402823 . 10
38
hasta -1,401298 . 10
-45
para
valores negativos y desde 1,401298 . 10
-45
a 3,402823 . 10
38
para valores positivos.

Double: Nmero con coma flotante, desde -1,79769313486231 . 10
308
hasta
-4,94065645841247 . 10
-324
para valores negativos y desde 4,94065645841247 . 10
-324
hasta
1,79769313486232 . 10
308
para valores positivos.

Currency: Nmero con coma fija, utilizado para clculos con valores monetarios. Permite
almacenar un nmero desde -922.337.203.685.477,5808 hasta 922.337.203.685.477,5807

Date: Sirve para almacenar fechas y/o horas.

8. El alcance de las variables

Bien, nuestro botn cmdRecoger ya es capaz de guardar en la variable Numero el valor 10 y
mostrarlo en pantalla mediante un MsgBox.

Vamos a intentar que nuestro botn cmdSumar1 muestre en pantalla, tambin mediante un
MsgBox, la misma variable, Numero. Para conseguirlo hacemos doble-click (con el Modo diseo
activado) sobre el botn cmdSumar1, y escribimos el siguiente cdigo

Private Sub cmdSumar1_Click()

MsgBox Numero

End Sub


21
Para probar nuestro programa en primer lugar desactivamos el Modo Diseo. Ahora pulsamos el
botn Recoger y por supuesto, se nos muestra el contenido de la variable Numero, es decir: 10. Si
ahora pulsamos el botn cmdSumar1 qu pasa?

La variable Numero la estamos declarando (con la sentencia Dim As) dentro del cdigo del
botn cmdRecoger. Lo que ocurre es que esta variable slo existe dentro de este botn, cuando el
botn cmdSumar1 intenta acceder a ella ya no existe.

MUY IMPORTANTE !!
Cuando declaramos una variable dentro de un Sub o Function dicha variable slo existe y puede
utilizarse dentro de ese Sub o Function. Se dice que la variable tiene un mbito local.

Y cmo conseguir que los otros botones (cmdSumar1 y cmdRestar1) vean la variable
Numero? Sencillo: declarndola al comienzo de nuestro programa, fuera de todos los Subs.

Para conseguirlo movemos el cdigo Dim Numero As Single desde el Private Sub
cmdRecoger_Click() hasta el comienzo de nuestro programa, justo despus de Option Explicit

Probemos otra vez el programa, haciendo click primero en el botn cmdRecoger (nos mostrar
10), y ahora haciendo click en el botn cmdSumar1, que tambin debera mostrarnos 10.

MUY IMPORTANTE !!
Si queremos que acceder a una variable desde cualquier parte de nuestro programa, debemos
declararla fuera de cualquier Sub o Function (normalmente lo haremos al principio del programa).
Entonces se dice que esa variable tiene un mbito global.

9. Incrementar una variable

Queremos que al hacer click sobre el botn cmdSumar1 la variable Numero suba una unidad,
pasando de ser 10 a ser 11. Cmo podemos conseguirlo? Aadiendo la siguiente lnea de cdigo al
botn cmdSumar1:

Private Sub cmdSuma1_Click()

Numero = Numero + 1
MsgBox Numero

End Sub

Recordad que para probar el programa primero hay que hacer click sobre el botn cmdRecoger, y
despus ya podis hacer click todas las veces que queris sobre el botn cmdSumar1, el nmero que
nos muestra el ordenador debe ir subiendo.

La lnea de cdigo Numero = Numero + 1 matemticamente podra parecernos una estupidez,
puesto que si intentamos resolver la ecuacin tendramos 0 = 1, una locura. Pero hay que tener en
cuenta que no se trata de una ecuacin, sino de una instruccin de asignacin, en la que el ordenador
lee de derecha a izquierda, con lo que est haciendo lo siguiente:

Cojo el valor actual de la variable Numero (10)
Le sumo 1. Me da 11.
Lo que me da lo guardo en Numero, con lo que machaco el valor antiguo (10), y meto el nuevo
(11).

Ahora podramos programar el botn cmdRestar1, que es muy parecido a este, slo que en vez de
sumar 1, resta 1. Intentad hacerlo


22
10. Leer y escribir informacin de celdas en la hoja de clculo

No est nada mal nuestro primer programita pero estara mejor si en vez de empezar siempre en
10 fuese capaz de leer cualquier nmero que escribamos en una celda de nuestra hoja de clculo
Concretamente, haremos nuestras pruebas leyendo el valor escrito en la celda D6.

En el cdigo correspondiente al botn cmdRecoger eliminamos la lnea Numero = 8 + 2 y
escribimos lo siguiente:

Private Sub cmdRecoge_Click()

Numero = Range("D6").Value

MsgBox "El numero es " & Numero

End Sub

Para probar el programa escribimos un nmero (el que nos apetezca) en la celda D6 y despus
pulsamos el botn cmdRecoger. El programa debera mostrarnos el nmero que hemos escrito en D6.

Range es un objeto de Excel que representa a un rango de celdas, el escrito entre parntesis, por
ejemplo: Range(A4:C6)
Value es una propiedad del objeto Range, que representa el valor escrito en el interior de una celda.

Muy bien, ya sabemos como leer el valor de una celda. Pero cmo podemos escribir en una
celda? Vamos a intentarlo con el botn cmdSumar1, hay que borrar la lnea MsgBox Numero y
sustituirla por la siguiente:

Private Sub cmdSumar1_Click()

Numero = Numero + 1

Range("D6").Value = Numero

End Sub

De nuevo nos encontramos con una instruccin de asignacin, que VBA interpreta de derecha a
izquierda: el ordenador coge el valor guardado en la variable Numero y lo guarda en la celda D6,
machacando lo que hubiese anteriormente en esta celda.

Despus de probar que este cambio funciona como debiera programad vosotros el botn
cmdRestar1, para que haga lo mismo.

11. Otras propiedades del objeto Range

Vamos a inaugurar una nueva celda para hacer ms pruebas, va a ser la celda B8. En ella
escribimos el texto que deseemos, por ejemplo Texto de prueba, y le damos un aspecto inicial,
cambiando la fuente, tamao de letra, color de letra y fondo a lo que os apetezca.



23
Ahora queremos que el botn cmdRecoger aplique a esta celda como tamao de letra el nmero
que haya escrito en la celda D6. Para ello, en el cdigo del botn cmdRecoger vamos a eliminar el
MsgBox (que era un mensaje de prueba, y ya no es necesario), y aadir una lnea de cdigo nueva:

Private Sub cmdRecoge_Click()

Numero = Range("D6").Value

MsgBox "El numero es " & Numero

Range("B8").Font.Size = Numero

End Sub

Probemos el programa escribiendo un nmero (por ejemplo: 28) en la celda B8, y pulsando despus
el botn cmdRecoger. El texto de prueba debera inmediatamente tomar el tamao escrito (28
puntos, en nuestro ejemplo)

En Excel el objeto Range tiene una propiedad llamada Font que establece el aspecto de la letra:
fuente, tamao, cursiva, negrita, subrayado, etc. Concretamente nosotros cambiamos el tamao de la
letra utilizando la propiedad Size.

Ahora vamos a copiar la lnea de cdigo Range("B8").Font.Size = Numero a los botones
cmdSumar1 y cmdRestar1, justo al final del cdigo, antes de End Sub. De esta forma al pulsar los
botones cmdSumar1 y cmdRestar1 el tamao de nuestro Texto de prueba ir
creciendo/disminuyendo en pasos de 1 punto.

Reto

Nuestro pequeo programa presenta un par de problemas, que quizs an no hemos detectado:

Escribid en la celda D6 el nmero 0. Pulsad el botn cmdRecoger. Qu ocurre?
Lo mismo pasara si dejamos la celda D6 vaca, o escribimos algo que no es un nmero, por ejemplo
perrito.

Este problema se puede arreglar de forma sencilla, sin utilizar programacin. Este es vuestro reto
de hoy

Pista: Buscad en la pestaa Datos de la tira de opciones



24
12. Tomando decisiones: If

Ahora debemos prepararnos para hacer un nuevo ejercicio, para ello hay que preparar la siguiente
estructura en la hoja de clculo:



El nuevo botn se llamar cmdComparar, y al pulsarlo queremos:

Guardar el valor escrito en la celda C10 en una variable local llamada A
Guardar el valor escrito en la celda C11 en una variable local llamada B
Mostrar mediante un MsgBox el valor de las variables A y B

Ya tenis los suficientes conocimientos para hacer frente a este problema, as que adelante!

Hasta este momento el ordenador interpreta y ejecuta nuestro cdigo de forma continua,
leyndolo lnea a lnea, y de arriba abajo. Pero en cualquier programa serio llega un momento en
que un fragmento de cdigo hay que ejecutarlo condicionalmente, es decir: slo si se cumple cierto
criterio o condicin. Es entonces cuando necesitamos la estructura If Then:





If Pregunta Then
Cdigo S
Else
Cdigo No
End If


Lo que hacemos es hacerle una pregunta al ordenador, a la que puede responder con un S
(verdadero, true) o con un No (falso, false). Dependiendo de la respuesta ejecutaremos un cdigo
diferente. El camino del No es opcional, es decir: puede omitirse el Else si no hay nada especial que
hacer cuando nos responden No.

OPCIONAL
OPCIONAL

25
Lo ms complicado de esta estructura es la pregunta (criterio o condicin). En ella se suelen utilizar
operadores de comparacin, los ms comunes son:


Descripcin Operador Ejemplo
Igual que
=
Si el usuario es de Vitoria
If Ciudad = Vitoria Then
Diferente de
<>
Si el cliente no paga con tarjeta
If FormaPago <> Tarjeta Then
Mayor que
Mayor o igual que
>
>=
Si el usuario es mayor de edad
If EdadUsuario >= 18 Then
Menor que
Menor o igual que
<
<=
Si el alumno ha suspendido
If Nota < 5 Then


Vamos a aplicar esto en nuestro ejercicio: al pulsar el botn cmdComparar el ordenador debe
decirnos si los nmeros A y B son iguales o diferentes.



13. Ms de dos caminos: ElseIf o Select Case


Hemos visto cmo la estructura IfThenElseEnd If es til cuando tenemos dos caminos
posibles, pero qu ocurre si hay ms de dos? En este caso podemos completar el ya explicado If con
ElseIf, de esta forma:




If Pregunta1 Then
Cdigo S 1
ElseIf Pregunta2 Then
Cdigo S 2
ms preguntas
Else
Cdigo No
End If






OPCIONAL

26
Existe otra solucin equivalente, utilizando la estructura SelectCase, de la siguiente forma:


Select Case Evaluar

Case Expresin_Camino_1

Cdigo camino 1

Case Expresin_Camino_2

Cdigo camino 2

(ms caminos)

Case Else

Cdigo si no entramos en ninguno de los caminos anteriores

End Select


En este caso los comparadores que definen cada camino son un poco diferentes a los del If:


Descripcin Operador Ejemplo
Igual a
Valor(es) fijo(s)
(si son varios separados por
comas)
Si el usuario es de Vitoria, o de Bilbao, o de
Pamplona
Case Vitoria, Bilbao, Pamplona
Est entre X e Y
X To Y
Si la edad est entre 18 y 25 aos
Case 18 To 25
Mayor (o igual) que
Menor (o igual) que
Is expresin
Si el sueldo es mayor que 600
Case Is > 600



Vamos a aplicar lo aprendido en nuestro ejercicio prctico: ahora el botn cmdComparar debe
darnos diferentes mensajes, dependiendo de:

Si el nmero A es mayor que el B
Si el nmero A es menor que el B
Si ambos nmeros son iguales

Una vez funcione esto, crearemos un nuevo botn cmdCompararCase que har el mismo trabajo,
pero utilizando la estructura SelectCase


14. Varias condiciones: AND y OR


Hay ocasiones en que las preguntas de un If son ms complicadas que las que hemos visto hasta
ahora, estn formadas de varias condiciones que podemos unir con dos palabras clave:

AND (Y): Para que el ordenador responda S (verdadero, true) deben cumplirse todas las
condiciones.

OR (O): Para que el ordenador responda S (verdadero, true) basta con que se cumpla slo una de
las condiciones.

27
Vamos a preparar un nuevo ejercicio para practicar esto, debemos crear la siguiente estructura en
nuestra hoja de clculo:





Ejercicio 1
Slo vamos a hacer descuento a los clientes mayores de edad que vivan en Bilbo. Al pulsar el
nuevo botn cmdDescuento debe aparecer un MsgBox que nos diga si hay descuento o no.


Ejercicio 2
Al pulsar el botn cmdEuskadi si la ciudad es Gasteiz, Bilbo, Donosti o Irua debe
aparecernos un MsgBox que nos diga que somos euskaldunes. Si no somos de ninguna de esas ciudades
aparecera un MsgBox diferente que nos diga que no somos euskaldunes.

Reto
Ahora mismo nuestro usuario puede escribir libremente su ciudad en la celda C14, lo que podra
llevarnos a confusiones: habr gente que ponga Vitoria, otros Gasteiz, o alguien puede
equivocarse y escribir por ejemplo Gazteiz. Esto hara que nuestro pequeo programa no funcione
bien si el usuario no escribe exactamente Gasteiz.

Podemos crear en la celda C14 un desplegable de forma que el usuario elija una de las ciudades
con su ratn, y as no tenga que teclearla, evitando posibles errores como los descritos anteriormente.

Crear un desplegable que contenga las siguientes ciudades: Gasteiz, Bilbo, Donosti, Irua,
Madrid y Barcelona. Evitar que se escriba cualquier ciudad que no est en este desplegable.

Pista: No hace falta programar. Buscar en la pestaa Datos de la tira de opciones de Excel.



28
15. Repitiendo: ForNext

En muchas ocasiones es necesario repetir un trozo de cdigo muchas veces, adems de llevar de
alguna forma la cuenta de cuantas veces hemos repetido ya. Para ello en VBA existe la estructura
ForNext.


For Contador = Inicio To Fin Step Paso

Cdigo a repetir

Next Contador
























Para poner en prctica esto vamos a preparar un nuevo ejercicio, creando la siguiente estructura en
nuestra hoja de clculo:






Al pulsar el botn cmdRepetir el ordenador primero leer Inicio, Fin y
Paso (celdas C18, C19 y C20) y mostrar estos datos en un MsgBox



Contador = Inicio
Contador
ha superado
ya Fin?
Incrementar
Contador con Paso
S
NO
El programa contina
Cdigo a repetir

29
Una vez hemos comprobado que esto funciona, el ordenador debe ahora contar desde Inicio hasta
Fin, dando saltos de magnitud Paso. Cada cuenta que haga la debe mostrar en un MsgBox. En el
ejemplo de esta pgina aparecera algo as:






Reto
Es un poco incmodo que en cada nmero de la cuenta tengamos que hacer click en el botn
Aceptar del MsgBox.

En vez de utilizar un MsgBox para mostrar cada nmero de la cuenta vamos a intentar que los
nmeros aparezcan de forma consecutiva en una celda, por ejemplo en C22, de esta forma:



Podramos con nuestro programa hacer una cuenta atrs? Cmo?



30
16. Repetimos, pero no sabemos cuntas veces: Do WhileLoop


En ocasiones es necesario repetir un trozo de cdigo, pero no sabemos exactamente cuantas veces
ser necesario repetirlo, lo hacemos mientras (while en ingls) se cumpla una condicin.











Do While Condicin

Cdigo a repetir

Loop










En este caso hay que tener mucho cuidado para no entrar en un bucle infinito, en el que la condicin
nunca deja de cumplirse y por tanto el ordenador se quedar repitiendo el cdigo de forma infinita. En
realidad lo que ocurre es que el programa se cuelga (en este caso Excel), con lo que deberamos
cerrarlo con el administrador de tareas (pulsando Ctrl+Alt+Supr y finalizando Excel), con lo que
perderamos todos aquellos cambios que no hayan sido guardando.

Por ello a partir de este momento tendremos mucho cuidado y guardaremos siempre la hoja de
clculo en la que realizamos nuestros ejercicios antes de probar el programa. De esta forma si
entramos en un bucle infinito, Excel se cuelga y debemos cerrarlo, no perderemos nuestro trabajo.

Dentro del cdigo a repetir debe existir algo que consiga que en un momento determinado la
condicin deje de cumplirse, para que as el ordenador salga del bucle.

Para poner en prctica estos conceptos vamos a crear un nuevo botn, al que llamaremos
cmdAdivina, en nuestra hoja de clculo:




Se cumple
la
condicin?
NO
S
El programa contina
Cdigo a repetir

31
Al pulsar este botn comenzaremos un sencillo juego, en el que el ordenador piensa un color
(pondremos como ejemplo el ROJO), y el usuario debe intentar adivinarlo. Escribamos, para el botn
cmdAdivina, el cdigo siguiente:

Private Sub cmdAdivina_Click()

Dim ColorSecreto As String
Dim ColorApuesta As String

ColorSecreto = "ROJO"
ColorApuesta = ""

Do While ColorApuesta <> ColorSecreto

ColorApuesta = InputBox ("Estoy pensando en un color. Cul crees que es?")

Loop

End Sub

A continuacin explicamos el objetivo y funcionamiento de este cdigo:

Declaramos e inicializamos dos variables:

o ColorSecreto contendr el color pensado por el ordenador, como ejemplo ROJO.
o ColorApuesta contendr el color por el que apuesta nuestro jugador. Inicialmente, como an
no hemos comenzado el juego, contiene nada (cadena vaca, ).

En el interior del bucle Do While utilizamos un InputBox, que es una sencilla ventana en la que se
hace una pregunta al usuario y ste puede responder utilizando su teclado. El color que teclee ser
guardado en ColorApuesta.

En cada repeticin del bucle Do While la variable ColorApuesta cambia, puesto que el usuario va
escribiendo diferentes colores. Seguimos preguntando colores al usuario mientras (while) el color
que ha escrito (ColorApuesta) sea diferente al color pensado por el ordenador
(ColorSecreto).

Si probamos el programa veremos como el ordenador nos va preguntando colores, y sigue
preguntando hasta que adivinamos, escribiendo ROJO. Si conseguimos adivinar el color pensado
el juego termina silenciosamente.

Este sencillo programa podramos mejorarlo en muchos aspectos, y todas las mejoras que ahora
vamos a proponerte servirn para repasar conceptos ya explicados y para que vayas cogiendo confianza
y educando tu mente de programador:

Si escribimos rojo (ojo, en minsculas!) qu ocurre? cmo podemos arreglarlo?

Ahora la nica forma de terminar el juego es ganando. Podramos terminar el juego porqu nos
hemos aburrido y no queremos seguir jugando. Para ello pulsaremos el botn Cancelar cuando
el ordenador nos pregunta un nuevo color (o bien pulsaremos Aceptar sin escribir ningn color).

Al terminar el juego estara muy bien que si hemos ganado nos diesen la enhorabuena, o si lo
hemos dejado por aburrimiento nos llamasen cobardes (o algo parecido). Por supuesto, para
dar estos mensajes utilizaremos el ya archi-conocido MsgBox

Ahora vamos a intentar llevar la cuenta del nmero de intentos que utiliza cada jugador para
adivinar el color, en la celda C24.


32
Vamos ahora a almacenar el record del da en la celda C25, es decir: el menor nmero de intentos
utilizados para adivinar el color.

Podramos adems del record almacenar el nombre del jugador, en la misma celda C25? (Habr
que preguntarle su nombre a nuestro jugador, por supuesto)


17. Las matrices (o arrays)

Hasta ahora hemos trabajado con variables, en las que podemos almacenar cualquier valor, aunque
cuando guardamos algo machacamos lo que poda existir anteriormente. Bien no es posible
guardar un conjunto de valores dentro de una variable? Por supuesto! Para eso existen las matrices (o
arrays en ingls).

Una matriz o array es una variable en la que podemos almacenar un conjunto de valores ordenados.
Cada valor es un elemento de la matriz, y va identificado por un ndice numrico, que expresa la
posicin que ocupa dentro del listado de valores.

Para entenderlo mejor podemos imaginarnos una matriz como un armario con muchos cajones, en
los que podemos guardar lo que deseemos. En cada cajn colocamos una etiqueta con un nmero, que
sera el ndice, y nos ayudara a localizar un cajn en concreto.


















Muy bien, pero cmo se declara una matriz en VBA? y cmo se escribe en cada uno de los
cajones, o como se recupera lo que hay dentro de cada cajn?

Declarar una matriz
Dim NombreMatriz (PrimerCajon To UltimoCajon) As TipoDatos

Por ejemplo:

Dim Semana (1 To 7) As String

Guardar informacin en una matriz
NombreMatriz(NumeroCajon) = InformacionAGuardar

Por Ejemplo:

Semana(1) = Lunes
Semana(7) = Domingo

ndice Contenido
1 Lunes
2 Martes
3 Mircoles
4 Jueves
5 Viernes
6 Sbado
7 Domingo

33
Recuperar informacin de una matriz
NombreMatriz(NumeroCajon)

NOTA: por supuesto habr que hacer algo con esta informacin

Por ejemplo:

MsgBox El tercer da de la semana es el & Semana(3)


Pongamos ahora todo esto en prctica, para ello preparemos la siguiente estructura en nuestra hoja
de clculo:




Ejercicio 1
Si escribimos por ejemplo 3 en la celda C27 y pulsamos el botn Traducir da (cmdSemana)
debera aparecer la palabra Mircoles en la celda C28.

Ejercicio 2
Queremos que en la celda C29 aparezca el mismo da de la semana, pero en Euskera. Os ayudamos,
por si tenis oxidado el euskera:















Castellano Euskera
Lunes Astelehena
Martes Asteartea
Mircoles Asteazkena
Jueves Osteguna
Viernes Ostirala
Sbado Larunbata
Domingo Igandea

34
18. Movindonos por la hoja de clculo (mtodo Offset, objeto Range)

Ya hemos conocido durante los ejercicios anteriores uno de los objetos ms importantes del DOM
(Document Object Model, Modelo de Objetos del Documento) de Excel: el objeto Range, que
representa un rango de celdas.

Hasta ahora hemos utilizado muchsimas veces su propiedad Value, con la que podemos leer/escribir
en el interior de una celda. Tambin en algn momento hemos utilizado su propiedad Font, con sus sub-
propiedades Size y Color, que nos permiten modificar el tamao de la letra, o su color.

Pues bien, ahora vamos a conocer el mtodo Offset, que permite desplazar un rango para que ocupe
una posicin diferente a la inicial.




As, el mtodo Offset se utilizara de la siguiente forma:

Set NuevoRango = RangoOriginal.Offset (DesplazamientoVertical, DesplazamientoHorizontal)

Ejemplo (ver figura):

Dim Original As Range
Dim Nuevo As Range

Set Original = Range(B2:C4)
Set Nuevo = Original.Offset(4, 3)

Es muy importante tener en cuenta lo siguiente:

El desplazamiento horizontal ser positivo si nos movemos a la derecha, y negativo si lo hacemos
hacia la izquierda.

El desplazamiento vertical es positivo si bajamos, o negativo si subimos.

El nuevo rango generado con el mtodo Offset deberamos guardarlo en una variable de tipo
Range, ya que en un futuro es muy posible que necesitemos hacer algo con el

Al declarar una variable como tipo Range estamos realmente creando un objeto. Cuando
trabajamos con objetos, en las sentencias de asignacin es obligatorio utilizar la palabra Set.


Desplazamiento horizontal: +3
Desplazamiento vertical: +4

35
Vamos con un ejercicio en el que aplicar el mtodo Offset:





Los botones que contienen flechas tienen los nombres: cmdArriba, cmdAbajo, cmdIzquierda y
cmdDerecha. El botn con el ttulo Marcar tiene como nombre cmdMarcar.


Qu debe hacer nuestro programa?


Al escribir un rango cualquiera en la celda H7 y pulsar despus el botn cmdMarcar debe marcarse
(hablando bien: seleccionarse) el rango especificado. Para ello debemos utilizar el mtodo Select del
objeto Range.

Una vez esta seleccionado el rango en cuestin los cuatro botones con flechas debern desplazarlo
en todas direcciones, con saltos de una celda. Aqu es donde har falta el mtodo Offset.




36

19. Ejercicio de repaso: la tabla de multiplicar


Con este ejercicio repasaremos muchos de los conceptos vistos hasta ahora:





Qu debe hacer nuestro programa?

Al pulsar el botn (cmdTablaMultiplicar) debe dibujarse la tabla de multiplicar del numero escrito
en la celda C31 (en el ejemplo, 5), desde la celda indicada en C32.

Potrebbero piacerti anche