Introducción a VBA en Office 2010

Resumen: Este artículo sirve de introducción para usuarios que no son programadores de algunas formas básicas de usar la programación de Visual Basic para Aplicaciones (VBA) a fin de ampliar la funcionalidad de Microsoft Office 2010. Incluye una amplia descripción del lenguaje de VBA, algunos detalles clave sobre cómo tener acceso a VBA en distintas aplicaciones de Office 2010, ejemplos simples de programación y algunas aplicaciones de ejemplo (13 páginas impresas).

Última modificación: viernes, 24 de abril de 2015

Hace referencia a: Access 2010 | Excel 2010 | Office 2007 | Office 2010 | Open XML | PowerPoint 2010 | Publisher 2010 | SharePoint Server 2010 | VBA | Word 2010

En este artículo
Programación de VBA en Office 2010
Cuándo y por qué usar VBA
Programación de VBA 101
Sugerencias y trucos de programación
Un paso más adelante en programación
Todas mis aplicaciones de Office 2010: código de ejemplo
Resumen
Recursos adicionales

Applies to:    Microsoft Word 2010 | Microsoft Outlook 2010 | Microsoft Access 2010 | Microsoft Excel 2010 | Microsoft PowerPoint 2010 | Microsoft Publisher 2010

Publicado:   noviembre de 2009

Proporcionado por:   Tim Burnett, Servicios de consultoría informática de Kingfisher

Contenido

  • Applies to:    Microsoft Word 2010 | Microsoft Outlook 2010 | Microsoft Access 2010 | Microsoft Excel 2010 | Microsoft PowerPoint 2010 | Microsoft Publisher 2010Publicado:   noviembre de 2009Proporcionado por:   Tim Burnett, Servicios de consultoría informática de KingfisherContenidoIntroducciónProgramación de VBA en Office 2010Cuándo y por qué usar VBAProgramación de VBA 101Sugerencias y trucos de programaciónUn paso más adelante en programaciónTodas mis aplicaciones de Office 2010: código de ejemploResumenRecursos adicionales

  • Programación de VBA en Office 2010

  • Cuándo y por qué usar VBA

  • Programación de VBA 101

  • Sugerencias y trucos de programación

  • Un paso más adelante en programación

  • Todas mis aplicaciones de Office 2010: código de ejemplo

  • Resumen

  • Recursos adicionales

Programación de VBA en Office 2010

¿Otra vez tiene que limpiar cincuenta tablas en Word 2010? ¿Desea que un documento en particular solicite datos al usuario cuando se abre? ¿No consigue deducir cómo trasladar sus contactos de Microsoft Outlook 2010 a una hoja de cálculo de Microsoft Excel 2010 de manera eficaz?

Puede realizar estas tareas y lograr mucho más mediante el uso de VBA para Office 2010: un lenguaje de programación simple pero efectivo que le permite ampliar aplicaciones de Office 2010.

Este artículo está dirigido a usuarios experimentados de Office que desean obtener información sobre VBA y ver cómo la programación puede ayudarles a personalizar Office 2010.

El conjunto de aplicaciones de Office 2010 ofrece una gran variedad de características. Existen muchas maneras de crear, dar formato y manipular documentos, correos electrónicos, bases de datos, formularios, hojas de cálculo y presentaciones. La cualidad más destacada de la programación de VBA en Office 2010 es que casi todas las operaciones que se pueden realizar con un mouse, teclado o cuadro de diálogo también se pueden realizar a través de VBA. Además, si algo se puede hacer una vez con VBA, se puede hacer fácilmente cientos de veces. (De hecho, la automatización de tareas repetitivas es uno de los usos más comunes de VBA en Office).

Además de la capacidad de scripting de VBA para acelerar las tareas diarias, puede usarse VBA para agregar nuevas funcionalidades a aplicaciones de Office 2010 o para interactuar con los usuarios de documentos de maneras que se ajusten específicamente a sus necesidades empresariales. Por ejemplo, puede escribir algún código de VBA para que un mensaje emergente les recuerde a los usuarios guardar un documento en una unidad de red determinada cuando intentan guardarlo la primera vez.

En este artículo se abordan las principales razones para aprovechar la eficacia de la programación de VBA, así como también el lenguaje de VBA y las herramientas listas para usar que se pueden implementar para trabajar con las soluciones que se disponen. Por último, se incluyen algunos trucos y formas de evitar frustraciones y pasos equivocados que comúnmente se asocian a la programación.

Cuándo y por qué usar VBA

Existen tres razones principales para considerar el uso de la programación de VBA en Office 2010.

Automatización y repetición

VBA es efectivo y eficaz a la hora de implementar soluciones repetitivas ante problemas de corrección o formato. Por ejemplo, ¿alguna vez cambió el estilo de un párrafo en la parte superior de cada página de un documento de Word? ¿Alguna vez tuvo que volver a dar formato a varias tablas de Excel que se pegaron a un documento de Word o correo electrónico de Outlook? ¿Alguna vez tuvo que hacer un mismo cambio en varios contactos de Outlook?

Si hay un cambio que necesita realizar más de diez o veinte veces, posiblemente sea conveniente que lo realice de forma automática con VBA. Si se trata de un cambio que debe realizar cientos de veces, indudablemente merece la pena considerar esta programación. Casi todos los cambios de edición y formato que se pueden realizar manualmente, se pueden realizar en VBA.

Mayor interacción con el usuario

Hay ocasiones en las que desea motivar u obligar a los usuarios a interactuar con el documento o la aplicación de Office 2010 de un modo en particular que no forma parte de la aplicación estándar. Por ejemplo, es posible que desee pedir a los usuarios que realicen una determinada acción cuando abren, guardan o imprimen un documento.

Interacción entre aplicaciones de Office 2010

¿Necesita copiar todos sus contactos de Outlook 2010 a Word 2010 y luego darles un formato determinado? ¿Necesita mover datos desde Excel 2010 a un conjunto de diapositivas de PowerPoint 2010? A veces la tarea de copiar y pegar no permite lograr exactamente lo que se desea o resulta ser una tarea muy lenta. Puede usar la programación de VBA para interactuar con los detalles de dos o más aplicaciones de Office 2010 al mismo tiempo y después modificar el contenido de una aplicación basada en el contenido de otra.

Otra forma de hacer las cosas

La programación de VBA es una solución eficaz, pero no siempre es el enfoque más óptimo. A veces es conveniente implementar otras formas de lograr los objetivos.

La pregunta esencial que se debe formular es si existe una forma más fácil de realizar una tarea. Ante de comenzar un proyecto de VBA, considere la posibilidad de usar las herramientas integradas y las funcionalidades estándar. Por ejemplo, si debe realizar una tarea de diseño o de edición que demanda mucho tiempo, considere el uso de estilos o teclas de aceleración para resolver el problema. ¿Puede realizar la tarea una vez y después usar CTRL + Y (Rehacer) para repetirla? ¿Puede crear un documento nuevo con la plantilla y el formato correctos, y después copiar el contenido en ese nuevo documento?

Las aplicaciones de Office 2010 son eficaces; es posible que la solución que necesita ya se encuentre allí. Dedique algo de tiempo para consultar más información acerca de Office 2010 antes de pasar a la programación.

Antes de comenzar un proyecto de VBA, asegúrese de tener el tiempo necesario para trabajar con VBA. La programación exige suma atención y puede ser impredecible. Especialmente si es principiante, nunca pase a la etapa de programación si no tiene tiempo suficiente como para trabajar con cuidado. Intentar escribir un script con rapidez para resolver un problema cuando una fecha límite se acerca puede generar una situación verdaderamente estresante. Si tiene prisa, es conveniente usar métodos convencionales, aunque sean monótonos y repetitivos.

Programación de VBA 101

Usar código para hacer que las aplicaciones realicen tareas

Quizá considere que la escritura de código es misteriosa y compleja, pero los principios básicos usan la lógica diaria y son bastante accesibles. Casi de la misma forma que un teléfono, las aplicaciones de Office 2010 están creadas de tal modo que exponen lo que se denomina objetos. Estos objetos pueden recibir instrucciones de manera similar a las instrucciones que reciben los botones de un teléfono cuando se interactúa con él. Cada vez que se presiona un botón, el teléfono reconoce la instrucción e incluye el número correspondiente en la secuencia que se está marcando. En programación, se interactúa con la aplicación al enviar instrucciones a varios objetos de la aplicación. Si bien estos objetos son expansivos, tienen límites. Pueden hacer solo aquello para lo que están diseñados y harán solo lo que se les indique.

Por ejemplo, imagine un usuario que abre un documento en Word 2010, hace algunos cambios, guarda el documento y, a continuación, lo cierra. En el ámbito de la programación de VBA, Word 2010 expone un objeto de documento. Al usar el código de VBA, se puede indicar al objeto de documento que ejecute tareas como abrir, guardar y cerrar.

En la siguiente sección se explica cómo se organizan y describen los objetos.

El modelo de objetos

Los desarrolladores organizan los objetos de programación en una jerarquía y esa jerarquía recibe el nombre de modelo de objetos de la aplicación. Word, por ejemplo, tiene un objeto de aplicación de nivel superior que contiene un objeto de documento. El objeto de documento contiene objetos de párrafo y así sucesivamente. Los modelos de objetos básicamente reflejan lo que se ve en la interfaz de usuario. Constituyen un mapa conceptual de la aplicación y sus capacidades.

La definición de un objeto se denomina clase, por lo tanto, es posible que estos dos términos se usen alternativamente. Técnicamente, una clase es la descripción o plantilla que se usa para crear un objeto o para crear una instancia del objeto.

Una vez creado el objeto, es posible manipularlo al configurar sus propiedades y al llamar a sus métodos. Si piensa en el objeto como un sustantivo, entonces las propiedades son los adjetivos que describen al sustantivo y los métodos son los verbos que animan al sustantivo. Cambiar una propiedad es cambiar en cierta forma la calidad de apariencia o comportamiento del objeto. Llamar a uno de los métodos del objeto es hacer que el objeto realice alguna acción.

El código de VBA que se presenta en este artículo se ejecuta en una aplicación abierta de Office 2010 donde varios de los objetos que el código manipula ya están activos y ejecutándose; por ejemplo, los objetos de la aplicación misma, la hoja de cálculo de Excel 2010, el documento de Word 2010, la presentación de PowerPoint 2010, el Explorador y la Carpeta de Outlook 2010. Después de conocer el diseño básico del modelo de objetos y algunas propiedades clave de la aplicación que permiten el acceso a su estado actual, se puede comenzar a ampliar y manipular esa aplicación de Office 2010 con VBA en Office.

Métodos

En Word, por ejemplo, puede cambiar las propiedades e invocar los métodos del documento de Word actual a través de la propiedad ActiveDocument del objeto Application. Esta propiedad ActiveDocument devuelve una referencia al objeto Document que se encuentra actualmente activo en la aplicación de Word. "Devuelve una referencia a" significa "permite el acceso a".

El siguiente código hace exactamente lo que dice, es decir, guarda el documento activo en la aplicación.

Application.ActiveDocument.Save

Lea el código de izquierda a derecha: "en esta Aplicación, con el documento referenciado por ActiveDocument, invocar el método Save". Observe que Save es la forma de método más simple; no requiere que se incluyan instrucciones detalladas. Se indica a un objeto Document que ejecute la tarea Save sin necesidad interactuar más.

Si un método requiere más información, esos detalles se denominan parámetros. El siguiente código ejecuta el método SaveAs, el cual requiere un nombre nuevo para el archivo.

Application.ActiveDocument.SaveAs ("New Document Name.docx")

Los parámetros son los valores indicados entre paréntesis después del nombre de un método. En este ejemplo, el nombre nuevo para el archivo es un parámetro para el método SaveAs.

Propiedades

Para establecer una propiedad y para leer una propiedad se usa la misma sintaxis. El siguiente código ejecuta un método para seleccionar la celda A1 en Excel 2010 y, a continuación, para establecer una propiedad que permita agregar contenido a esa celda.

    Application.ActiveSheet.Range("A1").Select
    Application.Selection.Value = "Hello World"

El primer desafío en la programación de VBA es saber apreciar el modelo de objetos de cada aplicación de Office 2010 y leer la sintaxis de objeto, método y propiedad. Los modelos de objetos son similares en todas las aplicaciones de Office 2010, pero cada modelo es específico al tipo de documento y objeto que manipula.

En la primera línea del fragmento de código, está el objeto Application, esta vez es Excel 2010, después ActiveSheet, que permite el acceso a la hoja de cálculo activa. A continuación, aparece un término no tan familiar, Range, que significa "definir un rango de celdas de este modo". El código indica Range para que se cree con solo A1 como conjunto definido de celdas. En otras palabras, la primera línea del código define un objeto, establece el rango y ejecuta un método para seleccionarlo. El resultado se almacena automáticamente en otra propiedad de Application denominada Selection.

La segunda línea del código establece la propiedad Value de Selection para el texto "Hello World" y ese valor aparece en la celda A1.

El código de VBA más simple que escriba le permitirá tener acceso a los objetos de la aplicación de Office en la que está trabajando y establecer propiedades. Por ejemplo, puede tener acceso a las filas de una tabla en Word y cambiar su formato en el script de VBA. Esto parece simple, pero puede ser increíblemente útil; una vez escrito ese código, podrá aprovechar toda la eficacia de la programación para hacer esos mismos cambios en varias tablas o documentos, o para hacer esos cambios de acuerdo con alguna lógica o condición. Para un equipo, hacer 1.000 cambios es igual que hacer 10. Por lo tanto, hay una economía de escala con problemas y documentos más grandes, y es entonces cuando VBA puede realmente destacar y ahorrarle tiempo.

Macros y el Editor de Visual Basic

Ahora que tiene algunos conocimientos sobre cómo se exponen los modelos de objetos de las aplicaciones de Office 2010, probablemente desee intentar llamar a métodos de objetos, establecer propiedades de objetos y responder a eventos de objetos. Para hacerlo, debe escribir un código en un lugar y de una manera que Office pueda comprender, generalmente, mediante el uso del Editor de Visual Basic. Aunque se instala de forma predeterminada, muchos usuarios ni siquiera saben que está disponible hasta que no se habilita en la cinta de opciones.

Abrir la pestaña Desarrollador

Todas las aplicaciones de Office 2010 usan la cinta de opciones. Una de las pestañas de la cinta de opciones es la pestaña Desarrollador, donde se tiene acceso al Editor de Visual Basic y a otras herramientas de desarrollo. Como Office 2010 no muestra la pestaña Desarrollador de forma predeterminada, debe habilitarla a través del siguiente procedimiento:

Para habilitar la pestaña Desarrollador

  1. En la pestaña Archivo, elija Opciones para abrir el cuadro de diálogo Opciones.

  2. Haga clic en Personalizar cinta de opciones en el lado izquierdo del cuadro de diálogo.

  3. En Comandos disponibles en:, en el lado izquierdo del cuadro de diálogo, seleccione Comandos más utilizados.

  4. En Personalizar cinta de opciones en el lado derecho del cuadro de diálogo, seleccione Pestañas principales en el cuadro de lista desplegable y, a continuación, active la casilla Desarrollador.

  5. Haga clic en Aceptar.

Nota

En Office 2007, para que se muestre la pestaña Desarrollador haga clic en el botón de Office, en Opciones y, a continuación, active la casilla Mostrar pestaña Desarrollador en la Cinta en la categoría Más frecuentes del cuadro de diálogo Opciones.

Después de habilitar la pestaña Desarrollador, es fácil encontrar los botones de Visual Basic y Macros.

Figura 1. Botones en la pestaña Desarrollador

Botones de la ficha Programador

Cuestiones de seguridad

Para proteger a los usuarios de Office 2010 contra virus y código de macro peligroso, no se puede guardar código de macro en un documento estándar de Office 2010 que usa la extensión de archivo estándar. En cambio, el código se debe guardar en un archivo con una extensión especial. Por ejemplo, no puede guardar macros en un documento estándar de Word 2010 con la extensión .docx sino que debe usar un documento especial habilitado para macros de Word 2010 con la extensión .docm.

Cuando abre un archivo .docm, es posible que la seguridad de Office 2010 aún impida la ejecución de macros en el documento, con o sin notificación de ello. Examine la configuración y las opciones en el Centro de confianza de todas las aplicaciones de Office 2010. La configuración predeterminada deshabilita la ejecución de macros, pero le advierte que las macros han sido deshabilitadas y le da la opción de volver a activarlas para ese documento.

Puede designar carpetas específicas para la ejecución de macros al crear Ubicaciones de confianza, Documentos confiables o Editores de confianza. La opción más portátil es usar Editores de confianza, que funciona con los documentos firmados digitalmente que se distribuyen. Para obtener más información acerca de la configuración de seguridad de una aplicación de Office 2010 en particular, abra el cuadro de diálogo Opciones, haga clic en Centro de confianza y, a continuación, haga clic en Configuración del Centro de confianza.

Nota

Algunas aplicaciones de Office 2010, como Outlook 2010, guardan macros de forma predeterminada en una plantilla maestra del equipo local. Si bien con esta estrategia se disminuyen las cuestiones de seguridad local en su equipo cuando ejecuta sus propias macros, se necesita una estrategia de implementación en el caso de que desee distribuir su macro.

Grabación de una macro

Cuando hace clic en el botón Macro en la pestaña Desarrollador, se abre el cuadro de diálogo Macros, que permite el acceso a las macros o las subrutinas de VBA a las que se puede tener acceso desde un documento o aplicación en particular. El botón de Visual Basic abre el Editor de Visual Basic donde se crea y edita el código de VBA.

Otro botón de la pestaña Desarrollador en Word 2010 y Excel 2010 es el botón Grabar macro, que automáticamente genera código de VBA que puede reproducir las acciones que se realizan en la aplicación. Grabar macro es una herramienta increíble que se puede usar para obtener más información acerca de VBA. La lectura del código generado puede dar nociones acerca de VBA y sirve de sólido nexo entre su conocimiento de Office 2010 como usuario y su conocimiento como desarrollador. La única advertencia que se debe tener en cuenta es que el código generado posiblemente sea confuso porque el editor de macros debe realizar algunas suposiciones acerca de sus intenciones y esas suposiciones no son necesariamente correctas.

Para grabar una macro

  1. Abra un nuevo libro en Excel 2010 y haga clic en la pestaña Desarrollador en la cinta de opciones. Haga clic en Grabar macro y acepte toda la configuración predeterminada en el cuadro de diálogo Grabar macro, incluidos Macro1 como el nombre de la macro y Este libro como la ubicación.

  2. Haga clic en Aceptar para comenzar a grabar la macro. Observe cómo el texto del botón cambia a Detener grabación. Haga clic en ese botón en el instante en que completa las acciones que desea grabar.

  3. Haga clic en la celda B1 y escriba la primera cadena clásica del programador: Hello World. Deje de escribir y observe el botón Detener grabación; aparece atenuado porque Excel 2010 está esperando que termine de escribir el valor en la celda.

  4. Haga clic en la celda B2 para completar la acción en la celda B1 y, a continuación, haga clic en Detener grabación.

  5. En la pestaña Desarrollador, haga clic en Macros, seleccione Macro1 si no está seleccionada y, a continuación, haga clic en Editar para ver el código de la Macro1 en el Editor de Visual Basic.

Figura 2. Código de macros en el Editor de Visual Basic

Código de macros del Editor de Visual Basic

Observación del código

La macro que creó debe tener una apariencia similar a la del siguiente código.

Sub Macro1()
'
' Macro1 Macro
'
'
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "Hello World"
    Range("B2").Select
End Sub

Observe las similitudes con respecto al fragmento de código anterior que seleccionó texto en la celda A1, así como las diferencias. En este código, se selecciona la celda B1 y, a continuación, la cadena "Hello World" se aplica a la celda que se ha activado. Las comillas que delimitan el texto especifican un valor de cadena en oposición a un valor numérico.

¿Recuerda que hizo clic en la celda B2 para que se volviera a mostrar el botón Detener grabación? Esa acción también se muestra como una línea de código. La grabadora de macros graba todas las pulsaciones de tecla.

Las líneas de código que empiezan con un apóstrofe y que el Editor muestra en verde son comentarios que explican el código o que recuerdan los programadores el propósito del código. VBA omite toda línea, o parte de una línea, que empieza con una comilla simple. Escribir comentarios de forma clara y apropiada en el código es importante; sin embargo, esta discusión no pertenece al ámbito de este artículo. Las referencias subsiguientes a este código no incluyen esas cuatro líneas de comentario.

Cuando la grabadora de macros genera el código, usa un algoritmo complejo que determina los métodos y las propiedades que buscó. Si no reconoce una propiedad dada, hay varios recursos disponibles que pueden ayudarle. Por ejemplo, en la macro que grabó, la grabadora de macros generó código que se refiere a la propiedad ForumulaR1C1. ¿No está seguro de que significa eso?

Sugerencia

Nota: tenga en cuenta que el objeto Application está implícito en todas la macros de VBA. El código que grabó funciona con Application. al comienzo de cada línea.

Uso de la ayuda para desarrolladores

Seleccione ForumulaR1C1 en la macro grabada y presione F1. El sistema de ayuda ejecuta una búsqueda rápida, determina que los temas apropiados estén en la sección Desarrollador de Excel 2010 de la Ayuda de Excel 2010 e indica la propiedad FormulaR1C1. Puede hacer clic en el vínculo para obtener más información acerca de la propiedad, pero antes de hacerlo, tenga en cuenta que el vínculo Referencia del modelo de objetos de Excel está casi en la parte inferior de la ventana. Haga clic en el vínculo para ver una larga lista de objetos que Excel 2010 usa en su modelo de objetos para describir las hojas de cálculo y sus comentarios. Haga clic en uno de ellos para ver las propiedades y los métodos que se aplican a ese objeto en particular, además de las referencias cruzadas a distintas opciones relacionadas. Varias entradas en la Ayuda también tienen breves ejemplos de código que pueden ayudarlo. Por ejemplo, puede seguir los vínculos del objeto Borders para ver cómo establecer un borde en VBA.

Worksheets(1).Range("A1").Borders.LineStyle = xlDouble

Edición del código

El código de bordes tiene una apariencia distinta del de la macro grabada. Lo que puede resultar confuso con un modelo de objetos es que hay más de una manera de dirigirse a un objeto dado, a la celda A1 en este ejemplo.

A veces la mejor manera de aprender programación es hacer pequeños cambios en algún código activo y ver qué resultado se obtiene. Inténtelo ahora. Abra Macro1 en el Editor de Visual Basic y modifique el código como se indica a continuación.

Sub Macro1()
    Worksheets(1).Range("A1").Value = "Wow!"
    Worksheets(1).Range("A1").Borders.LineStyle = xlDouble
End Sub

Sugerencia

Use Copiar y pegar todas las veces que sea posible cuando trabaje con código para evitar errores de escritura.

No es necesario que guarde el código cada vez que lo prueba; vuelva al documento de Excel 2010, haga clic en Macros en la pestaña Desarrollador, haga clic en Macro1 y, a continuación, haga clic en Ejecutar. La celda A1 ahora contiene el texto Wow! y tiene un borde de doble línea.

Figura 3. Resultados de su primera macro

Resultados de la primera macro

 

Ha grabado una macro, ha leído la documentación del modelo de objetos y ha realizado una programación simple para hacer que un programa de VBA realice una tarea específica. ¡Enhorabuena!

¿No funcionó? Siga leyendo para obtener sugerencias de depuración en VBA.

Sugerencias y trucos de programación

Comenzar con ejemplos

La comunidad de VBA es muy amplia; una búsqueda en la Web casi siempre arroja como resultado un ejemplo de código de VBA que ejecuta una tarea similar a la que usted desea realizar. Si no puede encontrar un buen ejemplo, intente dividir la tarea en pequeñas unidades y realice una búsqueda de cada una de ellas, o bien intente pensar en un problema más común pero similar. Comenzar con un ejemplo puede ahorrarle horas de tiempo.

Esto no quiere decir que haya código gratuito y bien elaborado esperándole en la Web. De hecho, es posible que encuentre partes de código con errores. La idea es que los ejemplos que encuentre en línea o en la documentación de VBA sirvan como introducción. Recuerde que aprender programación requiere tiempo y análisis. Antes de verse apurado para usar otra solución para resolver un problema, pregúntese si VBA es la elección más adecuada para ese problema.

Simplificar un problema

La programación puede volverse compleja muy pronto. Es esencial, especialmente para un principiante, dividir el problema en unidades lógicas tan pequeñas como sea posible y, a continuación, escribir y probar cada parte por separado. Si está trabajando con un código muy extenso que le genera confusión, deténgase y deje de lado el problema, copie una pequeña parte del problema en un nuevo módulo, resuelva esa parte, active el código y pruébelo para ver si funciona. Una vez realizado esto, continúe con la parte siguiente.

Errores y depuración

Hay dos tipos de errores principales en la programación: errores de sintaxis, que no cumplen las reglas gramaticales del lenguaje de programación, y errores en tiempo de ejecución, que parecen ser sintácticamente correctos pero impiden efectuar la operación cuando VBA intenta ejecutar el código.

Aunque pueda ser frustrante corregirlos, los errores de sintaxis son fáciles de detectar; el Editor de Visual Basic emite un aviso sonoro y un destello cuando se comete un error de este tipo al escribir el código.

Por ejemplo, en VBA, los valores de cadena deben ir entre comillas dobles. Para averiguar lo que sucede si usa comillas simples, vuelva al Editor de Visual Basic y reemplace la cadena "Wow!" en el ejemplo de código por 'Wow!' (es decir, la palabra Wow entre comillas simples). Si hace clic en la línea siguiente, el Editor de Visual Basic reacciona. El error "Error de compilación: se esperaba una expresión" no es de gran ayuda, pero la línea que genera el error se vuelve de color rojo para indicar que ha cometido un error de sintaxis en esa línea y, en consecuencia, este programa no se ejecutará.

Haga clic en Aceptar y vuelva a cambiar el texto por "Wow!".

Los errores en tiempo de ejecución son más difíciles de detectar porque la sintaxis de la programación parece ser correcta, pero el código da error cuando VBA intenta ejecutarlo.

Por ejemplo, abra el Editor de Visual Basic y cambie el nombre de la propiedad Value a ValueX en su Macro. De esta forma se introduce deliberadamente un error en tiempo de ejecución debido a que el objeto Range no tiene una propiedad denominada ValueX. Vuelva al documento de Excel 2010, abra el cuadro de diálogo Macros y ejecute Macro1 nuevamente. Lo que ve es un cuadro de mensaje de Visual Basic que explica el error en tiempo de ejecución con el texto "el objeto no admite esta propiedad de método". Aunque el texto es claro, haga clic en Depurar para obtener más información.

Cuando vuelve al Editor de Visual Basic, este se encuentra en un modo de depuración especial que usa el color amarillo para resaltar la línea de código incorrecta. Como se esperaba, la línea que incluye la propiedad ValueX es la que está resaltada.

Figura 4. Depurador de Visual Basic en acción

Depurador de Visual Basic en funcionamiento

 

Es posible realizar cambios al código de VBA mientras se está ejecutando. Vuelva a cambiar ValueX por Value y haga clic en el botón de reproducción verde que está debajo del menú Depurar. El programa debe volver a ejecutarse normalmente.

Es una buena idea aprender cómo usar el depurador más deliberadamente para programas más complejos y extensos. Al menos aprenda cómo establecer puntos de interrupciones para detener la ejecución en un punto en el que desea ver el código, cómo sumar inspecciones para ver los valores de las distintas variables y propiedades a medida que el código se ejecuta y cómo pasar de una a otra línea a lo largo del código. Todas estas opciones están disponibles en el menú Depurar y algunos usuarios del depurador generalmente memorizan los métodos abreviados de teclado que corresponden a cada una de las opciones.

Uso correcto de materiales de referencia

Para abrir la referencia del desarrollador incluida en la Ayuda de Office 2010, abra la referencia de Ayuda de cualquier aplicación de Office 2010. Para abrirla, haga clic en el signo de interrogación de la cinta de opciones o presione F1. A continuación, a la derecha del botón Buscar, haga clic en la flecha desplegable para filtrar los contenidos. Haga clic en la referencia del desarrollador. Si no ve la tabla de contenidos en el panel izquierdo, haga clic en el icono del libro pequeño para abrirlo y, a continuación, expanda la referencia del modelo de objetos desde allí.

Figura 5. El filtrado que se realice en la ayuda para desarrolladores se aplica a todas las aplicaciones de Office 2010.

Filtrado en la Ayuda para programadores

 

El tiempo invertido en explorar la referencia del modelo de objetos tiene su recompensa. Después de comprender los conceptos básicos de la sintaxis de VBA y del modelo de objetos de la aplicación de Office 2010 con la que está trabajando, pasará de las conjeturas a la programación metodológica.

Por supuesto, el Centro de desarrolladores de Microsoft Office es un portal excelente que incluye artículos, sugerencias e información de la comunidad.

Búsqueda de foros y grupos

Todos los desarrolladores a veces se bloquean, incluso después de leer todos los artículos de referencia que pudieron encontrar y perder el sueño por pensar en distintas formas de resolver un problema. Afortunadamente, Internet ha fomentado una comunidad de desarrolladores que se ayudan entre sí para resolver problemas de programación.

Toda búsqueda en la Web de "foro de desarrolladores de office" muestra varios grupos de discusión. Puede buscar "desarrollo de office" o la descripción de un problema para encontrar foros, entradas de blog o artículos.

Si ya ha hecho todo lo posible para resolver un problema, no tenga miedo de exponer su consulta en un foro de desarrolladores. En estos foros son bienvenidos los mensajes de nuevos desarrolladores y muchos de los desarrolladores expertos se complacen en ayudar.

A continuación, se explican algunas cuestiones de protocolo que se deben tener en cuenta a la hora de exponer una consulta en un foro de desarrolladores:

  • Antes de publicar una consulta, busque en el sitio las preguntas más frecuentes o las pautas que los miembros desean que se cumplan. Asegúrese de exponer contenido de forma coherente con esas pautas y en la sección correcta del foro.

  • Incluya un ejemplo de código claro y completo, y considere la posibilidad de editar su código de modo que sea más claro para otras personas cuando es parte de una sección más extensa del código.

  • Describa el problema de forma clara y concisa, y resuma cada uno de los pasos que llevó a cabo para resolverlo. Dedique el tiempo necesario para escribir la pregunta de la mejor manera posible, especialmente si se siente inquieto o tiene prisa. Presente la situación de modo que tenga sentido para los lectores la primera vez que leen la exposición del problema.

  • Sea amable y exprese su agradecimiento.

Un paso más adelante en programación

Aunque este artículo es corto y sólo roza la superficie de VBA y la programación, se espera que sea suficientemente útil a modo de introducción.

En esta sección se explican brevemente algunos otros temas clave.

Variables

En los ejemplos simples presentados en este artículo, ha manipulado objetos ya creados por la aplicación. Es posible que desee crear sus propios objetos para almacenar valores o referencias a otros objetos para su uso temporal en la aplicación. Estos se denominan variables.

Para usar una variable en VBA, se debe indicar a VBA cuál es el tipo de objeto que la variable representa mediante el uso de la instrucción Dim. A continuación, se establece el valor y se usa para establecer otras variables o propiedades.

    Dim MyStringVariable As String
    MyStringVariable = "Wow!"
    Worksheets(1).Range("A1").Value = MyStringVariable

Bucles y bifurcaciones

Los programas simples de este artículo ejecutan una línea cada vez, empezando por arriba. La verdadera eficacia de la programación radica en las opciones que ofrece para determinar qué líneas del código se deben ejecutar, de acuerdo con la condición o las condiciones que se especifiquen. Es posible ampliar esas capacidades aún más al repetir una operación varias veces. Por ejemplo, el siguiente código amplía Macro1.

Sub Macro1()
    If Worksheets(1).Range("A1").Value = "Yes!" Then
        Dim i As Integer
        For i = 2 To 10
            Worksheets(1).Range("A" & i).Value = "OK! " & i
        Next i
    Else
        MsgBox "Put Yes! in cell A1"
    End If
End Sub

Escriba o pegue el código en el Editor de Visual Basic y, a continuación, ejecútelo. Siga las indicaciones del cuadro de mensaje que aparece y cambie el texto de la celda A1 de Wow! a Yes! y ejecútelo de nuevo para ver la eficacia de la función de bucle. Este fragmento de código demuestra variables, bifurcaciones y bucles. Léalo detenidamente después de verlo en acción e intente determinar qué sucede a medida que cada línea se ejecuta.

Todas mis aplicaciones de Office 2010: código de ejemplo

A continuación, se incluyen algunos scripts para probar; cada uno resuelve un problema real de Office 2010.

Crear un correo electrónico en Outlook 2010

Sub MakeMessage()
    Dim OutlookMessage As Outlook.MailItem
    Set OutlookMessage = Application.CreateItem(olMailItem)
    OutlookMessage.Subject = "Hello World!"
    OutlookMessage.Display
    Set OutlookMessage = Nothing
End Sub

Tenga en cuenta que en determinadas situaciones es posible que desee automatizar el correo electrónico en Outlook 2010; también puede usar plantillas.

Eliminar filas vacías en una hoja de cálculo de Excel 2010

Sub DeleteEmptyRows()    SelectedRange = Selection.Rows.Count    ActiveCell.Offset(0, 0).Select    For i = 1 To SelectedRange        If ActiveCell.Value = "" Then    
            Selection.EntireRow.Delete        Else            ActiveCell.Offset(1, 0).Select        End If    Next iEnd Sub

Tenga en cuenta que puede seleccionar una columna de celdas y ejecutar esta macro para eliminar todas las filas de la columna seleccionada que tienen celdas en blanco.

Eliminar cuadros de texto vacíos en PowerPoint 2010

Sub RemoveEmptyTextBoxes()
    Dim SlideObj As Slide
    Dim ShapeObj As Shape
    Dim ShapeIndex As Integer
    For Each SlideObj In ActivePresentation.Slides
        For ShapeIndex = SlideObj.Shapes.Count To 1 Step -1
            Set ShapeObj = SlideObj.Shapes(ShapeIndex)
            If ShapeObj.Type = msoTextBox Then
                If Trim(ShapeObj.TextFrame.TextRange.Text) = "" Then
                    ShapeObj.Delete
                End If
            End If
        Next ShapeIndex
    Next SlideObj
End Sub

Tenga en cuenta que este código recorre en bucle todas las diapositivas y elimina todos los cuadros de texto que no tienen texto. La variable de conteo disminuye en vez de aumentar porque cada vez que el código elimina un objeto, quita ese objeto de la colección, por lo tanto, el conteo disminuye.

Copiar un contacto de Outlook 2010 a Word 2010

Sub CopyCurrentContact()
   Dim OutlookObj As Object
   Dim InspectorObj As Object
   Dim ItemObj As Object
   Set OutlookObj = CreateObject("Outlook.Application")
   Set InspectorObj = OutlookObj.ActiveInspector
   Set ItemObj = InspectorObj.CurrentItem
   Application.ActiveDocument.Range.InsertAfter (ItemObj.FullName & " from " & ItemObj.CompanyName)
End Sub

Tenga en cuenta que este código copia el contacto actualmente abierto en Outlook 2010, en el documento de Word 2010 abierto. Este código sólo funciona si hay un contacto actualmente abierto para su inspección en Outlook.

Resumen

En este artículo se explicó a modo de introducción la eficacia de Visual Basic para Aplicaciones (VBA) en Office 2010 y cómo VBA puede automatizar tareas repetitivas.

Recursos adicionales

Para obtener más información, vea los siguientes recursos: