SlideShare una empresa de Scribd logo
1 de 36
Descargar para leer sin conexión
Introducción a las macros en Microsoft Office 2010

   1.     ¿Qué es una macro?

   Macro es la abreviatura de macroinstrucción, que es una serie de instrucciones que se almacenan
para que se puedan ejecutar de forma secuencial mediante una sola llamada u orden de ejecución.
Dicho de otra forma, es una instrucción compleja, formada por otras instrucciones más sencillas. Esto
permite la automatización de tareas repetitivas.

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

   2.     Las macros en Microsoft Office

   Casi todas las aplicaciones que forman el paquete Office permiten la grabación, reproducción y
modificación de macros. Internamente las macros se almacenan en un lenguaje de programación
propiedad de Microsoft llamado Visual Basic, en su versión “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 intención de hacer el día a día más sencillo,
todo lenguaje de programación puede utilizarse con malas intenciones, es decir: desgraciadamente
pueden elaborarse virus informáticos utilizando VBA.

   Por esta razón cualquier documento de Office podría 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 sólo con nuestro conocimiento
y permiso.

   4.     Las extensiones de archivo

   Un ordenador guarda la información 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 años permite el uso de espacios, letras mayúsculas o minúsculas, tildes y otros
símbolos… y puede ser relativamente largo.

   Lo que no tanta gente sabe es que después de dicho nombre hay un punto seguido por un conjunto
de caracteres (habitualmente tres, aunque pueden ser más…), a lo que se denomina extensión del
archivo.

   El ordenador no sabe qué tipo de información contiene un archivo (fotografía, música, vídeo,
texto…). Es mediante la extensión 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     Extensión




                                                    1
5.     Ver las extensiones de archivo en Windows

   Si cambiamos la extensión 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:                                           Windows Vista / 7:
     Herramientas  Opciones de carpeta                  Organizar  Opciones de carpeta y búsqueda




 Pestaña “Ver”
 Quitar el “click” de la opción “Ocultar las extensiones de archivo para tipos de archivo conocidos”




                                                   2
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

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

   Con la publicación 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 extensión. Así que un documento elaborado con Word 2010 se guardaría con la extensión .docx,
una hoja de cálculo diseñada con Excel 2010 se guardaría como .xlsx, etc.

   También en la versión 2010 de Office, si insertamos macros en cualquier documento, deberá ser
guardado con una “m” al final de la extensión, en vez de la típica “x”. Por ejemplo, una hoja de cálculo
de Excel 2010 que contenga macros será guardada con la extensión .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 aplicación de Office, debemos elegir una para
hacer nuestras primeras pruebas. Bastará con abrir un archivo cualquiera de Microsoft Excel que
contenga información.




    En la tira de opciones debemos pasar a la
     “pestaña” Vista.

    En ella encontramos en última posición el botón/desplegable “Macros”.

    Desplegándolo elegiremos “Grabar macro”:

    Aparece ahora una ventana que en la que se nos solicita diferente información:



                                                    3
    Nombre de la macro: En este nombre no pueden utilizarse espacios, eñes, tildes, ni caracteres
     “extraños” como %, &, /… Sin embargo sí que puede utilizarse la “barra baja” (_) para separar
     diferentes palabras.

    Método abreviado: Combinación de teclas que puede utilizarse para ejecutar la macro
     posteriormente. Se recomienda no elegir una combinación de tipo Ctrl + “tecla”, ya que el propio
     Office tiene la mayoría de ellas asignadas ya a alguna operación. Es preferible elegir una
     combinación del tipo Ctrl + Mayus + “tecla”.

    Descripción: Aquí con total libertad podemos escribir un texto largo que describa qué hace la
     macro, cuando fue grabada… o cualquier tipo de información que más adelante podrá ser
     consultada.

    Cuando hacemos click sobre el botón “Aceptar” comienza la grabación de la macro: el ordenador
guarda cada uno de los pasos que hagamos dentro de la aplicación (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 podrían hacer que nuestra macro se ejecute de forma mucho más lenta, o
incluso llegue a fallar. Se recomienda incluso crear un pequeño “guión” de los pasos antes de grabar la
macro, de forma que durante la grabación no tengamos ninguna duda.

    Una vez terminada la grabación podemos detenerla de dos formas diferentes:



                                          Desplegando el botón “Macros” y eligiendo la opción
                                          “Detener grabación”




    Más sencillo y “a mano”: podemos utilizar el botón “detener” que aparece en la barra de estado (en
la parte inferior de la aplicación, en este caso Excel)




   Una vez grabada la macro podrá ejecutarse utilizando la combinación de teclas especificada
anteriormente.


                                             También existe la opción de crear un botón que ejecutará
                                             dicha macro en la barra de herramientas personalizada
                                             (encima del “menú Archivo”, la pestaña de color que
                                             encontramos en la parte superior izquierda de cualquier
                                             aplicación de Office 2010).




                                                  4
Para ello en primer lugar pulsaremos sobre el “menú Archivo” para luego pulsar el botón “Opciones”
y por último situarnos en “Barra de herramientas de acceso rápido”.




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

    En el desplegable de la derecha (“Personalizar barra de herramientas de acceso rápido) podemos
     elegir:

     o    “Para todos los documentos (predeterminado)”: El botón que vamos a crear estaría
          disponible siempre en Excel, independientemente del documento con el que estemos
          trabajando.

     o    Sin embargo si elegimos la otra opción el botón sólo estará disponible en el archivo en el que
          estamos trabajando.

    Ya sólo nos quedaría pulsar en el botón “Modificar” para elegir la imagen que se verá en el botón.




                                                   5
8.     Guardar como “archivo con macros”

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

   Sin embargo en Office 2010 por seguridad los documentos con macros deben guardarse con la
extensión correspondiente a la aplicación con la que los creamos, pero añadiendo una “m” al final. Así,
un documento de Excel que no contiene macros se guardaría con la extensión .xlsx, mientras que si
contiene macros debe guardarse con la extensión .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 diálogo siguiente:




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




                                                  6
9.     Seguridad de macros

   Como se ha comentado anteriormente al estar basadas las macros en un lenguaje de programación
bastante potente (VBA), podría insertarse código malicioso (virus) en cualquier documento de Office.

   Por esta razón, 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
botón “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, vínculos a lugares en Internet, etc.)




                                                   7
Otra forma de llegar sería a través del menú Archivo  Opciones. Luego elegiríamos “Centro de
confianza” y pulsamos en el botón “Configuración 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 sección “Configuración 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,
podríamos 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.




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

   ¿Y si queremos eliminar alguna macro ya grabada? ¿O modificar su combinación de teclas, o su
descripción?



                                          Para ello podemos acceder al listado de macros: de nuevo en
                                          la pestaña “Vista”, desplegando el botón “Macros”, elegimos
                                          la opción “Ver macros”


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

                                              • Con el desplegable “Macros en” podemos visualizar
                                                sólo las macros grabadas en el documento actual
                                                (“Este libro”), o bien las macros que funcionarían en
                                                cualquier documento, o pertenecientes a otros
                                                documentos abiertos (“Todos los libros abiertos”).

                                              • Con el botón “Eliminar”        borramos    la   macro
                                                seleccionada en la lista.

                                              • Con el botón “Opciones” podemos cambiar la
                                                combinación de teclas o descripción de la macro
                                                seleccionada.

                                              • Con el botón “Ejecutar" ejecutaríamos la macro
                                                seleccionada (aunque hay formas más sencillas de
                                                ejecutarla, con la combinación de teclas, o si hemos
                                                creado un botón en la barra de herramientas de acceso
                                                rápido)

   Por último, si pulsamos el botón “Modificar” Office nos lleva al IDE de VBA. Aquí realmente podemos
ver como ha quedado grabada nuestra macro: son un montón de líneas de código ahora totalmente
incomprensibles para nosotros, pero que según avancemos en este módulo 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 programación,
así como testearlos y depurarlos de una forma cómoda.

    Para salir del IDE de VBA simplemente cerramos su ventana, ya que volveremos a la aplicación de
Office en la que estábamos (en este caso Excel).



                                                  9
11.    La “pestaña” Programador

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

   Para mostrarla debemos ir al menú Archivo de la parte superior izquierda de la aplicación (en este
caso Excel). Allí elegiremos “Opciones”  “Personalizar la cinta de opciones” y basta con marcar la
opción “Programador” de la columna derecha.




    Al pulsar en “Aceptar” podemos comprobar como efectivamente ha aparecido una nueva “pestaña”
llamada “Programador” en la cinta de opciones, con un montón de herramientas que con seguridad a lo
largo de este módulo nos serán de mucha utilidad:




                                                  10
Introducción a la programación en VBA

     1.        Nuestro primer programa: “Hola, mundo”

   Es ya una tradición que cuando alguien comienza a estudiar cualquier lenguaje de programación 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 inglés). Por supuesto nosotros no podemos dejar de
cumplir esta tradición… ¡Vamos allá!

1.        Abrimos Excel con una hoja de cálculo 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 “pestaña Programador” de la cinta de opciones. Si no se ve esta pestaña en el punto
          11 ya hemos explicamos como mostrarla.

3.        En la segunda sección, “Controles”, desplegamos “Insertar”. Dentro de la segunda categoría,
          “Controles ActiveX”, elegimos el primero “botón”.


4.        El puntero del ratón se convierte ahora en una cruz,
          y arrastrándolo sobre nuestra hoja de cálculo
          podemos dibujar un rectángulo, que al soltar el
          ratón se convertirá en un botón.

5.        Una vez dibujado el botón debemos asegurarnos de
          que queda seleccionado (lo notaremos porque esta
          rodeado de “bolitas blancas”). Si no es así debemos
          asegurarnos de que el botón “Modo diseño” está
          “apretado”, y entonces hacer un solo click sobre el
          botón recién dibujado, para seleccionarlo.

6.        Hacemos doble-click sobre el botón seleccionado. Llegaremos al IDE de Visual Basic, y nos
          encontraremos entre dos líneas de código ya escritas (aparecen en negrita a continuación).
          Nosotros debemos escribir simplemente una línea, 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
          botón hay que desactivar el “Modo diseño”, pulsando en el botón con este nombre, que quedará
          “suelto”. Ahora al pulsar en nuestro flamante botón el ordenador debería ya saludarnos.




     ¡Enhorabuena! Acabas de hacer tu primer programa en VBA.



                                                       11
2.       Programación Orientada a Objetos (POO)

  VBA es un lenguaje de programación orientado a objetos (en inglés Object Oriented Programming,
OOP). ¿Qué significa esto? Estos tipos de lenguajes hacen uso de las siguientes características:

       Clases
       Objetos
       Propiedades
       Métodos
       Eventos

   Veamos que significa cada una de ellas, trabajando siempre con un “ejemplo ficticio” escrito en
pseudocódigo, para intentar comprender cada concepto:

 Clases: Una clase es el “esqueleto” para definir más adelante todos los objetos que queramos. La
  clase contiene las propiedades, métodos y eventos comunes. Después cada objeto podrá ser
  “personalizado” añadiendo propiedades, métodos o eventos exclusivos para él.


        Clase “Coche”:

           Propiedades:

            o   Marca
            o   Color
            o   Combustible

           Métodos:

            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 están basados en clases, de las que “heredan” las propiedades, métodos 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
   después el nombre de la propiedad en cuestión:




                                                 12
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 después de otro.
   o     Los textos o “cadenas de caracteres” (strings en ingles) deben encerrarse entre dobles comillas.
   o     La instrucción de VBA MsgBox muestra un cuadro de dialogo (ventana “sencilla”) que contiene
         el mensaje que deseemos en su interior.
                                                  Ejemplo:
MsgBox “Hola “ & “Dani”

VBA mostraría un cuadro de dialogo con el texto “Hola Dani” en su interior

Obsérvese 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.




 Métodos: Un método es una “orden” que damos a un objeto. El objeto conoce dicha “orden” y
  ejecutara las acciones correspondientes (que habrán sido programadas por nosotros)

Declarar_metodo CocheLaura.Arrancar ()

       Sentarse en asiento del conductor
       Ponerse el cinturón
       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 método se escribe el nombre del objeto, seguido de un punto (.) y después
el nombre del método:

CocheLaura.Arrancar()




 Eventos: Es una acción que “ocurre sobre un objeto”, ante la cual sabe “reaccionar”, y ejecuta un
  código.

   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
después el nombre del evento:

DeclararEvento CocheJavi_SeAcabaCombustible ()

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

FinEvento




                                                   13
Tanto los métodos como los eventos pueden recibir parámetros o argumentos, que de alguna forma
modifican el comportamiento del código.

   En VBA los parámetros que “espera” recibir un método o evento se especifican en su declaración,
entre paréntesis después del nombre del método/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 “pequeño y simple” programa
“Hola, mundo”:

                                      Con el botón “Modo diseño” “apretado” hacemos un solo click
                                   sobre el botón que dibujamos. Quedara seleccionado, con sus
                                   “bolitas blancas” alrededor.

                                      Ahora, en la tira de opciones, junto al botón “Modo diseño”
                                   encontramos otro botón “Propiedades”: lo pulsamos. Aparecerá una
                                   ventana que nos permite modificar las propiedades de nuestro
                                   botón “en tiempo de diseño” (es decir: sin que el programa se esté
                                   ejecutando).

                                      La primera propiedad es la más importante: se trata de “Name”
                                   o el nombre del botón. Es muy importante establecer un buen
                                   nombre para cada objeto que dibujemos o declaremos, ya que mas
                                   tarde al escribir código tendremos que referirnos siempre a este
                                   nombre.

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

                                       Por eso vamos a cambiar ahora el nombre del botón, 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 discusión sobre esto. Si en un nombre hay mas de una palabra
  podemos separarlas con la barra baja ( _ ) o bien utilizando mayúsculas y minúsculas. Por ejemplo:
  PrimerApellido o segundo_apellido.




                                                  14
 No utilizar eñes, tildes, o “caracteres extraños”. Las eñes y tildes, aunque en un PC con Windows en
  castellano pueden funcionar, en un PC con Windows en otro idioma podrían dar muchos problemas.
  Los “caracteres extraños”… muchos de ellos sencillamente están “prohibidos”, como: * / % ( ) [ ] + - ,
  ; : & “ ‘ Asi que para “no andar con dudas” de cuales pueden utilizarse y cuales no… pues no
  utilizamos ninguno y ¡listo!

 La notación hungara

   ¿Por qué hemos puesto las letras “cmd” antes del nombre del botón (“Saludar”)?

   Si a un control le llamamos simplemente “Saludar” al verlo dentro de nuestro código no sabríamos
que tipo de control es: si es un botón, una lista desplegable, una ventana...

    La notación húngara 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 código.

   En este modulo utilizaremos la notación húngara solamente para los controles, y estos son los
prefijos más habituales:

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

    Si ahora, después de cambiar el nombre de nuestro botón 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 solución entre todos a este problema.

   Así que ya sabéis: a partir de ahora…

                                           ¡¡ MUY IMPORTANTE !!

     Al terminar de “dibujar” un control, la primera operación 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 más para mejorar el “aspecto” de nuestro botón:

 Caption: Es el texto que aparece dentro del botón, que ahora es un triste “CommandButton1”.
  Pongamos algo más descriptivo de lo que el botón hace, como por ejemplo “Salúdame”. En esta
  propiedad puede escribirse texto con total libertad, utilizando espacios, tildes, eñes, y cualquier
  carácter que necesitemos.

 Font: En esta propiedad, pulsando el botón […] podemos elegir el tipo de letra, tamaño… para el
  texto que aparece dentro del botón.

 ForeColor: Es el color “de frente” (foreground en inglés). En este caso es el color para el texto que
  aparece dentro del botón.




                                                   15
 BackColor: Es el color “de fondo” (background en inglés). Es el color del botón.

   Ahora nuestro botón es mucho más 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 botón “parecido” al que ya tenemos deberíamos 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 botón “cmdSaludar” con un solo click (el botón “Modo diseño” debe estar
  apretado). Una vez veamos las “bolitas blancas” alrededor copiamos el control al portapapeles,
  pulsando el botón derecho del ratón y eligiendo la opción “Copiar” del menú contextual, o bien
  pulsando la combinación de teclas Ctrl + C (mucho más fácil y rápido).

 Des-seleccionamos el botón, pinchando en cualquier celda de nuestra hoja de calculo. Entonces
  pulsamos el botón derecho del ratón y elegimos la opción “Pegar” del menú contextual, o bien
  utilizamos la combinación de teclas Ctrl + V (mucho más fácil y rápido).

 Ahora en el la “copia del botón” no podemos olvidarnos de cambiar su nombre (Name). Le
  pondremos “cmdRecoger”. También cambiamos su Caption, escribiremos “Recoger”.

   Vamos a copiar ahora de nuevo el botón que acabamos de crear, “cmdRecoger”, pero esta vez lo
haremos de una forma algo diferente, para que elijáis la que más os guste u os parezca más cómoda:

 Seleccionamos el botón “cmdRecoger” con un solo click (el botón “Modo diseño” debe estar
  apretado). Una vez veamos las “bolitas blancas” alrededor comenzamos a moverlo a otro lugar,
  arrastrándolo.

 Antes de soltar el botón izquierdo del raton pulsamos la tecla Ctrl, veremos que al lado del puntero
  del raton aparece un símbolo [+]. Si ahora soltamos el botón izquierdo del ratón (sin soltar la tecla
  Ctrl)… et voila! Ya hemos duplicado nuestro botón… Ahora ya puedes soltar la tecla Ctrl, no vaya a
  ser que cojas agujetas ;)

 No olvidemos cambiar el nombre (Name) del nuevo botón, le pondremos “cmdSumar1”. Tambien
  cambiamos su Caption, escribiendo simplemente el símbolo “+”.

 Ahora haz por tu cuenta una copia de este ultimo botón, ponle el nombre (Name) “cmdRestar1” y
  como Caption el símbolo “-“.

 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”.




                                                   16
Nuestro “interfaz” debería 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 mayoría de los programas “serios” trabajaremos con datos que irán 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
información que nos interese. La información se guarda con una asignación, de la siguiente forma:

                                 NombreVariable = Valor a guardar


   Vamos a probar esto programando el botón “cmdRecoger”. Con el “Modo diseño” activado, haz
doble-click sobre él, con lo que llegamos al IDE de VBA, y aparecemos ya dentro del evento click del
botón, con lo que vamos a programar que ocurre al pulsar el botón. Solo debes escribir dos líneas de
código:

Private Sub cmdRecoger_Click()

     Numero = 8 + 2

     MsgBox “El número es: “ & Numero

End Sub


 La primera línea es una asignación, 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: evalúa la expresión 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 línea utilizamos la instrucción 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 diseño” y probar el botón, que debería
mostrar un cuadro de dialogo como este:




                                                  17
6.     La importancia de declarar las variables

   Podríamos decir que en nuestro programa estamos declarando implícitamente la variable
“Numero”. ¿Qué significa esto? La variable “Numero” no existía, el ordenador la crea cuando le pedimos
que guarde “8 + 2” en su interior.

   Este tipo de declaración es muy cómoda, pero puede traernos serios problemas y “dolores de
cabeza”. Vamos a hacer una prueba que os dejara claro de que hablamos:

    Con el “Modo diseño” activado, hagamos doble-click sobre el botón “cmdRecoger”, con lo que
llegamos al IDE de VBA, y modificamos el código:

Cambiamos: MsgBox “El número es: “ &        Numero
Por: MsgBox “El número es: “ & Numer

(Hemos borrado la “o” de “Numero”)

   Salgamos del IDE de VBA, desactivemos el “Modo diseño” y probemos el botón “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 ningún error, simplemente “intenta” visualizar la variable “Numer” y como no
existe… pues no muestra nada. Esto en un programa mas “serio” o complejo podría darnos muchos
dolores de cabeza, hasta que averigüemos que nos hemos olvidado de la “o” de marras :P

   Activemos de nuevo el “Modo diseño” y hagamos doble-click sobre el botón “cmdRecoger”, llegando
de nuevo al código. Ahora hay que colocarse en la primera línea, arriba del todo, y escribir lo siguiente:

Option Explicit


   Salgamos del IDE, desactivemos el “Modo Diseño” y volvamos a probar el botón. ¿Qué ocurre ahora?




                                   Esta vez VBA nos da un error de compilación: “no se ha definido la
                                   variable”. Además nos marca la línea de código en la que intentamos
                                   almacenar “8 + 2” en Numero.




   Al pulsar el botón “Aceptar” de la ventana de error VBA nos
resalta la línea donde hemos tenido un problema, y el programa
queda “pausado”. Para poder hacer cualquier modificación en el
programa en primer lugar debemos “detenerlo del todo”. Y eso lo
hacemos pulsando el botón de “stop” en la barra de herramientas
superior.




                                                     18
Al añadir la línea “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 fácilmente posibles
errores posteriores de tecleado.

   Muy bien, pero ¿cómo se declara una variable?

Option Explicit

Private Sub cmdRecoger_Click()

     Dim Numero As Single

     Numero = 8 + 2

     MsgBox “El número es: “ & Numero

End Sub


    Ahora volvemos a probar nuestro programa. ¿Qué ocurre? ¿El error que nos da VBA es el mismo de
antes? ¿Cómo podemos arreglarlo? ¿Entendéis ahora por qué y cómo nos ayuda exigir la declaración de
variables con “Option Explicit”? Comentad todo esto entre vosotros y con el profesor.

   No os preocupéis si ahora mismo no entendéis del todo la línea que hemos añadido, la explicaremos
con detalle en un apartado posterior.

   En resumen:

                                         ¡¡ MUY IMPORTANTE !!

    Asegurarse siempre de que en la primera línea de nuestros programas esta la instrucción “Option
                                              Explicit”

   Como es posible que en algún momento se nos pueda olvidar esto, podemos configurar el IDE de
VBA para que automáticamente se añada esta línea 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 pestaña “Editor”
debemos marcar la opción “Requerir declaración de variables”:




                                                   19
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 utilizábamos “Option Explicit” al principio de nuestro
programa.

    Declarar una variable es cómo “crear” una “caja” en la que después guardaremos cierta información.
Y bien… ¿y cómo 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 sólo puede tomar dos valores: true (“verdadero”) o false (“falso”)
 String: Cadena de caracteres o “texto”

 Número:

   o Enteros: Son los números que no admiten parte decimal. Tenemos los siguientes tipos:

            Byte: Para almacenar un número desde 0 hasta 255
            Integer: Para almacenar un número desde -32.768 hasta 32.767
            Long: Para almacenar un número desde -2.147.483.648 hasta 2.147.483.647

   o Reales: Son los números que pueden tener parte decimal. Tenemos los siguientes tipos:

            Single: Número con coma flotante, desde -3,402823 . 1038 hasta -1,401298 . 10-45 para
             valores negativos y desde 1,401298 . 10-45 a 3,402823 . 1038 para valores positivos.

            Double: Número con coma flotante, desde -1,79769313486231 . 10308 hasta
             -4,94065645841247 . 10-324 para valores negativos y desde 4,94065645841247 . 10-324 hasta
             1,79769313486232 . 10308 para valores positivos.

            Currency: Número con coma fija, utilizado para cálculos con valores monetarios. Permite
             almacenar un número 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 botón “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 botón “cmdSumar1” muestre en pantalla, también mediante un
MsgBox, la misma variable, “Numero”. Para conseguirlo hacemos doble-click (con el “Modo diseño”
activado) sobre el botón “cmdSumar1”, y escribimos el siguiente código

Private Sub cmdSumar1_Click()

        MsgBox Numero

End Sub




                                                    20
Para probar nuestro programa en primer lugar desactivamos el “Modo Diseño”. Ahora pulsamos el
botón “Recoger” y por supuesto, se nos muestra el contenido de la variable “Numero”, es decir: 10. Si
ahora pulsamos el botón “cmdSumar1”… ¿qué pasa?

   La variable “Numero” la estamos declarando (con la sentencia Dim … As) “dentro” del código del
botón “cmdRecoger”. Lo que ocurre es que esta variable sólo existe dentro de este botón, cuando el
botón “cmdSumar1” intenta acceder a ella ya no existe.

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

   ¿Y cómo conseguir que los otros botones (“cmdSumar1” y “cmdRestar1”) “vean” la variable
“Numero”? Sencillo: declarándola al comienzo de nuestro programa, fuera de todos los “Subs”.

  Para conseguirlo movemos el código “Dim Numero As Single” desde el “Private Sub
cmdRecoger_Click()” hasta el comienzo de nuestro programa, justo después de “Option Explicit”

   Probemos otra vez el programa, haciendo click primero en el botón “cmdRecoger” (nos mostrará
“10”), y ahora haciendo click en el botón “cmdSumar1”, que también debería 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 botón “cmdSumar1” la variable “Numero” “suba” una unidad,
pasando de ser 10 a ser 11. ¿Cómo podemos conseguirlo? Añadiendo la siguiente línea de código al
botón “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 botón “cmdRecoger”, y
después ya podéis hacer click todas las veces que queráis sobre el botón “cmdSumar1”, el número que
nos muestra el ordenador debe ir “subiendo”.

    La línea de código “Numero = Numero + 1” matemáticamente podría parecernos una estupidez,
puesto que si intentamos “resolver la ecuación” tendríamos 0 = 1, una locura. Pero hay que tener en
cuenta que no se trata de una ecuación, sino de una instrucción de asignación, 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 podríamos programar el botón “cmdRestar1”, que es muy parecido a este, sólo que en vez de
sumar 1, resta 1. Intentad hacerlo…




                                                 21
10.     Leer y escribir información de celdas en la hoja de cálculo

   No está nada mal nuestro primer programita… pero estaría mejor si en vez de “empezar” siempre en
10 fuese capaz de “leer” cualquier número que escribamos en una celda de nuestra hoja de cálculo…
Concretamente, haremos nuestras pruebas leyendo el valor escrito en la celda D6.

   En el código correspondiente al botón “cmdRecoger” eliminamos la línea “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 número (el que nos apetezca) en la celda D6 y después
pulsamos el botón “cmdRecoger”. El programa debería mostrarnos el número que hemos escrito en D6.

 Range es un objeto de Excel que representa a un rango de celdas, el escrito entre paréntesis, 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 ¿cómo podemos escribir en una
celda? Vamos a intentarlo con el botón “cmdSumar1”, hay que borrar la línea “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 instrucción de asignación, 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.

   Después de probar que este cambio funciona como debiera… programad vosotros el botón
“cmdRestar1”, para que haga lo mismo.

   11.     Otras propiedades del objeto Range

   Vamos a “inaugurar” una nueva celda para hacer más 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, tamaño de letra, color de letra y fondo… a lo que os apetezca.




                                                  22
Ahora queremos que el botón “cmdRecoger” aplique a esta celda como tamaño de letra el número
que haya escrito en la celda D6. Para ello, en el código del botón “cmdRecoger” vamos a eliminar el
MsgBox (que era un mensaje de prueba, y ya no es necesario), y añadir una línea de código 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 número (por ejemplo: 28) en la celda B8, y pulsando después
el botón “cmdRecoger”. El “texto de prueba” debería inmediatamente tomar el tamaño escrito (28
puntos, en nuestro ejemplo)

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

   Ahora vamos a copiar la línea de código Range("B8").Font.Size = Numero a los botones
“cmdSumar1” y “cmdRestar1”, justo al final del código, antes de End Sub. De esta forma al pulsar los
botones “cmdSumar1” y “cmdRestar1” el tamaño de nuestro “Texto de prueba” irá
creciendo/disminuyendo en pasos de 1 punto.

                                                    Reto

    Nuestro pequeño programa presenta un par de problemas, que quizás aún no hemos detectado:

   Escribid en la celda D6 el número “0”. Pulsad el botón “cmdRecoger”. ¿Qué ocurre?
   Lo mismo pasaría si dejamos la celda D6 vacía, o escribimos algo que no es un número, por ejemplo
    “perrito”.

   Este problema se puede arreglar de forma sencilla, sin utilizar programación. Este es vuestro “reto
de hoy”

    Pista: Buscad en la pestaña “Datos” de la tira de opciones…




                                                   23
12.     Tomando decisiones: If

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




    El nuevo botón 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 tenéis los suficientes conocimientos para hacer frente a este problema, así que… ¡adelante!

    Hasta este momento el ordenador interpreta y ejecuta nuestro código de forma continua,
“leyéndolo” línea a línea, y de arriba abajo. Pero en cualquier programa “serio” llega un momento en
que un fragmento de código hay que ejecutarlo condicionalmente, es decir: sólo si se cumple cierto
criterio o condición. Es entonces cuando necesitamos la estructura If … Then:




    If Pregunta Then

          Código “Sí”                                                     OPCIONAL
    Else
                        OPCIONAL
          Código “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 código
diferente. El “camino del No” es opcional, es decir: puede omitirse el “Else” si no hay “nada especial que
hacer” cuando nos responden “No”.



                                                    24
Lo más complicado de esta estructura es la “pregunta” (criterio o condición). En ella se suelen utilizar
operadores de comparación, los más comunes son:



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

   Vamos a aplicar esto en nuestro ejercicio: al pulsar el botón “cmdComparar” el ordenador debe
decirnos si los números “A” y “B” son iguales o diferentes.




   13.     Más de dos caminos: ElseIf o Select Case


    Hemos visto cómo la estructura If…Then…Else…End If es útil cuando tenemos “dos caminos”
posibles, pero… ¿qué ocurre si hay más de dos? En este caso podemos “completar” el ya explicado If con
ElseIf, de esta forma:




   If Pregunta1 Then

         Código “Sí 1”

   ElseIf Pregunta2 Then

         Código “Sí 2”

   … más preguntas …            OPCIONAL
   Else

         Código “No”

   End If




                                                    25
Existe otra solución equivalente, utilizando la estructura Select…Case, de la siguiente forma:


Select Case Evaluar

           Case Expresión_Camino_1

                    … Código camino 1 …

           Case Expresión_Camino_2

                    … Código camino 2 …

           … (más caminos) …

           Case Else

                    … Código “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:



     Descripción                      Operador                                   Ejemplo
                                   Valor(es) fijo(s)          Si el usuario es de Vitoria, o de Bilbao, o de
          Igual a           (si son varios separados por      Pamplona…
                                       comas)                 Case “Vitoria”, “Bilbao”, “Pamplona”
                                                              Si la edad está entre 18 y 25 años…
    Está entre X e Y                X To Y                    Case 18 To 25
Mayor (o igual) que                                           Si el sueldo es mayor que 600 €…
Menor (o igual) que             Is expresión                  Case Is > 600




   Vamos a aplicar lo aprendido en nuestro ejercicio práctico: ahora el botón “cmdComparar” debe
darnos diferentes mensajes, dependiendo de:

    Si el número A es mayor que el B
    Si el número A es menor que el B
    Si ambos números son iguales

   Una vez funcione esto, crearemos un nuevo botón “cmdCompararCase” que hará el mismo trabajo,
pero utilizando la estructura Select…Case



    14.      Varias “condiciones”: AND y OR


   Hay ocasiones en que las “preguntas” de un If son más complicadas que las que hemos visto hasta
ahora, están 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 sólo una de
  las condiciones.



                                                    26
Vamos a preparar un nuevo ejercicio para practicar esto, debemos crear la siguiente estructura en
nuestra hoja de cálculo:




                                                 Ejercicio 1
   Sólo vamos a hacer descuento a los clientes mayores de edad que vivan en “Bilbo”. Al pulsar el
nuevo botón “cmdDescuento” debe aparecer un MsgBox que nos diga si hay descuento o no.



                                                 Ejercicio 2
   Al pulsar el botón “cmdEuskadi” si la ciudad es “Gasteiz”, “Bilbo”, “Donosti” o “Iruña” debe
aparecernos un MsgBox que nos diga que somos euskaldunes. Si no somos de ninguna de esas ciudades
aparecería 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 podría
llevarnos a “confusiones”: habrá gente que ponga “Vitoria”, otros “Gasteiz”, o alguien puede
equivocarse y escribir por ejemplo “Gazteiz”. Esto haría que nuestro “pequeño 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 ratón, y así no tenga que “teclearla”, evitando posibles errores como los descritos anteriormente.

  Crear un “desplegable” que contenga las siguientes ciudades: “Gasteiz”, “Bilbo”, “Donosti”, “Iruña”,
“Madrid” y “Barcelona”. Evitar que se escriba cualquier ciudad que no esté en este “desplegable”.

   “Pista”: No hace falta programar. Buscar en la pestaña “Datos” de la tira de opciones de Excel.




                                                   27
15.    “Repitiendo”: For…Next

   En muchas ocasiones es necesario repetir un “trozo” de código muchas veces, además de llevar de
alguna forma la cuenta de “cuantas veces hemos repetido ya”. Para ello en VBA existe la estructura
For…Next.


For Contador = Inicio To Fin Step Paso
                                                                  Contador = Inicio
         Código a repetir

Next Contador




                                                    SÍ               ¿Contador
                                                                    ha superado
                                                                      ya Fin?



                                                                             NO
                                                                  Código a repetir



                                                                   Incrementar
                                                                 Contador con Paso



                                                         El programa continúa

   Para poner en práctica esto vamos a preparar un nuevo ejercicio, creando la siguiente estructura en
nuestra hoja de cálculo:




                        Al pulsar el botón “cmdRepetir” el ordenador primero leerá “Inicio”, “Fin” y
                        “Paso” (celdas C18, C19 y C20) y mostrará estos datos en un MsgBox




                                                 28
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 página aparecería algo así:




                                                                       …


                                                “Reto”
   Es un poco “incómodo” que en cada número de la “cuenta” tengamos que hacer click en el botón
“Aceptar” del MsgBox.

  En vez de utilizar un MsgBox para mostrar cada número de la “cuenta” vamos a intentar que los
números aparezcan de forma consecutiva en una celda, por ejemplo en C22, de esta forma:




   ¿Podríamos con nuestro programa “hacer una cuenta atrás”? ¿Cómo?




                                                29
16.    Repetimos, pero no sabemos cuántas veces: Do While…Loop


   En ocasiones es necesario repetir un trozo de código, pero no sabemos exactamente cuantas veces
será necesario repetirlo, lo hacemos mientras (while en inglés) se cumpla una condición.




                                                  NO                 ¿Se cumple
                                                                          la
                                                                     condición?

Do While Condición

         Código a repetir                                                    SÍ
Loop
                                                                  Código a repetir




                                                       El programa continúa

   En este caso hay que tener mucho cuidado para no entrar en un bucle infinito, en el que la condición
nunca deja de cumplirse y por tanto el ordenador se quedará repitiendo el código de forma infinita. En
realidad lo que ocurre es que el programa “se cuelga” (en este caso Excel), con lo que deberíamos
cerrarlo con el administrador de tareas (pulsando Ctrl+Alt+Supr y finalizando Excel), con lo que
perderíamos todos aquellos cambios que no hayan sido guardando.

    Por ello a partir de este momento tendremos mucho cuidado y guardaremos siempre la hoja de
cálculo 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 “código a repetir” debe existir “algo” que consiga que en un momento determinado la
condición deje de cumplirse, para que así el ordenador “salga” del bucle.

   Para poner en práctica estos conceptos vamos a crear un nuevo botón, al que llamaremos
“cmdAdivina”, en nuestra hoja de cálculo:




                                                  30
Al pulsar este botón 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 botón
“cmdAdivina”, el código 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. ¿Cuál crees que es?")

Loop

End Sub


    A continuación explicamos el objetivo y funcionamiento de este código:

 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 aún
          no hemos comenzado el juego, contiene “nada” (cadena vacía, “”).

 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 repetición 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 podríamos mejorarlo en muchos aspectos, y todas las mejoras que ahora
vamos a proponerte servirán para repasar conceptos ya explicados y para que vayas cogiendo confianza
y educando tu “mente de programador”:

   Si escribimos “rojo” (ojo, ¡en minúsculas!)… ¿qué ocurre? ¿cómo podemos arreglarlo?

   Ahora la única forma de terminar el juego es “ganando”. Podríamos terminar el juego porqué nos
    “hemos aburrido” y no queremos seguir jugando. Para ello pulsaremos el botón “Cancelar” cuando
    el ordenador nos pregunta un nuevo color (o bien pulsaremos “Aceptar” sin escribir ningún color).

   Al terminar el juego estaría 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 número de intentos que utiliza cada jugador para
    adivinar el color, en la celda C24.




                                                  31
    Vamos ahora a almacenar el “record del día” en la celda C25, es decir: el menor número de intentos
     utilizados para adivinar el color.

    ¿Podríamos además 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 podía 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 inglés).

   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 numérico, que expresa la
posición 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 cajón colocamos una etiqueta con un número, que
sería el índice, y nos ayudaría a “localizar” un cajón en concreto.




                                                            Índice       Contenido
                                                        1            “Lunes”
                                                        2            “Martes”
                                                        3            “Miércoles”
                                                        4            “Jueves”
                                                        5            “Viernes”
                                                        6            “Sábado”
                                                        7            “Domingo”




    Muy bien, pero… ¿cómo se declara una matriz en VBA? ¿y cómo se “escribe” en cada uno de los
cajones, o como se “recupera lo que hay dentro” de cada cajón?

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

Por ejemplo:

Dim Semana (1 To 7) As String


                                    Guardar información en una matriz
NombreMatriz(NumeroCajon) = InformacionAGuardar

Por Ejemplo:

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




                                                  32
Recuperar información de una matriz
NombreMatriz(NumeroCajon)

NOTA: por supuesto habrá que “hacer algo” con esta información

Por ejemplo:

MsgBox “El tercer día de la semana es el “ & Semana(3)




   Pongamos ahora todo esto en práctica, para ello preparemos la siguiente estructura en nuestra hoja
de cálculo:




                                               Ejercicio 1
   Si escribimos por ejemplo “3” en la celda C27 y pulsamos el botón “Traducir día” (“cmdSemana”)…
debería aparecer la palabra “Miércoles” en la celda C28.

                                               Ejercicio 2
   Queremos que en la celda C29 aparezca el mismo día de la semana, pero en Euskera. Os ayudamos,
por si tenéis “oxidado” el euskera:


                                  Castellano         Euskera
                                     Lunes         Astelehena
                                    Martes          Asteartea
                                  Miércoles        Asteazkena
                                    Jueves          Osteguna
                                    Viernes          Ostirala
                                    Sábado         Larunbata
                                   Domingo           Igandea




                                                 33
18.    Moviéndonos por la hoja de cálculo (método Offset, objeto Range)

   Ya hemos conocido durante los ejercicios anteriores uno de los objetos más 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 muchísimas veces su propiedad Value, con la que podemos leer/escribir
en el interior de una celda. También en algún momento hemos utilizado su propiedad Font, con sus sub-
propiedades Size y Color, que nos permiten modificar el tamaño de la letra, o su color.

   Pues bien, ahora vamos a conocer el método Offset, que permite desplazar un rango para que ocupe
una posición diferente a la inicial.




                                                                Desplazamiento vertical: +4




                          Desplazamiento horizontal: +3



   Así, el método Offset se utilizaría 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 método Offset deberíamos 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 asignación es obligatorio utilizar la palabra “Set”.




                                                    34
Vamos con un ejercicio en el que aplicar el método Offset:




  Los botones que contienen “flechas” tienen los nombres: cmdArriba, cmdAbajo, cmdIzquierda y
cmdDerecha. El botón con el título “Marcar” tiene como nombre cmdMarcar.


   ¿Qué debe hacer nuestro programa?


 Al escribir un rango cualquiera en la celda H7 y pulsar después el botón cmdMarcar debe “marcarse”
  (hablando bien: seleccionarse) el rango especificado. Para ello debemos utilizar el método Select del
  objeto Range.

 Una vez esta seleccionado el rango en cuestión los cuatro botones con “flechas” deberán desplazarlo
  en todas direcciones, con “saltos de una celda”. Aquí es donde hará falta el método Offset.




                                                  35
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 botón (cmdTablaMultiplicar) debe “dibujarse” la tabla de multiplicar del numero escrito
en la celda C31 (en el ejemplo, 5), desde la celda indicada en C32.




                                                  36

Más contenido relacionado

La actualidad más candente

Ejercicios de excel con visual basic
Ejercicios de excel con visual basicEjercicios de excel con visual basic
Ejercicios de excel con visual basicAleckFong
 
Archivo slide share 10
Archivo slide share 10Archivo slide share 10
Archivo slide share 10Luisa De León
 
Excel Avanzado 2007 y Macros
Excel Avanzado 2007 y MacrosExcel Avanzado 2007 y Macros
Excel Avanzado 2007 y MacrosPatricia Acosta
 
Guia para programar_vba_excel
Guia para programar_vba_excelGuia para programar_vba_excel
Guia para programar_vba_exceldiegofmfm
 
Tecnologia trabajo de macros
Tecnologia trabajo de macrosTecnologia trabajo de macros
Tecnologia trabajo de macrosnanabb12
 
Tecnologia trabajo de macros
Tecnologia trabajo de macrosTecnologia trabajo de macros
Tecnologia trabajo de macrosalexandrarodas2
 
Apunte de excel con vba
Apunte de excel con vbaApunte de excel con vba
Apunte de excel con vbawilly_maco
 
Macros, jazmin, freddy
Macros, jazmin, freddyMacros, jazmin, freddy
Macros, jazmin, freddyFreddy Velez
 
Macros en excel
Macros en excelMacros en excel
Macros en excelargenispd
 
Guía del laboratorio de excel 2007 (mos)
Guía del laboratorio de excel 2007 (mos)Guía del laboratorio de excel 2007 (mos)
Guía del laboratorio de excel 2007 (mos)Ricardo Fonseca
 
Modulos y funciones en VBA
Modulos y funciones en VBAModulos y funciones en VBA
Modulos y funciones en VBAprofecesde
 

La actualidad más candente (19)

Macros
MacrosMacros
Macros
 
Ejercicios de excel con visual basic
Ejercicios de excel con visual basicEjercicios de excel con visual basic
Ejercicios de excel con visual basic
 
Archivo slide share 10
Archivo slide share 10Archivo slide share 10
Archivo slide share 10
 
9
99
9
 
Excel Avanzado 2007 y Macros
Excel Avanzado 2007 y MacrosExcel Avanzado 2007 y Macros
Excel Avanzado 2007 y Macros
 
8
88
8
 
Funciones y macros con excel
Funciones y macros con excelFunciones y macros con excel
Funciones y macros con excel
 
Curso de excel avanzado tema 6 macros
Curso de excel avanzado tema 6 macrosCurso de excel avanzado tema 6 macros
Curso de excel avanzado tema 6 macros
 
Guia para programar_vba_excel
Guia para programar_vba_excelGuia para programar_vba_excel
Guia para programar_vba_excel
 
Macros Basicos
Macros BasicosMacros Basicos
Macros Basicos
 
Tecnologia trabajo de macros
Tecnologia trabajo de macrosTecnologia trabajo de macros
Tecnologia trabajo de macros
 
Tecnologia trabajo de macros
Tecnologia trabajo de macrosTecnologia trabajo de macros
Tecnologia trabajo de macros
 
Curso taller vba macros
Curso taller vba macrosCurso taller vba macros
Curso taller vba macros
 
Apunte de excel con vba
Apunte de excel con vbaApunte de excel con vba
Apunte de excel con vba
 
Vba para excel
Vba para excelVba para excel
Vba para excel
 
Macros, jazmin, freddy
Macros, jazmin, freddyMacros, jazmin, freddy
Macros, jazmin, freddy
 
Macros en excel
Macros en excelMacros en excel
Macros en excel
 
Guía del laboratorio de excel 2007 (mos)
Guía del laboratorio de excel 2007 (mos)Guía del laboratorio de excel 2007 (mos)
Guía del laboratorio de excel 2007 (mos)
 
Modulos y funciones en VBA
Modulos y funciones en VBAModulos y funciones en VBA
Modulos y funciones en VBA
 

Destacado

MACROS Y BASES DE DATOS
MACROS Y BASES DE DATOSMACROS Y BASES DE DATOS
MACROS Y BASES DE DATOSgreciabrito1
 
Creacion de base de datos a partir de macros
Creacion de base de datos a partir de macrosCreacion de base de datos a partir de macros
Creacion de base de datos a partir de macrosclaudyamagfer
 
Normas Para Crear Paginas Web
Normas Para Crear Paginas WebNormas Para Crear Paginas Web
Normas Para Crear Paginas Websebastian
 
Estandares de diseño web
Estandares de diseño webEstandares de diseño web
Estandares de diseño webdwebslide
 
Programacion en Power Point
Programacion en Power PointProgramacion en Power Point
Programacion en Power PointRosmery Miranda
 

Destacado (6)

MACROS Y BASES DE DATOS
MACROS Y BASES DE DATOSMACROS Y BASES DE DATOS
MACROS Y BASES DE DATOS
 
Creacion de base de datos a partir de macros
Creacion de base de datos a partir de macrosCreacion de base de datos a partir de macros
Creacion de base de datos a partir de macros
 
Guia para principiantes de access 2010
Guia para principiantes de access 2010Guia para principiantes de access 2010
Guia para principiantes de access 2010
 
Normas Para Crear Paginas Web
Normas Para Crear Paginas WebNormas Para Crear Paginas Web
Normas Para Crear Paginas Web
 
Estandares de diseño web
Estandares de diseño webEstandares de diseño web
Estandares de diseño web
 
Programacion en Power Point
Programacion en Power PointProgramacion en Power Point
Programacion en Power Point
 

Similar a Introduccion a las macros y vba en office 2010

Similar a Introduccion a las macros y vba en office 2010 (20)

Microsoft word gaby
Microsoft word  gabyMicrosoft word  gaby
Microsoft word gaby
 
Abrir y guardar
Abrir y guardarAbrir y guardar
Abrir y guardar
 
Manual de microsoft word
Manual de microsoft wordManual de microsoft word
Manual de microsoft word
 
Apuntes Curso Word 2016 inicial medio Tema 1.docx
Apuntes Curso Word 2016 inicial medio Tema 1.docxApuntes Curso Word 2016 inicial medio Tema 1.docx
Apuntes Curso Word 2016 inicial medio Tema 1.docx
 
Daniel palacios word
Daniel palacios wordDaniel palacios word
Daniel palacios word
 
Emmanuel vargas
Emmanuel vargasEmmanuel vargas
Emmanuel vargas
 
USOS SANDRA ALONSO FDEZ POWER POINT
USOS SANDRA ALONSO FDEZ POWER POINTUSOS SANDRA ALONSO FDEZ POWER POINT
USOS SANDRA ALONSO FDEZ POWER POINT
 
ADA 1: ADA Adicional
ADA 1: ADA AdicionalADA 1: ADA Adicional
ADA 1: ADA Adicional
 
Word
Word Word
Word
 
Teoria de officematica
Teoria de officematicaTeoria de officematica
Teoria de officematica
 
Stefanny martinez
Stefanny martinezStefanny martinez
Stefanny martinez
 
Microsoft access
Microsoft accessMicrosoft access
Microsoft access
 
Diapositivas tic-2
Diapositivas tic-2Diapositivas tic-2
Diapositivas tic-2
 
213118395-Partes-de-Una-Ventana-de-Word.docx
213118395-Partes-de-Una-Ventana-de-Word.docx213118395-Partes-de-Una-Ventana-de-Word.docx
213118395-Partes-de-Una-Ventana-de-Word.docx
 
Tutorial Word 2002 (Office Xp)
Tutorial Word 2002 (Office Xp)Tutorial Word 2002 (Office Xp)
Tutorial Word 2002 (Office Xp)
 
Manual de word xp avanzado
Manual de word  xp avanzadoManual de word  xp avanzado
Manual de word xp avanzado
 
Curso basico access
Curso basico accessCurso basico access
Curso basico access
 
Guia de pasos e xe learning 2
Guia de pasos  e xe learning 2Guia de pasos  e xe learning 2
Guia de pasos e xe learning 2
 
TODO SOBRE BOTON INICIO
TODO SOBRE BOTON INICIOTODO SOBRE BOTON INICIO
TODO SOBRE BOTON INICIO
 
Procesadores de textos
Procesadores de textosProcesadores de textos
Procesadores de textos
 

Introduccion a las macros y vba en office 2010

  • 1. Introducción a las macros en Microsoft Office 2010 1. ¿Qué es una macro? Macro es la abreviatura de macroinstrucción, que es una serie de instrucciones que se almacenan para que se puedan ejecutar de forma secuencial mediante una sola llamada u orden de ejecución. Dicho de otra forma, es una instrucción compleja, formada por otras instrucciones más sencillas. Esto permite la automatización de tareas repetitivas. Las macros suelen almacenarse en el ámbito del propio programa que las utiliza y se ejecutan pulsando una combinación especial de teclas o un botón especialmente creado y asignado para tal efecto. 2. Las macros en Microsoft Office Casi todas las aplicaciones que forman el paquete Office permiten la grabación, reproducción y modificación de macros. Internamente las macros se almacenan en un lenguaje de programación propiedad de Microsoft llamado Visual Basic, en su versión “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 intención de hacer el día a día más sencillo, todo lenguaje de programación puede utilizarse con malas intenciones, es decir: desgraciadamente pueden elaborarse virus informáticos utilizando VBA. Por esta razón cualquier documento de Office podría 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 sólo con nuestro conocimiento y permiso. 4. Las extensiones de archivo Un ordenador guarda la información 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 años permite el uso de espacios, letras mayúsculas o minúsculas, tildes y otros símbolos… y puede ser relativamente largo. Lo que no tanta gente sabe es que después de dicho nombre hay un punto seguido por un conjunto de caracteres (habitualmente tres, aunque pueden ser más…), a lo que se denomina extensión del archivo. El ordenador no sabe qué tipo de información contiene un archivo (fotografía, música, vídeo, texto…). Es mediante la extensión 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 Extensión 1
  • 2. 5. Ver las extensiones de archivo en Windows Si cambiamos la extensión 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: Windows Vista / 7: Herramientas  Opciones de carpeta Organizar  Opciones de carpeta y búsqueda  Pestaña “Ver”  Quitar el “click” de la opción “Ocultar las extensiones de archivo para tipos de archivo conocidos” 2
  • 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 Aplicación Extensiones .doc (documento) Word .dot (plantilla) .xls (documento) Excel .xlt (plantilla) .xla (complemento) .ppt (presentación) .pps (presentación, autoarranque) PowerPoint .pot (plantilla) .sld (diapositiva) .mdb (base de datos) (.accdb en Office 2007/2010) Access .mde (base de datos ejecutable)(.accde en Office 2007/10) Con la publicación 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 extensión. Así que un documento elaborado con Word 2010 se guardaría con la extensión .docx, una hoja de cálculo diseñada con Excel 2010 se guardaría como .xlsx, etc. También en la versión 2010 de Office, si insertamos macros en cualquier documento, deberá ser guardado con una “m” al final de la extensión, en vez de la típica “x”. Por ejemplo, una hoja de cálculo de Excel 2010 que contenga macros será guardada con la extensión .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 aplicación de Office, debemos elegir una para hacer nuestras primeras pruebas. Bastará con abrir un archivo cualquiera de Microsoft Excel que contenga información.  En la tira de opciones debemos pasar a la “pestaña” Vista.  En ella encontramos en última posición el botón/desplegable “Macros”.  Desplegándolo elegiremos “Grabar macro”:  Aparece ahora una ventana que en la que se nos solicita diferente información: 3
  • 4. Nombre de la macro: En este nombre no pueden utilizarse espacios, eñes, tildes, ni caracteres “extraños” como %, &, /… Sin embargo sí que puede utilizarse la “barra baja” (_) para separar diferentes palabras.  Método abreviado: Combinación de teclas que puede utilizarse para ejecutar la macro posteriormente. Se recomienda no elegir una combinación de tipo Ctrl + “tecla”, ya que el propio Office tiene la mayoría de ellas asignadas ya a alguna operación. Es preferible elegir una combinación del tipo Ctrl + Mayus + “tecla”.  Descripción: Aquí con total libertad podemos escribir un texto largo que describa qué hace la macro, cuando fue grabada… o cualquier tipo de información que más adelante podrá ser consultada. Cuando hacemos click sobre el botón “Aceptar” comienza la grabación de la macro: el ordenador guarda cada uno de los pasos que hagamos dentro de la aplicación (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 podrían hacer que nuestra macro se ejecute de forma mucho más lenta, o incluso llegue a fallar. Se recomienda incluso crear un pequeño “guión” de los pasos antes de grabar la macro, de forma que durante la grabación no tengamos ninguna duda. Una vez terminada la grabación podemos detenerla de dos formas diferentes: Desplegando el botón “Macros” y eligiendo la opción “Detener grabación” Más sencillo y “a mano”: podemos utilizar el botón “detener” que aparece en la barra de estado (en la parte inferior de la aplicación, en este caso Excel) Una vez grabada la macro podrá ejecutarse utilizando la combinación de teclas especificada anteriormente. También existe la opción de crear un botón que ejecutará dicha macro en la barra de herramientas personalizada (encima del “menú Archivo”, la pestaña de color que encontramos en la parte superior izquierda de cualquier aplicación de Office 2010). 4
  • 5. Para ello en primer lugar pulsaremos sobre el “menú Archivo” para luego pulsar el botón “Opciones” y por último situarnos en “Barra de herramientas de acceso rápido”.  Ahora en el desplegable de la izquierda (“Comandos disponibles en”) elegimos “Macros”.  En el desplegable de la derecha (“Personalizar barra de herramientas de acceso rápido) podemos elegir: o “Para todos los documentos (predeterminado)”: El botón que vamos a crear estaría disponible siempre en Excel, independientemente del documento con el que estemos trabajando. o Sin embargo si elegimos la otra opción el botón sólo estará disponible en el archivo en el que estamos trabajando.  Ya sólo nos quedaría pulsar en el botón “Modificar” para elegir la imagen que se verá en el botón. 5
  • 6. 8. Guardar como “archivo con macros” En Office 2003 un documento con o sin macros tiene la misma extensión. Por ejemplo: un documento de Word se guardará con la extensión .doc, tanto si contiene macros como si no. Sin embargo en Office 2010 por seguridad los documentos con macros deben guardarse con la extensión correspondiente a la aplicación con la que los creamos, pero añadiendo una “m” al final. Así, un documento de Excel que no contiene macros se guardaría con la extensión .xlsx, mientras que si contiene macros debe guardarse con la extensión .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 diálogo siguiente: Ahora aparecerá el cuadro de diálogo “Guardar como”, donde deberemos abrir el desplegable “Guardar como tipo” en la parte inferior y elegir “Libro de Excel habilitado para macros”: 6
  • 7. 9. Seguridad de macros Como se ha comentado anteriormente al estar basadas las macros en un lenguaje de programación bastante potente (VBA), podría insertarse código malicioso (virus) en cualquier documento de Office. Por esta razón, 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 botón “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, vínculos a lugares en Internet, etc.) 7
  • 8. Otra forma de llegar sería a través del menú Archivo  Opciones. Luego elegiríamos “Centro de confianza” y pulsamos en el botón “Configuración 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 sección “Configuración 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, podríamos 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. 8
  • 9. 10. El listado de macros. El IDE de VBA ¿Y si queremos eliminar alguna macro ya grabada? ¿O modificar su combinación de teclas, o su descripción? Para ello podemos acceder al listado de macros: de nuevo en la pestaña “Vista”, desplegando el botón “Macros”, elegimos la opción “Ver macros” Aparecerá ahora una ventana en la que disponemos del listado de macros ya grabadas. • Con el desplegable “Macros en” podemos visualizar sólo las macros grabadas en el documento actual (“Este libro”), o bien las macros que funcionarían en cualquier documento, o pertenecientes a otros documentos abiertos (“Todos los libros abiertos”). • Con el botón “Eliminar” borramos la macro seleccionada en la lista. • Con el botón “Opciones” podemos cambiar la combinación de teclas o descripción de la macro seleccionada. • Con el botón “Ejecutar" ejecutaríamos la macro seleccionada (aunque hay formas más sencillas de ejecutarla, con la combinación de teclas, o si hemos creado un botón en la barra de herramientas de acceso rápido) Por último, si pulsamos el botón “Modificar” Office nos lleva al IDE de VBA. Aquí realmente podemos ver como ha quedado grabada nuestra macro: son un montón de líneas de código ahora totalmente incomprensibles para nosotros, pero que según avancemos en este módulo 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 programación, así como testearlos y depurarlos de una forma cómoda. Para salir del IDE de VBA simplemente cerramos su ventana, ya que volveremos a la aplicación de Office en la que estábamos (en este caso Excel). 9
  • 10. 11. La “pestaña” Programador Existe una pestaña/ficha en la tira de opciones que por defecto está oculta, pero nosotros vamos sin duda a necesitarla: se trata de la pestaña “Programador”. Para mostrarla debemos ir al menú Archivo de la parte superior izquierda de la aplicación (en este caso Excel). Allí elegiremos “Opciones”  “Personalizar la cinta de opciones” y basta con marcar la opción “Programador” de la columna derecha. Al pulsar en “Aceptar” podemos comprobar como efectivamente ha aparecido una nueva “pestaña” llamada “Programador” en la cinta de opciones, con un montón de herramientas que con seguridad a lo largo de este módulo nos serán de mucha utilidad: 10
  • 11. Introducción a la programación en VBA 1. Nuestro primer programa: “Hola, mundo” Es ya una tradición que cuando alguien comienza a estudiar cualquier lenguaje de programación 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 inglés). Por supuesto nosotros no podemos dejar de cumplir esta tradición… ¡Vamos allá! 1. Abrimos Excel con una hoja de cálculo 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 “pestaña Programador” de la cinta de opciones. Si no se ve esta pestaña en el punto 11 ya hemos explicamos como mostrarla. 3. En la segunda sección, “Controles”, desplegamos “Insertar”. Dentro de la segunda categoría, “Controles ActiveX”, elegimos el primero “botón”. 4. El puntero del ratón se convierte ahora en una cruz, y arrastrándolo sobre nuestra hoja de cálculo podemos dibujar un rectángulo, que al soltar el ratón se convertirá en un botón. 5. Una vez dibujado el botón debemos asegurarnos de que queda seleccionado (lo notaremos porque esta rodeado de “bolitas blancas”). Si no es así debemos asegurarnos de que el botón “Modo diseño” está “apretado”, y entonces hacer un solo click sobre el botón recién dibujado, para seleccionarlo. 6. Hacemos doble-click sobre el botón seleccionado. Llegaremos al IDE de Visual Basic, y nos encontraremos entre dos líneas de código ya escritas (aparecen en negrita a continuación). Nosotros debemos escribir simplemente una línea, 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 botón hay que desactivar el “Modo diseño”, pulsando en el botón con este nombre, que quedará “suelto”. Ahora al pulsar en nuestro flamante botón el ordenador debería ya saludarnos. ¡Enhorabuena! Acabas de hacer tu primer programa en VBA. 11
  • 12. 2. Programación Orientada a Objetos (POO) VBA es un lenguaje de programación orientado a objetos (en inglés Object Oriented Programming, OOP). ¿Qué significa esto? Estos tipos de lenguajes hacen uso de las siguientes características:  Clases  Objetos  Propiedades  Métodos  Eventos Veamos que significa cada una de ellas, trabajando siempre con un “ejemplo ficticio” escrito en pseudocódigo, para intentar comprender cada concepto:  Clases: Una clase es el “esqueleto” para definir más adelante todos los objetos que queramos. La clase contiene las propiedades, métodos y eventos comunes. Después cada objeto podrá ser “personalizado” añadiendo propiedades, métodos o eventos exclusivos para él. Clase “Coche”:  Propiedades: o Marca o Color o Combustible  Métodos: 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 están basados en clases, de las que “heredan” las propiedades, métodos 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 después el nombre de la propiedad en cuestión: 12
  • 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 después de otro. o Los textos o “cadenas de caracteres” (strings en ingles) deben encerrarse entre dobles comillas. o La instrucción de VBA MsgBox muestra un cuadro de dialogo (ventana “sencilla”) que contiene el mensaje que deseemos en su interior. Ejemplo: MsgBox “Hola “ & “Dani” VBA mostraría un cuadro de dialogo con el texto “Hola Dani” en su interior Obsérvese 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.  Métodos: Un método es una “orden” que damos a un objeto. El objeto conoce dicha “orden” y ejecutara las acciones correspondientes (que habrán sido programadas por nosotros) Declarar_metodo CocheLaura.Arrancar () Sentarse en asiento del conductor Ponerse el cinturón 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 método se escribe el nombre del objeto, seguido de un punto (.) y después el nombre del método: CocheLaura.Arrancar()  Eventos: Es una acción que “ocurre sobre un objeto”, ante la cual sabe “reaccionar”, y ejecuta un código. 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 después el nombre del evento: DeclararEvento CocheJavi_SeAcabaCombustible () Encender luz del piloto de reserva Si no hay ni gota de combustible: parar el motor FinEvento 13
  • 14. Tanto los métodos como los eventos pueden recibir parámetros o argumentos, que de alguna forma modifican el comportamiento del código. En VBA los parámetros que “espera” recibir un método o evento se especifican en su declaración, entre paréntesis después del nombre del método/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 “pequeño y simple” programa “Hola, mundo”: Con el botón “Modo diseño” “apretado” hacemos un solo click sobre el botón que dibujamos. Quedara seleccionado, con sus “bolitas blancas” alrededor. Ahora, en la tira de opciones, junto al botón “Modo diseño” encontramos otro botón “Propiedades”: lo pulsamos. Aparecerá una ventana que nos permite modificar las propiedades de nuestro botón “en tiempo de diseño” (es decir: sin que el programa se esté ejecutando). La primera propiedad es la más importante: se trata de “Name” o el nombre del botón. Es muy importante establecer un buen nombre para cada objeto que dibujemos o declaremos, ya que mas tarde al escribir código tendremos que referirnos siempre a este nombre. Si “nos olvidamos” de cambiar el nombre y lo hacemos mas tarde, cuando ya hay mucho código escrito, puede ser una autentica locura “arreglar el estropicio”. Por eso vamos a cambiar ahora el nombre del botón, 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 discusión sobre esto. Si en un nombre hay mas de una palabra podemos separarlas con la barra baja ( _ ) o bien utilizando mayúsculas y minúsculas. Por ejemplo: PrimerApellido o segundo_apellido. 14
  • 15.  No utilizar eñes, tildes, o “caracteres extraños”. Las eñes y tildes, aunque en un PC con Windows en castellano pueden funcionar, en un PC con Windows en otro idioma podrían dar muchos problemas. Los “caracteres extraños”… muchos de ellos sencillamente están “prohibidos”, como: * / % ( ) [ ] + - , ; : & “ ‘ Asi que para “no andar con dudas” de cuales pueden utilizarse y cuales no… pues no utilizamos ninguno y ¡listo!  La notación hungara ¿Por qué hemos puesto las letras “cmd” antes del nombre del botón (“Saludar”)? Si a un control le llamamos simplemente “Saludar” al verlo dentro de nuestro código no sabríamos que tipo de control es: si es un botón, una lista desplegable, una ventana... La notación húngara 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 código. En este modulo utilizaremos la notación húngara solamente para los controles, y estos son los prefijos más habituales: Prefijo Control frm Formulario lbl Label txt TextBox fr Frame cmd CommandButton opt OptionButton chk CheckBox img Imagen (mapa de bits) Si ahora, después de cambiar el nombre de nuestro botón 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 solución entre todos a este problema. Así que ya sabéis: a partir de ahora… ¡¡ MUY IMPORTANTE !! Al terminar de “dibujar” un control, la primera operación 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 más para mejorar el “aspecto” de nuestro botón:  Caption: Es el texto que aparece dentro del botón, que ahora es un triste “CommandButton1”. Pongamos algo más descriptivo de lo que el botón hace, como por ejemplo “Salúdame”. En esta propiedad puede escribirse texto con total libertad, utilizando espacios, tildes, eñes, y cualquier carácter que necesitemos.  Font: En esta propiedad, pulsando el botón […] podemos elegir el tipo de letra, tamaño… para el texto que aparece dentro del botón.  ForeColor: Es el color “de frente” (foreground en inglés). En este caso es el color para el texto que aparece dentro del botón. 15
  • 16.  BackColor: Es el color “de fondo” (background en inglés). Es el color del botón. Ahora nuestro botón es mucho más 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 botón “parecido” al que ya tenemos deberíamos 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 botón “cmdSaludar” con un solo click (el botón “Modo diseño” debe estar apretado). Una vez veamos las “bolitas blancas” alrededor copiamos el control al portapapeles, pulsando el botón derecho del ratón y eligiendo la opción “Copiar” del menú contextual, o bien pulsando la combinación de teclas Ctrl + C (mucho más fácil y rápido).  Des-seleccionamos el botón, pinchando en cualquier celda de nuestra hoja de calculo. Entonces pulsamos el botón derecho del ratón y elegimos la opción “Pegar” del menú contextual, o bien utilizamos la combinación de teclas Ctrl + V (mucho más fácil y rápido).  Ahora en el la “copia del botón” no podemos olvidarnos de cambiar su nombre (Name). Le pondremos “cmdRecoger”. También cambiamos su Caption, escribiremos “Recoger”. Vamos a copiar ahora de nuevo el botón que acabamos de crear, “cmdRecoger”, pero esta vez lo haremos de una forma algo diferente, para que elijáis la que más os guste u os parezca más cómoda:  Seleccionamos el botón “cmdRecoger” con un solo click (el botón “Modo diseño” debe estar apretado). Una vez veamos las “bolitas blancas” alrededor comenzamos a moverlo a otro lugar, arrastrándolo.  Antes de soltar el botón izquierdo del raton pulsamos la tecla Ctrl, veremos que al lado del puntero del raton aparece un símbolo [+]. Si ahora soltamos el botón izquierdo del ratón (sin soltar la tecla Ctrl)… et voila! Ya hemos duplicado nuestro botón… Ahora ya puedes soltar la tecla Ctrl, no vaya a ser que cojas agujetas ;)  No olvidemos cambiar el nombre (Name) del nuevo botón, le pondremos “cmdSumar1”. Tambien cambiamos su Caption, escribiendo simplemente el símbolo “+”.  Ahora haz por tu cuenta una copia de este ultimo botón, ponle el nombre (Name) “cmdRestar1” y como Caption el símbolo “-“.  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”. 16
  • 17. Nuestro “interfaz” debería 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 mayoría de los programas “serios” trabajaremos con datos que irán 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 información que nos interese. La información se guarda con una asignación, de la siguiente forma: NombreVariable = Valor a guardar Vamos a probar esto programando el botón “cmdRecoger”. Con el “Modo diseño” activado, haz doble-click sobre él, con lo que llegamos al IDE de VBA, y aparecemos ya dentro del evento click del botón, con lo que vamos a programar que ocurre al pulsar el botón. Solo debes escribir dos líneas de código: Private Sub cmdRecoger_Click() Numero = 8 + 2 MsgBox “El número es: “ & Numero End Sub  La primera línea es una asignación, 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: evalúa la expresión 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 línea utilizamos la instrucción 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 diseño” y probar el botón, que debería mostrar un cuadro de dialogo como este: 17
  • 18. 6. La importancia de declarar las variables Podríamos decir que en nuestro programa estamos declarando implícitamente la variable “Numero”. ¿Qué significa esto? La variable “Numero” no existía, el ordenador la crea cuando le pedimos que guarde “8 + 2” en su interior. Este tipo de declaración es muy cómoda, pero puede traernos serios problemas y “dolores de cabeza”. Vamos a hacer una prueba que os dejara claro de que hablamos: Con el “Modo diseño” activado, hagamos doble-click sobre el botón “cmdRecoger”, con lo que llegamos al IDE de VBA, y modificamos el código: Cambiamos: MsgBox “El número es: “ & Numero Por: MsgBox “El número es: “ & Numer (Hemos borrado la “o” de “Numero”) Salgamos del IDE de VBA, desactivemos el “Modo diseño” y probemos el botón “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 ningún error, simplemente “intenta” visualizar la variable “Numer” y como no existe… pues no muestra nada. Esto en un programa mas “serio” o complejo podría darnos muchos dolores de cabeza, hasta que averigüemos que nos hemos olvidado de la “o” de marras :P Activemos de nuevo el “Modo diseño” y hagamos doble-click sobre el botón “cmdRecoger”, llegando de nuevo al código. Ahora hay que colocarse en la primera línea, arriba del todo, y escribir lo siguiente: Option Explicit Salgamos del IDE, desactivemos el “Modo Diseño” y volvamos a probar el botón. ¿Qué ocurre ahora? Esta vez VBA nos da un error de compilación: “no se ha definido la variable”. Además nos marca la línea de código en la que intentamos almacenar “8 + 2” en Numero. Al pulsar el botón “Aceptar” de la ventana de error VBA nos resalta la línea donde hemos tenido un problema, y el programa queda “pausado”. Para poder hacer cualquier modificación en el programa en primer lugar debemos “detenerlo del todo”. Y eso lo hacemos pulsando el botón de “stop” en la barra de herramientas superior. 18
  • 19. Al añadir la línea “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 fácilmente posibles errores posteriores de tecleado. Muy bien, pero ¿cómo se declara una variable? Option Explicit Private Sub cmdRecoger_Click() Dim Numero As Single Numero = 8 + 2 MsgBox “El número es: “ & Numero End Sub Ahora volvemos a probar nuestro programa. ¿Qué ocurre? ¿El error que nos da VBA es el mismo de antes? ¿Cómo podemos arreglarlo? ¿Entendéis ahora por qué y cómo nos ayuda exigir la declaración de variables con “Option Explicit”? Comentad todo esto entre vosotros y con el profesor. No os preocupéis si ahora mismo no entendéis del todo la línea que hemos añadido, la explicaremos con detalle en un apartado posterior. En resumen: ¡¡ MUY IMPORTANTE !! Asegurarse siempre de que en la primera línea de nuestros programas esta la instrucción “Option Explicit” Como es posible que en algún momento se nos pueda olvidar esto, podemos configurar el IDE de VBA para que automáticamente se añada esta línea 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 pestaña “Editor” debemos marcar la opción “Requerir declaración de variables”: 19
  • 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 utilizábamos “Option Explicit” al principio de nuestro programa. Declarar una variable es cómo “crear” una “caja” en la que después guardaremos cierta información. Y bien… ¿y cómo 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 sólo puede tomar dos valores: true (“verdadero”) o false (“falso”)  String: Cadena de caracteres o “texto”  Número: o Enteros: Son los números que no admiten parte decimal. Tenemos los siguientes tipos:  Byte: Para almacenar un número desde 0 hasta 255  Integer: Para almacenar un número desde -32.768 hasta 32.767  Long: Para almacenar un número desde -2.147.483.648 hasta 2.147.483.647 o Reales: Son los números que pueden tener parte decimal. Tenemos los siguientes tipos:  Single: Número con coma flotante, desde -3,402823 . 1038 hasta -1,401298 . 10-45 para valores negativos y desde 1,401298 . 10-45 a 3,402823 . 1038 para valores positivos.  Double: Número con coma flotante, desde -1,79769313486231 . 10308 hasta -4,94065645841247 . 10-324 para valores negativos y desde 4,94065645841247 . 10-324 hasta 1,79769313486232 . 10308 para valores positivos.  Currency: Número con coma fija, utilizado para cálculos con valores monetarios. Permite almacenar un número 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 botón “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 botón “cmdSumar1” muestre en pantalla, también mediante un MsgBox, la misma variable, “Numero”. Para conseguirlo hacemos doble-click (con el “Modo diseño” activado) sobre el botón “cmdSumar1”, y escribimos el siguiente código Private Sub cmdSumar1_Click() MsgBox Numero End Sub 20
  • 21. Para probar nuestro programa en primer lugar desactivamos el “Modo Diseño”. Ahora pulsamos el botón “Recoger” y por supuesto, se nos muestra el contenido de la variable “Numero”, es decir: 10. Si ahora pulsamos el botón “cmdSumar1”… ¿qué pasa? La variable “Numero” la estamos declarando (con la sentencia Dim … As) “dentro” del código del botón “cmdRecoger”. Lo que ocurre es que esta variable sólo existe dentro de este botón, cuando el botón “cmdSumar1” intenta acceder a ella ya no existe. ¡¡ MUY IMPORTANTE !! Cuando declaramos una variable dentro de un Sub o Function dicha variable sólo existe y puede utilizarse dentro de ese Sub o Function. Se dice que la variable tiene un ámbito local. ¿Y cómo conseguir que los otros botones (“cmdSumar1” y “cmdRestar1”) “vean” la variable “Numero”? Sencillo: declarándola al comienzo de nuestro programa, fuera de todos los “Subs”. Para conseguirlo movemos el código “Dim Numero As Single” desde el “Private Sub cmdRecoger_Click()” hasta el comienzo de nuestro programa, justo después de “Option Explicit” Probemos otra vez el programa, haciendo click primero en el botón “cmdRecoger” (nos mostrará “10”), y ahora haciendo click en el botón “cmdSumar1”, que también debería 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 botón “cmdSumar1” la variable “Numero” “suba” una unidad, pasando de ser 10 a ser 11. ¿Cómo podemos conseguirlo? Añadiendo la siguiente línea de código al botón “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 botón “cmdRecoger”, y después ya podéis hacer click todas las veces que queráis sobre el botón “cmdSumar1”, el número que nos muestra el ordenador debe ir “subiendo”. La línea de código “Numero = Numero + 1” matemáticamente podría parecernos una estupidez, puesto que si intentamos “resolver la ecuación” tendríamos 0 = 1, una locura. Pero hay que tener en cuenta que no se trata de una ecuación, sino de una instrucción de asignación, 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 podríamos programar el botón “cmdRestar1”, que es muy parecido a este, sólo que en vez de sumar 1, resta 1. Intentad hacerlo… 21
  • 22. 10. Leer y escribir información de celdas en la hoja de cálculo No está nada mal nuestro primer programita… pero estaría mejor si en vez de “empezar” siempre en 10 fuese capaz de “leer” cualquier número que escribamos en una celda de nuestra hoja de cálculo… Concretamente, haremos nuestras pruebas leyendo el valor escrito en la celda D6. En el código correspondiente al botón “cmdRecoger” eliminamos la línea “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 número (el que nos apetezca) en la celda D6 y después pulsamos el botón “cmdRecoger”. El programa debería mostrarnos el número que hemos escrito en D6.  Range es un objeto de Excel que representa a un rango de celdas, el escrito entre paréntesis, 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 ¿cómo podemos escribir en una celda? Vamos a intentarlo con el botón “cmdSumar1”, hay que borrar la línea “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 instrucción de asignación, 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. Después de probar que este cambio funciona como debiera… programad vosotros el botón “cmdRestar1”, para que haga lo mismo. 11. Otras propiedades del objeto Range Vamos a “inaugurar” una nueva celda para hacer más 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, tamaño de letra, color de letra y fondo… a lo que os apetezca. 22
  • 23. Ahora queremos que el botón “cmdRecoger” aplique a esta celda como tamaño de letra el número que haya escrito en la celda D6. Para ello, en el código del botón “cmdRecoger” vamos a eliminar el MsgBox (que era un mensaje de prueba, y ya no es necesario), y añadir una línea de código 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 número (por ejemplo: 28) en la celda B8, y pulsando después el botón “cmdRecoger”. El “texto de prueba” debería inmediatamente tomar el tamaño escrito (28 puntos, en nuestro ejemplo) En Excel el objeto Range tiene una propiedad llamada “Font” que establece el “aspecto” de la letra: fuente, tamaño, cursiva, negrita, subrayado, etc. Concretamente nosotros cambiamos el tamaño de la letra utilizando la propiedad “Size”. Ahora vamos a copiar la línea de código Range("B8").Font.Size = Numero a los botones “cmdSumar1” y “cmdRestar1”, justo al final del código, antes de End Sub. De esta forma al pulsar los botones “cmdSumar1” y “cmdRestar1” el tamaño de nuestro “Texto de prueba” irá creciendo/disminuyendo en pasos de 1 punto. Reto Nuestro pequeño programa presenta un par de problemas, que quizás aún no hemos detectado:  Escribid en la celda D6 el número “0”. Pulsad el botón “cmdRecoger”. ¿Qué ocurre?  Lo mismo pasaría si dejamos la celda D6 vacía, o escribimos algo que no es un número, por ejemplo “perrito”. Este problema se puede arreglar de forma sencilla, sin utilizar programación. Este es vuestro “reto de hoy” Pista: Buscad en la pestaña “Datos” de la tira de opciones… 23
  • 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 cálculo: El nuevo botón 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 tenéis los suficientes conocimientos para hacer frente a este problema, así que… ¡adelante! Hasta este momento el ordenador interpreta y ejecuta nuestro código de forma continua, “leyéndolo” línea a línea, y de arriba abajo. Pero en cualquier programa “serio” llega un momento en que un fragmento de código hay que ejecutarlo condicionalmente, es decir: sólo si se cumple cierto criterio o condición. Es entonces cuando necesitamos la estructura If … Then: If Pregunta Then Código “Sí” OPCIONAL Else OPCIONAL Código “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 código diferente. El “camino del No” es opcional, es decir: puede omitirse el “Else” si no hay “nada especial que hacer” cuando nos responden “No”. 24
  • 25. Lo más complicado de esta estructura es la “pregunta” (criterio o condición). En ella se suelen utilizar operadores de comparación, los más comunes son: Descripción Operador Ejemplo Si el usuario es de Vitoria… Igual que = If Ciudad = “Vitoria” Then… Si el cliente no paga con tarjeta… Diferente de <> If FormaPago <> “Tarjeta” Then… Si el usuario es mayor de edad… Mayor que > If EdadUsuario >= 18 Then… Mayor o igual que >= Si el alumno ha suspendido… Menor que < If Nota < 5 Then… Menor o igual que <= Vamos a aplicar esto en nuestro ejercicio: al pulsar el botón “cmdComparar” el ordenador debe decirnos si los números “A” y “B” son iguales o diferentes. 13. Más de dos caminos: ElseIf o Select Case Hemos visto cómo la estructura If…Then…Else…End If es útil cuando tenemos “dos caminos” posibles, pero… ¿qué ocurre si hay más de dos? En este caso podemos “completar” el ya explicado If con ElseIf, de esta forma: If Pregunta1 Then Código “Sí 1” ElseIf Pregunta2 Then Código “Sí 2” … más preguntas … OPCIONAL Else Código “No” End If 25
  • 26. Existe otra solución equivalente, utilizando la estructura Select…Case, de la siguiente forma: Select Case Evaluar Case Expresión_Camino_1 … Código camino 1 … Case Expresión_Camino_2 … Código camino 2 … … (más caminos) … Case Else … Código “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: Descripción Operador Ejemplo Valor(es) fijo(s) Si el usuario es de Vitoria, o de Bilbao, o de Igual a (si son varios separados por Pamplona… comas) Case “Vitoria”, “Bilbao”, “Pamplona” Si la edad está entre 18 y 25 años… Está entre X e Y X To Y Case 18 To 25 Mayor (o igual) que Si el sueldo es mayor que 600 €… Menor (o igual) que Is expresión Case Is > 600 Vamos a aplicar lo aprendido en nuestro ejercicio práctico: ahora el botón “cmdComparar” debe darnos diferentes mensajes, dependiendo de:  Si el número A es mayor que el B  Si el número A es menor que el B  Si ambos números son iguales Una vez funcione esto, crearemos un nuevo botón “cmdCompararCase” que hará el mismo trabajo, pero utilizando la estructura Select…Case 14. Varias “condiciones”: AND y OR Hay ocasiones en que las “preguntas” de un If son más complicadas que las que hemos visto hasta ahora, están 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 sólo una de las condiciones. 26
  • 27. Vamos a preparar un nuevo ejercicio para practicar esto, debemos crear la siguiente estructura en nuestra hoja de cálculo: Ejercicio 1 Sólo vamos a hacer descuento a los clientes mayores de edad que vivan en “Bilbo”. Al pulsar el nuevo botón “cmdDescuento” debe aparecer un MsgBox que nos diga si hay descuento o no. Ejercicio 2 Al pulsar el botón “cmdEuskadi” si la ciudad es “Gasteiz”, “Bilbo”, “Donosti” o “Iruña” debe aparecernos un MsgBox que nos diga que somos euskaldunes. Si no somos de ninguna de esas ciudades aparecería 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 podría llevarnos a “confusiones”: habrá gente que ponga “Vitoria”, otros “Gasteiz”, o alguien puede equivocarse y escribir por ejemplo “Gazteiz”. Esto haría que nuestro “pequeño 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 ratón, y así no tenga que “teclearla”, evitando posibles errores como los descritos anteriormente. Crear un “desplegable” que contenga las siguientes ciudades: “Gasteiz”, “Bilbo”, “Donosti”, “Iruña”, “Madrid” y “Barcelona”. Evitar que se escriba cualquier ciudad que no esté en este “desplegable”. “Pista”: No hace falta programar. Buscar en la pestaña “Datos” de la tira de opciones de Excel. 27
  • 28. 15. “Repitiendo”: For…Next En muchas ocasiones es necesario repetir un “trozo” de código muchas veces, además de llevar de alguna forma la cuenta de “cuantas veces hemos repetido ya”. Para ello en VBA existe la estructura For…Next. For Contador = Inicio To Fin Step Paso Contador = Inicio Código a repetir Next Contador SÍ ¿Contador ha superado ya Fin? NO Código a repetir Incrementar Contador con Paso El programa continúa Para poner en práctica esto vamos a preparar un nuevo ejercicio, creando la siguiente estructura en nuestra hoja de cálculo: Al pulsar el botón “cmdRepetir” el ordenador primero leerá “Inicio”, “Fin” y “Paso” (celdas C18, C19 y C20) y mostrará estos datos en un MsgBox 28
  • 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 página aparecería algo así: … “Reto” Es un poco “incómodo” que en cada número de la “cuenta” tengamos que hacer click en el botón “Aceptar” del MsgBox. En vez de utilizar un MsgBox para mostrar cada número de la “cuenta” vamos a intentar que los números aparezcan de forma consecutiva en una celda, por ejemplo en C22, de esta forma: ¿Podríamos con nuestro programa “hacer una cuenta atrás”? ¿Cómo? 29
  • 30. 16. Repetimos, pero no sabemos cuántas veces: Do While…Loop En ocasiones es necesario repetir un trozo de código, pero no sabemos exactamente cuantas veces será necesario repetirlo, lo hacemos mientras (while en inglés) se cumpla una condición. NO ¿Se cumple la condición? Do While Condición Código a repetir SÍ Loop Código a repetir El programa continúa En este caso hay que tener mucho cuidado para no entrar en un bucle infinito, en el que la condición nunca deja de cumplirse y por tanto el ordenador se quedará repitiendo el código de forma infinita. En realidad lo que ocurre es que el programa “se cuelga” (en este caso Excel), con lo que deberíamos cerrarlo con el administrador de tareas (pulsando Ctrl+Alt+Supr y finalizando Excel), con lo que perderíamos todos aquellos cambios que no hayan sido guardando. Por ello a partir de este momento tendremos mucho cuidado y guardaremos siempre la hoja de cálculo 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 “código a repetir” debe existir “algo” que consiga que en un momento determinado la condición deje de cumplirse, para que así el ordenador “salga” del bucle. Para poner en práctica estos conceptos vamos a crear un nuevo botón, al que llamaremos “cmdAdivina”, en nuestra hoja de cálculo: 30
  • 31. Al pulsar este botón 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 botón “cmdAdivina”, el código 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. ¿Cuál crees que es?") Loop End Sub A continuación explicamos el objetivo y funcionamiento de este código:  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 aún no hemos comenzado el juego, contiene “nada” (cadena vacía, “”).  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 repetición 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 podríamos mejorarlo en muchos aspectos, y todas las mejoras que ahora vamos a proponerte servirán para repasar conceptos ya explicados y para que vayas cogiendo confianza y educando tu “mente de programador”:  Si escribimos “rojo” (ojo, ¡en minúsculas!)… ¿qué ocurre? ¿cómo podemos arreglarlo?  Ahora la única forma de terminar el juego es “ganando”. Podríamos terminar el juego porqué nos “hemos aburrido” y no queremos seguir jugando. Para ello pulsaremos el botón “Cancelar” cuando el ordenador nos pregunta un nuevo color (o bien pulsaremos “Aceptar” sin escribir ningún color).  Al terminar el juego estaría 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 número de intentos que utiliza cada jugador para adivinar el color, en la celda C24. 31
  • 32. Vamos ahora a almacenar el “record del día” en la celda C25, es decir: el menor número de intentos utilizados para adivinar el color.  ¿Podríamos además 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 podía 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 inglés). 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 numérico, que expresa la posición 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 cajón colocamos una etiqueta con un número, que sería el índice, y nos ayudaría a “localizar” un cajón en concreto. Índice Contenido 1 “Lunes” 2 “Martes” 3 “Miércoles” 4 “Jueves” 5 “Viernes” 6 “Sábado” 7 “Domingo” Muy bien, pero… ¿cómo se declara una matriz en VBA? ¿y cómo se “escribe” en cada uno de los cajones, o como se “recupera lo que hay dentro” de cada cajón? Declarar una matriz Dim NombreMatriz (PrimerCajon To UltimoCajon) As TipoDatos Por ejemplo: Dim Semana (1 To 7) As String Guardar información en una matriz NombreMatriz(NumeroCajon) = InformacionAGuardar Por Ejemplo: Semana(1) = “Lunes” Semana(7) = “Domingo” 32
  • 33. Recuperar información de una matriz NombreMatriz(NumeroCajon) NOTA: por supuesto habrá que “hacer algo” con esta información Por ejemplo: MsgBox “El tercer día de la semana es el “ & Semana(3) Pongamos ahora todo esto en práctica, para ello preparemos la siguiente estructura en nuestra hoja de cálculo: Ejercicio 1 Si escribimos por ejemplo “3” en la celda C27 y pulsamos el botón “Traducir día” (“cmdSemana”)… debería aparecer la palabra “Miércoles” en la celda C28. Ejercicio 2 Queremos que en la celda C29 aparezca el mismo día de la semana, pero en Euskera. Os ayudamos, por si tenéis “oxidado” el euskera: Castellano Euskera Lunes Astelehena Martes Asteartea Miércoles Asteazkena Jueves Osteguna Viernes Ostirala Sábado Larunbata Domingo Igandea 33
  • 34. 18. Moviéndonos por la hoja de cálculo (método Offset, objeto Range) Ya hemos conocido durante los ejercicios anteriores uno de los objetos más 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 muchísimas veces su propiedad Value, con la que podemos leer/escribir en el interior de una celda. También en algún momento hemos utilizado su propiedad Font, con sus sub- propiedades Size y Color, que nos permiten modificar el tamaño de la letra, o su color. Pues bien, ahora vamos a conocer el método Offset, que permite desplazar un rango para que ocupe una posición diferente a la inicial. Desplazamiento vertical: +4 Desplazamiento horizontal: +3 Así, el método Offset se utilizaría 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 método Offset deberíamos 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 asignación es obligatorio utilizar la palabra “Set”. 34
  • 35. Vamos con un ejercicio en el que aplicar el método Offset: Los botones que contienen “flechas” tienen los nombres: cmdArriba, cmdAbajo, cmdIzquierda y cmdDerecha. El botón con el título “Marcar” tiene como nombre cmdMarcar. ¿Qué debe hacer nuestro programa?  Al escribir un rango cualquiera en la celda H7 y pulsar después el botón cmdMarcar debe “marcarse” (hablando bien: seleccionarse) el rango especificado. Para ello debemos utilizar el método Select del objeto Range.  Una vez esta seleccionado el rango en cuestión los cuatro botones con “flechas” deberán desplazarlo en todas direcciones, con “saltos de una celda”. Aquí es donde hará falta el método Offset. 35
  • 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 botón (cmdTablaMultiplicar) debe “dibujarse” la tabla de multiplicar del numero escrito en la celda C31 (en el ejemplo, 5), desde la celda indicada en C32. 36