Introducción a VBA en Outlook 2010

Resumen: este artículo es una introducción para no programadores a algunas maneras de usar la programación de Visual Basic para Aplicaciones (VBA) para extender Microsoft Outlook 2010. En este tema se incluye una introducción al lenguaje de VBA, instrucciones para obtener acceso a VBA en Outlook 2010, una solución detallada para un problema real de programación de VBA en Outlook y sugerencias sobre programación y depuración.

Última modificación: martes, 05 de abril de 2011

Hace referencia a: Office 2010 | Outlook 2010 | VBA

En este artículo
Programación de VBA en Outlook 2010
Información adicional acerca de la programación con VBA
Macros y el Editor de Visual Basic
Accesibilidad de las macros
Macro para editar contactos
Distribución del código
Resumen
Recursos adicionales

Se aplica a:  Microsoft Outlook 2010**
Publicado:**  noviembre de 2009**
Proporcionado por:**  Icono de los miembros de la comunidadTim Burnett, asesor informático de Kingfisher

Contenido

  • Programación de VBA en Outlook 2010

  • Información adicional acerca de la programación con VBA

  • Macros y el Editor de Visual Basic

  • Macro para editar contactos

  • Distribución del código

  • Resumen

  • Recursos adicionales

Programación de VBA en Outlook 2010

¿Siempre se encuentra con que debe limpiar constantemente varios contactos de Outlook 2010? ¿Se ve desbordado por una cantidad ingente de datos adjuntos de correo electrónico que debe guardar, uno por uno, en el disco duro? ¿Desea crear automáticamente elementos de calendario a partir de algunos mensajes de correo electrónico? ¿Tiene problemas para averiguar cómo extraer los contactos de Microsoft Outlook 2010 y volcarlos en una hoja de cálculo de Microsoft Excel 2010 de manera eficaz?

Puede llevar a cabo estas tareas y lograr mucho más con VBA, un lenguaje de programación sencillo pero eficaz que sirve para ampliar las aplicaciones de Office 2010 con nuevas capacidades y automatizar tareas repetitivas.

Este artículo está dirigido a usuarios con experiencia en Outlook que desean aprender sobre VBA y obtener conocimientos sobre el modo en que la programación puede ayudarlos a personalizar Outlook 2010 para satisfacer sus necesidades.

Antes de leer este artículo, se recomienda leer el artículo introductorio, Introducción a VBA en Office 2010, donde se detallan los aspectos básicos de la programación con VBA.

La gran eficacia de la programación con VBA en Office 2010 hace que prácticamente toda operación que puede llevarse a cabo con el mouse, el teclado o un cuadro de diálogo también pueda efectuarse mediante VBA. Además, si se puede llevar a cabo una vez con VBA, puede realizarse con la misma facilidad cientos o miles 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 eficacia de generar secuencias de comandos o scripts con VBA para aligerar tareas rutinarias, VBA sirve para agregar nuevas funcionalidades a las aplicaciones de Office 2010 o para mostrar mensajes al usuario de los documentos e interactuar con él de manera adaptada a las necesidades de la empresa. Por ejemplo, en Outlook 2010, se puede usar VBA para ordenar, exportar y modificar contactos, correos electrónicos, elementos de calendario o tareas de maneras que no están disponibles en la interfaz de usuario estándar.

El tutorial incluido en este artículo describe cómo automatizar Outlook mediante VBA. Se trata de un ejemplo real de investigación sobre programación, VBA y las herramientas de desarrollo que se encuentran disponibles para los usuarios con experiencia en Outlook.

Elección del método

La programación con VBA es una solución eficaz, pero no siempre es el mejor método. En algunas ocasiones, es preferible recurrir a otras alternativas para alcanzar sus objetivos.

La pregunta fundamental que debe formularse es si existe una manera más sencilla. Antes de comenzar un proyecto de VBA, se deben tener en cuenta las herramientas integradas y las funcionalidades estándar. Por ejemplo, ante una operación que lleva mucho tiempo en Outlook, se puede considerar resolverla usando Reglas. ¿Puede llevar a cabo la tarea una vez y luego usar CTRL+Y (Rehacer) para repetirla?

Outlook 2010 es una aplicación eficaz y es posible que ya cuente con la solución que necesita. Tómese su tiempo para aprender más sobre Outlook 2010 antes de saltar a la programación.

Antes de comenzar un proyecto de VBA, asegúrese de contar con el tiempo necesario para trabajar con VBA. La programación requiere concentración y puede ser impredecible. Sobre todo cuando se es principiante, nunca realice tareas de programación si no dispone del tiempo necesario para trabajar meticulosamente. Intentar escribir un "script rápido" para solucionar un problema cuando se acerca una fecha límite puede ser una situación estresante. Si tiene prisa, use métodos más convencionales, aunque sean monótonos y repetitivos.

Información adicional acerca de la programación con VBA

Uso de código para hacer que las aplicaciones realicen las tareas

Quizá crea que escribir código es algo misterioso o complicado, pero sus principios básicos usan el razonamiento diario y son bastante accesibles. Las aplicaciones de Office 2010 están creadas de tal manera que exponen elementos llamados objetos, que pueden recibir instrucciones de una manera muy similar a la de que un teléfono está diseñado con botones que se usan para interactuar con el aparato. Al presionar un botón, el teléfono reconoce la instrucción e incluye el número correspondiente en la secuencia en la que se marca. En el mundo de la programación, para interactuar con la aplicación se envían instrucciones a distintos objetos de la aplicación. Dichos objetos son ampliables, pero tienen límites. Solo pueden hacer aquello para lo que fueron diseñados y solo harán lo que se les indique que hagan.

Por ejemplo, piense que el usuario que crea un mensaje de correo electrónico en Outlook selecciona un destinatario, escribe un asunto para el mensaje y, a continuación, hace clic en Enviar. En el mundo de la programación con VBA, Outlook expone un objeto MailItem. Mediante el uso de código de VBA, se establece el asunto y el cuerpo de MailItem y se indica que se guarde o se envíe. Lea este artículo para aprender más sobre estos objetos, la manera en que se organizan y la forma en que se describen y manipulan.

Objetos, métodos y propiedades

Los programadores organizan objetos de programación en una jerarquía, denominada modelo de objetos de la aplicación. Por ejemplo, la Bandeja de entrada de Outlook es un objeto Folder que existe en el objeto Namespace de Outlook. El objeto Folder contiene objetos MailItem, y así sucesivamente. Los modelos de objetos reflejan aproximadamente lo que se ve en la interfaz de usuario. Constituyen un mapa conceptual de la aplicación y sus funciones. Mediante programación, un objeto Folder puede contener cualquier tipo de objeto de elementos pero, por lo general, cada una de las carpetas en la interfaz de usuario de Outlook contiene, en su mayoría, un determinado tipo de objeto de elementos. Por ejemplo, la interfaz de usuario de Outlook proporciona una carpeta llamada Contactos que contiene principalmente objetos ContactItem y una carpeta llamada Calendario que contiene principalmente objetos AppointmentItem y MeetingItem.

La definición de un objeto se conoce como una clase, de modo que puede ver estos dos términos usados indistintamente. Técnicamente, una clase es la descripción o plantilla que se usa para crear un objeto o crear una instancia de él.

Una vez creado un objeto, se puede manipular configurando sus propiedades y llamando a sus métodos. Si pensamos en el objeto como si fuera un sustantivo, las propiedades serían los adjetivos que lo describen y los métodos serían los verbos que definen la acción. Al cambiar una propiedad, se modifica la calidad de la apariencia o el comportamiento del objeto. Al llamar a uno de los métodos del objeto, se logra que éste realice una acción.

Después de conocer el diseño básico del modelo de objetos en Outlook y algunas propiedades clave de los objetos Application, Explorer y Folder que le permiten tener acceso al estado actual, podrá comenzar a ampliar y manipular Outlook con VBA.

Macros y el Editor de Visual Basic

Ahora que conoce cómo las aplicaciones de Outlook 2010 exponen sus modelos de objetos, probablemente esté impaciente por intentar llamar a métodos de objetos, configurar sus propiedades y responder a los eventos de objetos. Para hacerlo, debe escribir su código en un lugar y de una manera que Office pueda entenderlo; por lo general, esto se consigue usando el Editor de Visual Basic. Aunque está instalado de manera predeterminada, muchos usuarios no saben que se encuentra disponible hasta que se habilita en la cinta de opciones.

Abrir la ficha Programador

Todas las aplicaciones de Office 2010 usan la cinta de opciones. La ficha Programador es una de las fichas incluidas en la cinta de opciones, donde se puede tener acceso al Editor de Visual Basic y a otras herramientas de programador. Debido a que Office 2010 no muestra la ficha Programador de manera predeterminada, debe habilitarla mediante el siguiente procedimiento:

Para habilitar la ficha Programador

  1. En la ficha Archivo, elija Opciones para abrir el cuadro de diálogo Opciones de Outlook.

  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 Personalice esta cinta de opciones, en el lado derecho del cuadro de diálogo, seleccione Fichas principales y, a continuación, active la casilla Programador.

  5. Haga clic en Aceptar.

Nota

En Office 2007, la ficha Programador aparecía al hacer clic en el botón de Office, después en Opciones y, a continuación, al activar la casilla Mostrar ficha Programador en la cinta de opciones, en la categoría Popular del cuadro de diálogo Opciones.

Una vez habilitada la ficha Programador, resulta fácil encontrar los botones Visual Basic y Macros.

Figura 1. Ficha Programador en Outlook 2010

Ficha Programador en Outlook 2010

Problemas de seguridad

De manera predeterminada, en Outlook, las macros de VBA se encuentran deshabilitadas para proteger al usuario frente a virus y otros códigos malintencionados. Para habilitar las macros, use el siguiente procedimiento:

Para habilitar macros

  1. En la ficha Archivo, elija Opciones de Outlook para abrir el cuadro de diálogo Opciones de Outlook y, a continuación, haga clic en Centro de confianza.

  2. Haga clic en Configuración del Centro de confianza y, a continuación, en la opción Configuración de macros que se encuentra a la izquierda.

  3. Seleccione Notificaciones para todas las macros y, a continuación, haga clic en Aceptar. La opción permite que las macros se ejecuten en Outlook, pero antes de que se ejecute, Outlook pide al usuario que compruebe que desea ejecutar la macro.

  4. Reinicie Outlook para que el cambio en la configuración surta efecto.

Editor de Visual Basic

Después de mostrar la ficha Programador, puede abrir el Editor de Visual Basic, que es la herramienta integrada que se usa para escribir y editar código de VBA para Outlook. Use el siguiente procedimiento para abrir el Editor de Visual Basic:

Para abrir el Editor de Visual Basic

  1. Haga clic en el botón Macros en la ficha Programador.

  2. En el cuadro de diálogo Macro que aparece, escriba Test en Nombre de la macro.

  3. Haga clic en el botón Crear para abrir el Editor de Visual Basic que incluirá los esquemas de una nueva macro ya escritos.

El Editor de Visual Basic contiene el siguiente código.

Sub Test()
End Sub

Sub se refiere a "Subrutina" que, por el momento, se puede definir como "macro". Al ejecutar la macro Test, se ejecuta cualquier código que se encuentre entre Sub Test() y End Sub.

Ahora, edite la macro para que tenga un aspecto similar al siguiente código.

Sub Test()
   MsgBox("Hello world")
End Sub

Figura 2. Macro Test en el Editor de Visual Basic

Macro de prueba del Editor de Visual Basic

Observe el panel izquierdo en el Editor de Visual Basic. La macro Test se encuentra en Module1 de Project1. Un módulo Project contiene varios módulos, y cada módulo contiene una colección de código de VBA que se puede importar o exportar como un archivo .bas.

Una vez creado un objeto, se puede manipular configurando sus propiedades y llamando a sus métodos. La subrutina que se editó contiene un método, que es código que realiza una acción. El método Test() de la subrutina ahora es un miembro del objeto Project1.

Nota

Otras aplicaciones de Office pueden tener varios proyectos enumerados el Editor de Visual Basic, pero en el VBA de Outlook solo se muestra un proyecto, y siempre se denomina Project1.

Vuelva a la ficha Programador en Outlook y haga clic de nuevo en el botón Macros. Seleccione la macro Project1.Test en la lista que aparece y, a continuación, haga clic en Ejecutar para mostrar un cuadro de mensaje pequeño que contiene el texto "Hello, world!".

Acaba de crear e implementar correctamente código de VBA personalizado en Outlook. Haga clic en Aceptar en el cuadro de mensaje para cerrarlo y terminar de ejecutar la macro.

Si no aparece el cuadro de mensaje, compruebe la configuración de seguridad de la macro y reinicie Outlook.

Accesibilidad de las macros

Si usa una macro con frecuencia, le resultará más cómodo tener acceso a ella mediante un método abreviado de teclado o un botón de la Barra de herramientas de acceso rápido.

Para crear un botón para la macro Test en la Barra de herramientas de acceso rápido, use el siguiente procedimiento:

Para crear un botón para una macro en la Barra de herramientas de acceso rápido

  1. Haga clic en la pestaña Archivo.

  2. Haga clic en Opciones para abrir el cuadro de diálogo Opciones de Outlook y, a continuación, haga clic en Barra de herramientas de acceso rápido.

  3. En la lista que se encuentra en Comandos disponibles en, elija Macros. En la lista que aparece, busque el texto que se parezca a Project1.Module1.Test y selecciónelo.

  4. Haga clic en el botón Agregar >> para agregar la macro a la lista en el lado derecho y, a continuación, haga clic en el botón Modificar…, a fin de seleccionar una imagen del botón para asociar a la macro.

  5. Haga clic en Aceptar. El nuevo botón deberá mostrarse en la Barra de herramientas de acceso rápido, encima de la ficha Archivo.

Ahora puede ejecutar rápidamente la macro en cualquier momento sin tener que usar la ficha Programador: inténtelo.

Figura 3. Asignación de una macro a la Barra de herramientas de acceso rápido

Asignación de una macro a la Barra de herramientas de acceso rápido

Macro para editar contactos

Imagine que tiene varios contactos en una determinada compañía llamada Example Systems, y que cada contacto tiene una dirección de correo electrónico con el dominio @example.com. Ahora imagine que Example Networks adquiere Example Systems y cambia todas las direcciones de correo electrónico de los empleados a @example.net. Si tiene uno o dos contactos en Example Systems, sería sencillo cambiarlos manualmente. Sin embargo, si tiene 20, 50 ó 100 contactos, la automatización de esta tarea repetitiva es un uso habitual de VBA en Office.

En este artículo, se analiza cómo usar VBA en Outlook para modificar esos contactos y se explican algunos conceptos de VBA.

Acceso a la carpeta Contactos

Siga los pasos que usó para crear la macro Test para crear una macro nueva llamada CompanyChange y abrirla en el Editor de Visual Basic.

La primera tarea consiste en obtener acceso al objeto de la carpeta Contactos de Outlook y, después, almacenar la referencia a ese objeto en una variable.

En programación, una variable es un objeto con nombre y temporal que puede contener un valor o una referencia a un objeto. En el código de ejemplo que se muestra a continuación, se usa una variable denominada ContactsFolder. El código indica a VBA que va a colocar un objeto Folder en él y que va a ejecutar el método GetDefaultFolder del objeto Session para buscar la carpeta Contacts y almacenar una referencia a ella en esa variable.

El Editor de Visual Basic incluye una útil entrada de código automática llamada IntelliSense. Escriba Session.GetDefaultFolder con mucho cuidado y, a continuación, presione el paréntesis de apertura para el parámetro. Al hacerlo, el Editor de Visual Basic muestra una lista de opciones. Use la flecha abajo o el mouse para seleccionar olFolderContacts,, uno de los tipos de carpetas disponibles, y presione la tecla TAB para seleccionarla.

Figura 4. Uso de IntelliSense para seleccionar un tipo de carpeta

Uso de IntelliSense para seleccionar un tipo de carpeta

Aunque se recomienda usar las funciones copiar y pegar cuando se trabaja con código para evitar errores de escritura, por ahora escriba el código en el Editor de Visual Basic para poder ver cómo el editor puede ayudarlo.

Sub CompanyChange()
    Dim ContactsFolder as Folder
    Set ContactsFolder = Session.GetDefaultFolder(olFolderContacts)
End Sub

Agregue una línea más para obtener comentarios y probar la macro cuando está en progreso. (Además, dedique un minuto a crear un botón en la Barra de herramientas de acceso rápido para CompanyChange, como se hizo en la sección Accesibilidad de macros).

Sub CompanyChange()
    Dim ContactsFolder as Folder
    Set ContactsFolder = Session.GetDefaultFolder(olFolderContacts)
    MsgBox ("Contacts Found: " & ContactsFolder.Items.Count)
End Sub

Items es una propiedad del objeto Folder y Count es una propiedad de la propiedad Items.

Ejecute la macro; el número de Contactos que tenga en Outlook debería aparecer en un cuadro de mensaje.

Si todavía no lo hizo, abra la carpeta Contactos y cree algunos contactos de empleados de ejemplo que trabajen para la compañía ficticia Example Systems. Asígnele a cada contacto de ejemplo el nombre de la compañía Example Systems y cree una dirección de correo electrónico diferente para todas las que se parezcan a alguien@example.com.

Colecciones de objetos

Las colecciones son una de las características más eficaces de los lenguajes de programación modernos, como VBA. Una colección es un conjunto de objetos que pueden almacenarse en una propiedad y que pueden "recorrerse" fácilmente para obtener acceso a ellos. En este caso, el código debe recorrer en bucle la colección de contactos para encontrar personas de Example Systems.

Tal como se mencionó anteriormente, la variable ContactsFolder permite tener acceso a la colección Items de la carpeta. La colección Items de una carpeta de Contactos devuelve objetos del tipo ContactItem. Cree una variable para guardar una referencia a cada ContactItem.

Dim Contact As ContactItem

Tenga en cuenta que también se puede usar el tipo Object de propósito general si no sabe qué tipo de objeto devuelve una colección. Sin embargo, si conoce el tipo de objeto, especificarlo con mayor exactitud ofrece muchas ventajas.

Dim Contact As Object

Una vez obtenido el objeto ContactItem, debe comprobar el nombre de la compañía para cada persona. Dado que el objeto ContactItem almacena información sobre un contacto, debe existir una propiedad para el nombre de la compañía, pero como no conoce el nombre de esa propiedad, debe usar una de dos maneras siguientes para encontrarlo.

Determinación de nombres de propiedades

Para hacer un uso completo de un objeto de VBA, debe conocer las propiedades y los métodos de dicho objeto. Aunque se pueden realizar muchas tareas mediante el código de ejemplo disponible en Web, si se examinan sistemáticamente los objetos que se usan se puede aumentar las opciones, reducir la depuración y ahorrar tiempo.

Por ejemplo, puede buscar información sobre ContactItem en la referencia del programador de Outlook en la Ayuda, si selecciona ContactItem en el código y presiona F1. También puede buscar información sobre ContactItem en la Ayuda. No olvide consultar los vínculos de los distintos temas para obtener información sobre los objetos relacionados.

La Referencia del programador es una herramienta eficaz para la programación con VBA y una manera de encontrar la propiedad que necesita para el código. Después de leer la información general sobre el objeto ContactItem, haga clic en el vínculo "Miembros del objeto ContactItem" para ver la lista de métodos y propiedades (de manera colectiva, las propiedades y los métodos se denominan Miembros).

Si lee toda la lista, encontrará una propiedad llamada CompanyName. Parece que esta podría servir.

Además de usar la referencia del programador de Outlook para buscar una propiedad o un método, puede usar IntelliSense en el Editor de Visual Basic. Después de definir la variable Contact como ContactItem, puede escribir Contact y un punto para mostrar la misma lista de miembros que se enumeran en la Ayuda. Para seleccionar una de las opciones de IntelliSense, use las flechas arriba y abajo o el mouse para resaltarla y, a continuación, use la tecla TAB para seleccionarla.

IntelliSense no proporciona descripciones de los distintos miembros, de manera que este uso resulta más útil cuando el contexto hace que la opción sea evidente, o cuando ya conoce el nombre del miembro pero no recuerda cómo se deletrea. Los nombres de miembros con errores ortográficos producen errores que el Editor de Visual Basic no marca hasta que se ejecuta la macro.

Recorrido en bucle de una colección

Ahora tiene una colección, sabe qué tipo de objeto contiene y tiene una propiedad para tener acceso a los objetos que encuentra. Ya puede recorrer en bucle la colección y manipular los objetos que contiene mediante un bucle For Each.

En pseudocódigo, ya puede hacer lo siguiente.

For Each [object variable] in [a collection that contains that type of object]
[do something with] [object variable].Property
Next

En código real, eso se traduce en el siguiente código, lo que afecta a la línea que tiene la instrucción MsgBox.

For Each Contact In ContactsFolder.Items
   Debug.Print Contact.CompanyName
Next

Antes de volver a ejecutar la macro, abra la ventana Inmediata en el Editor de Visual Basic. Para hacerlo, haga clic en Ver en la barra de menús y, a continuación, haga clic en Ventana Inmediata. Antes usó la instrucción MsgBox para obtener comentarios del script. Aunque MsgBox resulta útil, siempre espera a que el usuario haga clic en Aceptar antes de mostrar el mensaje siguiente. Por el contrario, Debug.Print envía una línea de resultados cada vez a la ventana Inmediato sin esperar a que se haga clic en Aceptar. Después de ejecutar este script, deberá aparecer una lista de nombres de empresas en la ventana Inmediato. Tenga en cuenta que esto resulta útil para el programador, pero los usuarios con los que comparta esta macro no lo verán.

Toma de decisiones con la instrucción If

En la solución completada, desea que la macro cambie solo aquellos contactos de empleados que trabajan para Example Systems y no modifique los demás contactos. La lógica condicional de este tipo es la especialidad de la programación. Aquí, se puede usar la instrucción If para indicar a VBA que ejecute código sólo si la condición proporcionada es verdadera; de lo contrario, deberá saltar al código después de la instrucción End If.

If [some condition is true] Then
' do things
End If
' continue on whether or not the condition was true

En el problema en el que está trabajando, la condición determinante es si la propiedad CompanyName para el objeto ContactItem actual está establecida en la cadena "Example Systems".

En el código siguiente, tenga en cuenta las comillas dobles. Los valores de cadena (es decir, valores de texto), en contraposición a los valores numéricos, siempre se encuentran entre comillas dobles. VBA ignora las comillas dobles, las cuales se usan para comentarios propios y de otros programadores.

Agregue la condición al código para que todo el script se parezca al siguiente código.

Sub CompanyChange()
    Dim ContactsFolder As Folder
    Set ContactsFolder = Session.GetDefaultFolder(olFolderContacts)
    MsgBox ("Contacts Found:" & ContactsFolder.Items.Count)
    
    Dim Contact As ContactItem

    For Each Contact In ContactsFolder.Items
        If Contact.CompanyName = "Example Systems" Then
            Debug.Print "Found: " & Contact.FullName
        End If
    Next
End Sub

Después de ejecutar el código, debería poder ver los nombres de los contactos de Example Systems en la ventana Inmediato.

Figura 6. Uso de la ventana Inmediato para el resultado

Uso de la ventana Inmediato para los resultados

Tenga en cuenta la manera en que Debug.Print y la instrucción MsgBox anterior combinan cadenas fijas para lograr una mayor claridad, como "Encontrado: " seguido del valor devuelto por una propiedad. Para que esto funcione, debe combinar las dos cadenas de texto usando el operador de concatenación de cadenas (&).

Importante

Importante: tenga cuidado en los pasos que se explican a continuación en este tutorial. Está trabajando en su lista real de contactos de Outlook junto con algunos contactos ficticios de Example Systems. Por tanto, si modifica el nombre de la compañía de cada contacto y lo cambia por "Example Networks", causará problemas.

Modificación del nombre de la compañía

Ya casi hemos terminado. Ha cargado los contactos, puede recorrerlos en bucle y puede distinguir sus contactos de los de Example Systems. Para cambiarlos por Example Networks, debe cambiar la propiedad CompanyName y llamar al método Save para efectuar el cambio.

        If Contact.CompanyName = "Example Systems" Then
            Contact.CompanyName = "Example Networks"
            Contact.Save
            Debug.Print "Changed: " & Contact.FullName
        End If

Ejecute la macro y después vea los contactos de Example Systems; el nombre de la compañía en esos contactos debería ser Example Networks. Tenga en cuenta que para efectuar más pruebas del script, debe cambiar el nombre de la compañía para que vuelva a ser Example Systems, ya sea manualmente o creando otra macro que lo haga automáticamente.

Mantenga la instrucción Debug.Print, aunque no sea esencial para que el script funcione. Será mejor cuantos más comentarios reciba, junto con los usuarios, de la macro.

Modificación de la dirección de correo electrónico

La modificación de la propiedad CompanyName fue un cambio sencillo de una cadena entera. Para cambiar el dominio de la dirección de correo electrónico de @example.com a @example.net, se requiere una operación de cadena. Cada cadena tiene un sistema de numeración integrado en el que cada carácter tiene un número de índice que comienza en 1. Puede usar toda una variedad de funciones de VBA para manipular cadenas parcial o totalmente. Aprender sobre estas operaciones de cadena aumenta mucho sus opciones como programador de VBA, debido a que existen muchas situaciones de programación que requieren buscar una subcadena o cambiar parte de una cadena. (Al buscar "funciones de cadenas de VBA" en Web, se obtienen muchas listas y ejemplos útiles).

Puede usar la función Replace para realizar un reemplazo sencillo de una subcadena por otra, pero, con frecuencia, podría verse ante situaciones que requieran una codificación más compleja para manipular cadenas. Agregue la siguiente línea inmediatamente antes de que el código invoque Contact.Save.

Contact.Email1Address = Replace(Contact.Email1Address, "example.com", "example.net")

Lea detenidamente el código de izquierda a derecha. Indica que se establecerá la propiedad Email1Address de Contacto (la primera dirección de correo electrónico) en un nuevo valor. El nuevo valor se proporciona al solicitar a la función Replace que busque la cadena "example.com" en la propiedad Contact.Email1Address actual y la reemplace por "example.net".

Asegúrese de que el nombre de la compañía en los contactos ficticios está establecido en Example Systems y, a continuación, ejecute el script. Todas las direcciones de correo electrónico deben cambiar a @example.net y todos los nombres de la compañía deben cambiar a Example Networks.

Generalización del código

Ahora cuenta con una macro eficaz, pero es limitada porque la única forma de especificar el nombre de la compañía nuevo es editando el código. Para hacer que el código sea más útil en líneas generales, puede usar una función InputBox para pedir al usuario que proporcione datos.

El siguiente código es el script final. Se trata de una solución de Outlook útil y completa.

Sub CompanyChange()
    Dim ContactsFolder As Folder
    Set ContactsFolder = Session.GetDefaultFolder(olFolderContacts)
    Dim OldCompanyName As String
    Dim NewCompanyName As String
    Dim OldEmailDomain As String
    Dim NewEmailDomain As String
    Dim ContactsChangedCount As Integer
    
    ' Ask user for inputs
    MsgBox ("This script will change all of your contacts from one company to another.")
    OldCompanyName = InputBox("Under what name are the contacts listed in Outlook now?")
    NewCompanyName = InputBox("What is the new company name to set them to?")
    OldEmailDomain = InputBox("What is the e-mail domain name currently listed after the @ sign? e.g. mycompany.com")
    NewEmailDomain = InputBox("What should the e-mail domain be set to? Leave blank and click OK if no change")
    ContactsChangedCount = 0
    
    Dim Contact As ContactItem
 
    ' loop through Contacts and set those who need it
    For Each Contact In ContactsFolder.Items
        If Contact.CompanyName = OldCompanyName Then
            Contact.CompanyName = NewCompanyName
            If NewEmailDomain <> "" Then
                Contact.Email1Address = Replace(Contact.Email1Address, OldEmailDomain, NewEmailDomain)
            End If
            Contact.Save
            ContactsChangedCount = ContactsChangedCount + 1
            Debug.Print "Changed: " & Contact.FullName
        End If
    Next
    ' confirm and clean up
    MsgBox (ContactsChangedCount & " contacts were changed from '" & OldCompanyName & "' to '" & NewCompanyName)
    Set Contact = Nothing
    Set ContactsFolder = Nothing
End Sub

Distribución del código

Se denomina implementación a la acción de mover el código del equipo donde se desarrolló a otros equipos, y puede ser una parte importante de un proyecto de programación. En esta sección, se analiza cómo se puede mover la nueva macro a otros equipos.

Primero, veamos un poco de contexto. El código de VBA para Outlook fue diseñado para ser un entorno de desarrollo de macros personal; no fue diseñado para ser implementado ni distribuido. Por lo tanto, no existe forma de guardar una macro en un documento de la manera en que puede hacerlo con otras aplicaciones de Office, como Excel o Word.

Para mover macros de VBA para Outlook de un equipo a otro, puede exportar módulos de código desde el primer equipo e importarlos en el segundo equipo. También puede copiar el código de origen del proyecto y pegarlo en Project1 en el segundo equipo usando el Editor de Visual Basic.

Si desarrolla una solución que desea distribuir a varias personas, debe convertir el código de VBA en un complemento COM de Outlook. Sin embargo, desarrollar un complemento COM suele requerir un conocimiento sobre programación considerablemente mayor que crear una macro breve. De modo que si el proyecto de VBA es relativamente sencillo, y no son muchas las personas que necesitan usarlo, envíeles el código con instrucciones en las que se explique cómo abrir el Editor de Visual Basic e importar manualmente el módulo de código.

Importación y exportación de módulos

Intente exportar e importar la nueva macro en Module1. Seleccione Module1 en el panel Proyecto y, a continuación, haga clic en el menú Archivo en el Editor de Visual Basic, y seleccione Exportar archivo. El Editor de Visual Basic le pedirá que guarde el archivo como un archivo de Basic (.bas). Guarde el archivo como Contacts.bas. (Si la extensión del archivo predeterminado es de algún otro tipo, compruebe que ha seleccionado Module1 y, a continuación, vuelva a abrir el cuadro de diálogo Exportar archivo).

Abra Contacts.bas en el Bloc de notas para ver el código con una línea de encabezado que el Editor de Visual Basic usará para nombrar el módulo cuando importe el código.

Attribute VB_Name = "Module1"

Module1 se usa para scripts y experimentos a nivel local, de modo que cambie el nombre por algo que describa las macros en el módulo. Por ejemplo, puede usar Contacts como nombre del módulo para que sea análogo al nombre del archivo .bas. Más adelante, si escribió otras macros para automatizar diferentes aspectos de los contactos, podría agregar el código aquí y tener un grupo lógico de macros en un único módulo.

Attribute VB_Name = "Contacts"

Ahora, vuelva al Editor de Visual Basic. Haga clic en Archivo, en Importar archivo y, a continuación, seleccione Contacts.bas para importarlo.

Haga doble clic en el módulo nuevo Contacts que aparece en la lista Módulos del panel Proyecto para ver el código.

En Outlook, haga clic en el botón Macros de la ficha Programador. Debe mostrarse una entrada para …Project1.Contacts.CompanyChange.

De esta manera finaliza la forma más sencilla de distribuir código de macros a otros miembros de la organización. Por supuesto, para importar Contacts.bas y agregar el módulo Contacts en el Editor de Visual Basic, sigue siendo necesario habilitar la ficha Programador en Outlook 2010. Una vez importado el archivo Contacts.bas, se puede ejecutar la macro a partir de la ficha Programador o abrir Opciones de Outlook y asignar la macro a un botón de la Barra de herramientas de acceso rápido o a la propia cinta de opciones. Para obtener más información sobre opciones de implementación más complejas, vea la sección Referencias adicionales.

Resumen

En este artículo se analizó la eficacia de VBA en Microsoft Outlook. VBA puede automatizar tareas repetitivas y ampliar Outlook 2010. Mediante el uso de un ejemplo real de programación con VBA, en este artículo se explicó cómo abrir la barra de herramientas Programador, cómo crear macros y, a continuación, ejecutarlas, editarlas y depurarlas. Además, se analizaron las variables de VBA, el modelo de objetos y las funciones, como If y For Each.

Recursos adicionales

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