Crear complementos de VBA para ampliar y automatizar los documentos de Microsoft Office

Resumen:  aprenda a crear complementos para Microsoft Word, Microsoft PowerPoint y Microsoft Excel usando Microsoft Visual Basic para Aplicaciones (VBA). Analice si VBA es la mejor opción para su complemento y examine varias tareas de ejemplo que se pueden incluir en los complementos de VBA para Microsoft Office 2010.

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

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

En este artículo
¿Por qué utilizar VBA?
Cuándo utilizar VBA
Creación de archivos de complementos de VBA
Solución de problemas de complementos
¿Qué se puede hacer con los complementos de VBA?
Administración del código de VBA
Pasos siguientes
Recursos adicionales
Acerca de la autora

Se aplica a:  Microsoft Excel 2010 | Microsoft PowerPoint 2010 | Microsoft Word 2010 | Microsoft Excel para Mac 2011 | Microsoft PowerPoint para Mac 2011 | Microsoft Word para Mac 2011

Publicado:  febrero de 2011

Proporcionado por:  Stephanie Krieger

Contenido

  • ¿Por qué utilizar VBA?

  • Cuándo utilizar VBA

  • Creación de archivos de complementos de VBA

  • Solución de problemas de complementos

  • ¿Qué se puede hacer con los complementos de VBA?

  • Administración del código de VBA

  • Pasos siguientes

  • Recursos adicionales

  • Acerca de la autora

Hacer clic para obtener código Descargar el código de ejemplo

¿Por qué utilizar VBA?

Como desarrollador, es posible que utilice VBA en ocasiones para interactuar con el código administrado al automatizar documentos y plantillas. Pero, ¿está seguro de que está aprovechando al máximo VBA? Si lo primero que hace al empezar un proyecto de Microsoft Office es abrir Microsoft Visual Studio, es posible que esté trabajando más de lo que necesita.

Si los requisitos del proyecto se benefician de la potencia del código administrado, por ejemplo para la integración de servidores, para un diseño de UI más flexible o para aprovechar la tecnología de Microsoft Silverlight, deje de leer y abra Visual Studio. Si, por el contrario, puede satisfacer los requisitos de un proyecto concreto con una solución de creación más sencilla, más rápida y posiblemente más rentable, puede que sea hora de darle una oportunidad a VBA.

Cuándo utilizar VBA

Hace poco, una gran empresa se encontró con algunas complicaciones con un complemento básico que estaba creando en Visual Studio. La finalidad del complemento era proporcionar una pestaña de cinta en Word, PowerPoint y Excel que crease un vínculo con contenido personalizado de la Ayuda.

Cuando los representantes de la empresa se pusieron en contacto conmigo para pedirme ayuda, les pregunté por qué no utilizaban VBA para algo tan sencillo. Me dijeron que no era por nada en particular, era solo que no se les había ocurrido usar algo distinto a Visual Studio. Lo que hice fue abrir los editores de Visual Basic en las aplicaciones de Office 2010. Alrededor de una hora más tarde, disponían de complementos sencillos y completos para Word, Excel y PowerPoint con una UI que tenía exactamente el mismo aspecto que el que buscaban en un principio.

Como afirma el dicho, no se matan moscas a cañonazos. Si VBA puede hacer lo usted necesita, verá que le dedica menos tiempo, escribe menos código y crea un paquete con menos dependencias, más sencillo de implementar.

Está claro que el ejemplo anterior es bastante sencillo, pero le sorprendería saber todo lo que puede hacer con un complemento de VBA, independientemente de si se dedique a crear soluciones para un usuario o para miles de ellos. Como asesora de documentación profesional, creo soluciones basadas en VBA en Word, PowerPoint y Excel para empresas con un total de medio millón de usuarios en unos 100 países o regiones.

En las secciones siguientes, aprenderá a crear archivos de complementos en Word, PowerPoint y Excel. A continuación, analizará ejemplos con los tipos de tareas que se pueden incluir en los complementos, desde la simplificación de la creación de documentos empresariales hasta la interacción con la funcionalidad integrada de Office 2010.

Creación de archivos de complementos de VBA

Lea esta sección y descubrirá cómo crear complementos sencillos para Word, PowerPoint y Excel usando el ejemplo anterior. Cada complemento proporciona una pestaña de cinta personalizada que ofrece al usuario acceso rápido a una selección personalizada de procedimientos.

Creación de un complemento de Word

Los complementos de VBA para son plantillas globales. Es decir, se trata de plantillas instaladas de manera que estén disponibles al margen del documento activo. Por lo tanto, para crear un complemento de Word, empiece por crear un nuevo archivo .dotm (plantilla de Word habilitada para macros).

Para crear el proyecto VBA

  1. Con la nueva plantilla .dotm abierta en Word, en la pestaña Desarrollador, en el grupo Código, haga clic en Visual Basic o bien presione Alt+F11.

  2. En el menú Insertar, haga clic en Módulo. A continuación, en la ventana Propiedades, ponga nombre al módulo.

  3. En el menú Herramientas, haga clic en Propiedades del proyecto para poner un nombre al proyecto y agregue la descripción del proyecto o una protección con contraseña.

A continuación, se muestra el código del complemento de Ayuda personalizado. Copie el código en el módulo que acaba de crear.

Importante

Para los archivos a los que se hace referencia en estas macros, puede descargar las guías de productos de Office 2010 y la guía del menú interactivo de la cinta del Centro de descarga de Microsoft. Busque un archivo de marcadores de posición que pueda usar como documento de instrucciones de la información de personalización de la organización en la descarga de ejemplo de este artículo. Tenga en cuenta que debe guardar los archivos de referencia usando los nombres de archivo y la ruta de acceso especificados en las macros, a fin de probar el complemento. Si utiliza una ruta o unos nombres de archivo distintos, edite las macros según corresponda.

Tenga en cuenta también que hay versiones completas de todos los ejemplos de complementos de este artículo incluidos en la descarga de ejemplo. Sin embargo, para probar los complementos de Ayuda personalizados para Word, PowerPoint y Excel, debe descargar y guardar o instalar (respectivamente) las guías de productos correspondientes y la guía del menú interactivo de la cinta.

Option Explicit
Public oPath As String

Sub CommandRef(ByVal Control As IRibbonControl)
On Error GoTo Errorhandler
'The FollowHyperlink method used in this procedure requires an open document.
With Documents
    If .Count = 0 Then
    .Add
    End If
End With
'If you use the environmental variable for program files as shown here,
'(which is usually advisable) rather than hard-coding the drive letter,
'note that 64-bit machines that include both a Program Files x86 folder
'and a Program Files folder may not point to the desired location.
oPath = Environ("ProgramFiles")
ActiveDocument.FollowHyperlink Address:=oPath & _
    "\CompanyTools\CustomHelp\Word 2010\Word 2010 Guide.html", NewWindow:=True
Exit Sub
Errorhandler:
'Error 4198 occurs if the file name or path is not found.
If Err.Number = 4198 Then
    MsgBox "The Word 2010 Interactive Guide is unavailable. " & _
        "Consult your local IT department for assistance.", vbInformation
End If
End Sub

Sub ProductGuide(ByVal Control As IRibbonControl)
On Error GoTo Errorhandler
With Documents
    If .Count = 0 Then
        .Add
    End If
End With
oPath = Environ("ProgramFiles")
ActiveDocument.FollowHyperlink Address:=oPath & _
    "\CompanyTools\CustomHelp\WordProductGuide.pdf", NewWindow:=True
Exit Sub
Errorhandler:
If Err.Number = 4198 Then
    MsgBox "The file 'WordProductGuide.pdf' is unavailable. " & _
        "Consult your local IT department for assistance.", vbInformation
End If
End Sub

Sub BrandOverview(ByVal Control As IRibbonControl)
On Error GoTo Errorhandler
With Documents
    If .Count = 0 Then
    .Add
    End If
End With
oPath = Environ("ProgramFiles")
ActiveDocument.FollowHyperlink Address:=oPath & _
    "\CompanyTools\CustomHelp\Brand Guidelines.pdf", NewWindow:=True
Exit Sub
Errorhandler:
If Err.Number = 4198 Then
    MsgBox "The file 'Brand Guidelines.pdf' is unavailable. " & _
        "Consult your local IT department for assistance.", vbInformation
End If
End Sub

Nota

Observe que los procedimientos de este ejemplo de código se presentan como controles de la cinta. Dicho esto, solo puede ejecutar el procedimiento desde un control de cinta asociado. Por lo tanto, en un complemento habitual en el que las macros tendrían mucho más código, suele resultar más adecuado tener un módulo independiente con un conjunto de procedimientos independientes para los controles de la cinta y llamar a las macros desde los controles.

Cuando haya completado el módulo, puede guardar y cerrar la plantilla.

Para instalar la plantilla global, salga de Word y guarde el archivo en la carpeta de inicio de Word. Cuando se inicie Word, cargará automáticamente las plantillas globales situadas en dicha carpeta. Sin embargo, para poder cargar este complemento debe agregar antes el marcado de Office Open XML de la pestaña de cinta personalizada, tal y como se indica en la sección siguiente.

En Microsoft Windows 7 y Windows Vista, la ubicación de inicio de Word predeterminada es C:\Users\[nombre_usuario]\AppData\Roaming\Microsoft\Word\Startup. Para administrar los complementos de plantillas globales o para comprobar si el complemento se ha cargado, haga clic en Complementos en la pestaña Desarrollador de Word.

Si necesita editar el código después de cargar el complemento, abra el archivo .dotm en Word. Word reemplazará automáticamente la instancia que se ha cargado antes por la plantilla abierta. Edite el código en el editor de Visual Basic, guarde sus cambios y, a continuación, cierre el archivo .dotm. La instancia cargada del complemento se actualiza automáticamente con los últimos cambios y se mantiene cargada; no es necesario que reinicie Word.

Nota

El contenido de la UI personalizada de este artículo se aplica a Office 2010, pero no a Office para Mac 2011. En Word 2011, puede agregar a su plantilla específica barras de herramientas y menús personalizados mediante programación. También puede hacerlo desde Word, sin necesidad de usar código. Para hacerlo, en el menú Ver, apunte a Barras de herramientas y, a continuación, haga clic en Personalizar barras de herramientas y menús.

Tenga también en cuenta que, a partir de esta escritura, es posible que se necesite un paso adicional para cargar automáticamente una plantilla global en Word 2011 cuando se inicie la aplicación. Si la plantilla no se recarga después de seguir las instrucciones anteriores, agregue una macro de una línea a un módulo de la plantilla global Normal.dotm que indique que se agregue la macro. El código es el siguiente (observe que debe cambiar la ubicación y el nombre del archivo en el código que aplicará a su plantilla global):

Sub AutoExec()AddIns.Add fileName:="[Complete Path and File Name]", Install:=TrueEnd Sub

Creación de la UI personalizada para el complemento

Es posible que ya esté usando una utilidad para ayudarle a personalizar la cinta en un documento o una plantilla, pero agregar el marcado a mano es igual de rápido y fácil. Al igual que cuando escribe un marcado cualquiera de Office Open XML, puede usar el bloc de notas de Windows o cualquier editor de texto para escribir este marcado. Sin embargo, resulta probable que Visual Studio le resulte útil en este caso, porque puede hacer referencia al esquema de personalización de la cinta, lo que significa que puede sacar partido de IntelliSense.

Nota

En los pasos siguientes, se presupone que está abriendo el paquete de documentos y agregando manualmente el customUI a su archivo. Si nunca lo ha hecho, es una buena forma de conocer la estructura de Office Open XML que se esconde tras el documento. Si tiene experiencia editando un paquete de documentos de Office Open XML y usa Visual Studio 2010, puede que quiera probar la herramienta Open XML Package Editor Power Tool para abrir el documento o la plantilla directamente en Visual Studio. Al hacerlo, se ahorrará algunos pasos, dado que la herramienta le permite agregar carpetas directamente al paquete, facilita la adición de relaciones y administra automáticamente los tipos de contenidos cuando se agrega un elemento o un archivo. Más información y descarga de la herramienta Open XML Package Editor Power Tool para Visual Studio 2010

También podría usar una herramienta para ayudarle a crear la estructura customUI; por ejemplo, Custom UI Editor, una herramienta gratuita que agrega automáticamente los elementos necesarios y proporciona ejemplos del marcado customUI.xml.

El marcado de este ejemplo incluye solo algunos botones, pero muestra varias personalizaciones que se pueden incluir fácilmente. Por ejemplo, observe en la Ilustración 1 que el tercer botón es una imagen personalizada. El marcado incluye también texto de información en pantalla personalizado y aceleradores KeyTip personalizados.

Para agregar marcado customUI personalizado a un documento o una plantilla de Office 2010

  1. Cree una carpeta denominada customUI. Puede crear esta carpeta en cualquier ubicación de fácil acceso, como el escritorio de Windows.

  2. Agregue un archivo denominado customUI.xml a la nueva carpeta y, a continuación, agregue el marcado de la personalización de cinta a dicho archivo. El código siguiente es el marcado que se debe incluir en el ejemplo de complemento de Word anterior.

    <?xml version="1.0" encoding="utf-8"?>
    <customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui">
      <ribbon>
        <tabs>
          <tab id="customTab" label="Company Help" >
            <group id="CustomHelp" label="Get Help" >
              <button id="WebGuide" visible="true" size="large" 
                      label="Interactive Word 2010 Guide" keytip="W" 
                      screentip="Get help for finding commands on the ribbon." 
                      onAction="CommandRef" imageMso="FindDialog"/>
              <button id="ProdGuide" visible="true" size="large" 
                      label="Word 2010 Product Guide" keytip="P" 
                      screentip="Learn what's new in Word 2010 and how to find it." 
                      onAction="ProductGuide" imageMso="AdpPrimaryKey"/>
              <button id="BrandGuide" visible="true" size="large" 
                      label="Company Brand Guidelines" keytip="B" 
                      screentip="Get help for using company branding." 
                      onAction="BrandOverview" image="brand"/>
            </group>
          </tab>
        </tabs>
      </ribbon>
    </customUI>
    
  3. Agregue la carpeta customUI al paquete de plantillas o documentos.

    Para hacerlo, puede cambiar la extensión del archivo por .zip y, a continuación, abrir el paquete ZIP para arrastrar dentro la nueva carpeta. También puede usar una utilidad que le permita abrir el paquete sin cambiar la extensión del archivo, como 7-Zip.

    Advertencia

    Si cambia la extensión del archivo para abrir el paquete, no olvide volver a cambiarla cuando haya terminado.

  4. Agregue una definición de relación al archivo customUI al archivo de relaciones de nivel superior (.rels) del paquete ZIP.

    1. En la carpeta _rels, abra el archivo .rels.

    2. Agregue la siguiente definición de relación. Si hay otra relación en el archivo que ya use el identificador rID4, seleccione uno distinto para esta relación.

      <Relationship Id="rID4" Type="https://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="customUI/customUI.xml"/>
      

      Nota

      Este caso particular requiere los pasos 5 a 7 porque utiliza una imagen personalizada para el botón de directrices de marca de la empresa, como se muestra en la Ilustración 1. Si el marcado solo usa imágenes integradas, no es necesario seguir más pasos. Para ver una lista de todas las imágenes integradas de Office 2010 que puede utilizar en el marcado customUI, vea la sección Recursos adicionales al final de este artículo.

  5. Cree dos subcarpetas en la carpeta customUI, una denominada _rels y, si usa el marcado de este ejemplo, otra denominada images.

  6. Coloque el archivo de imagen de la imagen de control personalizado (usada en el tercer botón de este ejemplo) en la carpeta de imágenes y cree un archivo denominado customUI.xml.rels que colocar en la carpeta _rels. Use el marcado siguiente para el archivo .rels.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Relationships xmlns="https://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="brand" Type="https://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="images/brandicon.png"/></Relationships>
    
  7. Abra el archivo [tipos_contenido].xml en el nivel superior del paquete ZIP. Agregue una definición para la extensión de archivo .png (formato de archivo de la imagen personalizada), si no la hay todavía. Use el marcado siguiente.

    <Default Extension="png" ContentType="image/png"/>
    

Ilustración 1. Resultados del marcado customUI

Resultados del marcado customUI

Más adelante, en este mismo artículo, verá ejemplos de tareas customUI adicionales, como las siguientes:

  • Uso de un control Botón de expansión.

  • Adición de personalización de la cinta a una pestaña integrada.

  • Especificación de la posición de los controles en una pestaña o para una pestaña de la cinta.

  • Uso de VBA con el marcado customUI para administrar la visibilidad de los controles.

Creación de un complemento de PowerPoint

Para crear un complemento de PowerPoint, empiece por crear un archivo de presentación de PowerPoint habilitado para macros (.pptm). PowerPoint usa un formato de archivo único para los complementos (.ppam), pero es de solo lectura. Por lo tanto, el código se escribe y se edita en el archivo .pptm y, a continuación, se guarda una copia como complemento .ppam.

Para crear un complemento de PowerPoint

  1. Con el nuevo archivo .pptm abierto, abra el editor de Visual Basic.

    Nota

    Si está trabajando con el editor de Visual Basic para más de una aplicación al mismo tiempo, utilice Alt+F11 para pasar del editor de Visual Basic a la aplicación correspondiente, y al contrario.

  2. Siga los mismos pasos que se proporcionan en la sección del complemento de Word de este artículo para crear un nuevo proyecto de VBA. A continuación, puede copiar el código de dicha sección para el módulo de Ayuda personalizado y editarlo para PowerPoint, como se indica a continuación:

    1. Reemplace el objeto de la colección Documents y el objeto ActiveDocument por Presentations y ActivePresentation, respectivamente.

    2. Reemplace las referencias al contenido y las ubicaciones de archivos de Word 2010 por referencias a contenido similar de PowerPoint 2010.

      También puede descargar desde los vínculos anteriores la guía de productos PowerPoint y la guía del menú interactivo de la cinta. Al igual que con el complemento de Word, recuerde guardar los archivos de ejemplo de PowerPoint y darles un nombre, de manera que coincidan con la ruta de acceso y los nombres de archivo especificados en la macro. Dado que algunos de estos archivos son distintos a los del complemento de Word, será necesario editar los nombres de los archivos de las macros para que coincidan también con los nombres de los archivos de ejemplo.

  3. Guarde y cierre el archivo .pptm.

  4. Agregue la carpeta customUI y los contenidos necesarios al archivo .pptm.

    Puede usar los pasos y el marcado proporcionados en la sección anterior, editando el marcado (por ejemplo, las etiquetas y el texto de información en pantalla) según sea necesario para el contenido seleccionado de PowerPoint. Asegúrese de seguir los pasos para editar los archivos .rels y [tipos_contenido].xml que se encuentran en el archivo de PowerPoint, en lugar de reemplazarlos.

  5. Abra el archivo .pptm en PowerPoint. Tras confirmar que la pestaña personalizada Cinta tiene el aspecto adecuado y funciona correctamente, guarde una copia del archivo como archivo de Complemento de PowerPoint (.ppam). PowerPoint guardará automáticamente el complemento en la carpeta de complementos de Microsoft.

    En Windows 7, la ruta de acceso predeterminada a la carpeta de complementos de Microsoft es la siguiente: C:\Users\nombre_usuario\AppData\Roaming\Microsoft\AddIns.

Nota

En PowerPoint para Mac 2011, puede agregar una barra de herramientas o un menú a su complemento mediante programación. Vea las descargas adicionales de este artículo para obtener un ejemplo.

Para cargar el complemento de PowerPoint

  1. En PowerPoint, en la pestaña Desarrollador, haga clic en Complementos.

  2. Haga clic en Agregar nuevo.

  3. Seleccione el archivo que acaba de guardar y haga clic en Abrir.

  4. Si aparece una advertencia de seguridad sobre macros, haga clic en Habilitar macros.

De manera predeterminada, los archivos de complementos de PowerPoint cargados no aparecen en el Explorador de proyectos del editor de Visual Basic. Para ver y abrir proyectos .ppam cargados, agregue un nuevo valor al Registro de Windows. En la clave HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\PowerPoint\Options, agregue un valor DWORD denominado DebugAddins, con el valor 1. A continuación, reinicie PowerPoint. Tenga en cuenta que puede ver, exportar y copiar contenido del proyecto .ppam cargado. También puede realizar ediciones y probarlas en el complemento cargado, lo que hace que la función del complemento resulte similar a un práctico bloc de notas a la hora de solucionar problemas o de probar algo nuevo. Sin embargo, no puede guardar sus cambios directamente en el archivo de complemento cargado.

Creación de un complemento de Excel

Es posible que los complementos de Excel sean los más eficaces, una vez creados, entre los tres programas analizados en este artículo, ya que puede guardar un archivo como complemento de Excel (.xlam), cargar el archivo de complemento y, a continuación, escribir y editar el código directamente en el archivo de complemento mientras sigue cargado.

Para crear u cargar un complemento de Excel

  1. Cree un nuevo archivo de Excel y guárdelo como Complemento de Excel (.xlam). Excel guardará automáticamente el archivo en la carpeta de complementos de Microsoft.

  2. En la pestaña Desarrollador, haga clic en Complementos. El complemento que acaba de guardar debería aparecer en la lista. Si es así, selecciónelo (se cargará el complemento) y, a continuación, cierre el cuadro de diálogo. De lo contrario, haga clic en el botón Examinar para encontrar y cargar su archivo de complemento.

  3. Abra el editor de Visual Basic. A continuación, cree y rellene el proyecto, según lo explicado en las secciones de Word y PowerPoint anteriores.

    Si copia el código de VBA proporcionado en la sección de complementos de Word, cambie las referencias al objeto de la colección Documents y al objeto ActiveDocument por Workbooks y ActiveWorkbook, respectivamente. Cambie también las referencias a los archivos y las ubicaciones de Word, según corresponda al contenido de Excel. Puede descargar desde los vínculos anteriores la guía de productos Excel y la guía del menú interactivo de la cinta para este complemento.

  4. Salga de Excel y vaya a la carpeta de complementos de Microsoft para localizar su nuevo archivo de complemento.

  5. Agregue customUI al archivo de complemento.

    Si usa el marcado y el código proporcionados antes para el complemento de, edite los atributos (como las etiquetas y el texto de información en pantalla) según sea necesario para el contenido de Excel. Asegúrese de seguir los pasos anteriores para personalizar la UI y editar los archivos .rels y [tipos_contenido].xml que se encuentran en el archivo de Excel.

La próxima vez que abra Excel, el complemento debería seguir cargado y debería poder ver customUI.

Solución de problemas de complementos

Si el complemento no se carga o no se ejecuta correctamente, compruebe los siguientes problemas habituales:

  • No aparece la personalización de la cinta.  Si la personalización de la cinta no aparece cuando se abre el archivo que contiene customUI (o cuando se carga el complemento), es posible que se trate de un error de sintaxis. Compruebe el archivo customUI.xml que ha creado y el archivo .rels donde ha agregado la relación.

    • Recuerde que un error mínimo, como la falta de unas comillas o de un paréntesis, o un uso incorrecto de las mayúsculas, podría provocar que el elemento de documento XML fallase.

    • Compruebe también la definición de relación agregada al archivo .rels para confirmar que la ruta de acceso coincida con el nombre de la carpeta y el archivo donde ha almacenado el marcado customUI.

  • No se ejecuta un procedimiento.  Si un procedimiento no se ejecuta al hacer clic en un control de complemento de la cinta, compruebe las siguientes posibilidades:

    • En el marcado customUI, ¿coincide el nombre del procedimiento que ha usado en el atributo OnAction de dicho control con el nombre del procedimiento que aparece en el código de VBA?

    • En el procedimiento utilizado como valor del atributo OnAction, ¿se declara también el marcado customUI como control de la cinta en VBA?

  • No se ejecuta ninguno de los códigos de complementos.  Si la UI del complemento aparece en la cinta, pero ninguno de los procedimientos se ejecuta, lo más probable es que se deba a un problema de seguridad.

    En la pestaña Desarrollador, haga clic en Seguridad de macros. Seleccione la opción Deshabilitar todas las macros con notificación. Por supuesto, no se recomienda permitir que se ejecuten todas las macros, pero si deshabilita las macros sin notificación, no se podrán cargar los complementos.

¿Qué se puede hacer con los complementos de VBA?

Como se ha mencionado antes, el ejemplo de la Ayuda personalizada se cuenta como uno de los usos más sencillos de un complemento. Puede usar VBA para crear complementos que proporcionen soluciones de documentos completas para muchos tipos distintos de requisitos.

Las tareas de las secciones siguientes son solo el principio. Nuestra intención es ayudarle a empezar con algunos conceptos que podrá aplicar a muchas necesidades distintas, como la recopilación y el almacenamiento de información sobre usuarios, el relleno de documentos, la evaluación del contenido de un documento y la interacción con las tareas integradas, como el cierre de un archivo o el inicio de la aplicación.

Cuando examine estos conceptos, recuerde que la mayoría del VBA subyacente mostrado se puede aplicar a Word, PowerPoint o Excel, independientemente de la aplicación que use el ejemplo específico.

Automatización de las tareas de creación de documentos

Al automatizar contenido para los usuarios, es posible que tenga que recopilar y almacenar información sobre el usuario y sus preferencias, que luego utilizará para generar o personalizar el contenido mediante programación.

En este ejemplo, un complemento de Word recopila la información de contacto y la preferencia sobre el tamaño del papel. El complemento también ofrece al usuario la capacidad de generar un documento de carta con la marca de la empresa. Cuando cree una carta, el complemento utilizará automáticamente la información guardada.

Este complemento de ejemplo contiene un formulario del usuario (UserForm) y tres módulos:

  • El formulario del usuario se usa para recopilar y almacenar la información del usuario y sus preferencias.

  • Uno de los módulos es para las variables requeridas por varios procedimientos, como la recuperación de la información del usuario almacenada.

  • Otro es para los controles de la cinta.

  • El último es para que el código genere documentos personalizados.

Para esta tarea, cree un cuadro de diálogo (UserForm) en el que el usuario pueda introducir la información. A continuación, guarde dicha información en el Registro de Windows.

Nota

Antes de comenzar el procedimiento siguiente, debe crear el proyecto de VBA. Tenga en cuenta que, en el caso de Office para Mac 2011, puede usar el mismo código indicado para guardar o recuperar información en el Registro de Windows. En Mac OS, estos métodos funcionan igual y guardan la información en un archivo .plist en la carpeta de preferencias de la biblioteca.

Para recopilar y guardar la información del usuario

  1. En el editor de Visual Basic, cree y rellene el UserForm con los controles que vaya a necesitar. Para ello, en el menú Insertar, haga clic en el UserForm. Si el cuadro de herramientas (que contiene los controles de UserForm disponibles) no aparece automáticamente, en el menú Ver, haga clic en Cuadro de herramientas.

    1. Haga clic en el control que necesite (como una etiqueta o un cuadro de texto) y, a continuación, arrástrelo al UserForm para crear el control con el tamaño necesario.

      (Las herramientas de alineación y espacio están disponibles en el menú Formato.)

    2. Use la ventana Propiedades para poner un nombre al control y definir varias propiedades, como agregar un título o una tecla de aceleración, definir el alto y el ancho, o definir la posición desde la parte superior izquierda. En esta ventana, puede especificar muchos aspectos del aspecto y el comportamiento del control.

    En la Ilustración 2 se muestra el objeto UserForm completo de este ejemplo. Fíjese en las posibilidades de uso y haga que la interacción del usuario con el UserForm resulte lo más sencilla posible. Por ejemplo, se proporcionan teclas de aceleración para los usuarios que usan teclados, los controles tienen un tamaño y una alineación constantes, y se utilizan marcos para organizar visualmente los controles.

    Además de las características que puede ver, el orden de las pestañas se ha definido para facilitar su uso por parte de los usuarios que utilicen teclados. Para definir el orden de las pestañas en los controles de un UserForm, haga clic con el botón secundario en el formulario y, a continuación, haga clic en Orden de las pestañas. A continuación, haga clic con el botón secundario del ratón en cada marco y haga clic en Orden de las pestañas para reorganizar los controles que aparecen en el marco seleccionado.

    Ilustración 2. UserForm con la codificación completa

    UserForm después de completar la codificación

  2. Cree un módulo para las variables que necesitará para el UserForm, incluidas aquellas variables que se usan para recuperar la configuración que guarda el código UserForm y para rellenar los controles del UserForm.

    Option Explicit
    Public oName As String, oTitle As String, oAdd1 As String, oAdd2 As String, _
    oPh1 As String, oPh2 As String, oPDat1 As String, oPDat2 As String, i As Integer, _
    oPaper As String, oPhone(2) As String, oDoc As Word.Document
    
    Sub DocVarbs()
    'GetSetting and SaveSetting use VB and VBA Program Settings in the Registry: _
    HKEY_CURRENT_USER\Software\VB and VBA Program Settings
    oName = GetSetting("CustomDocs", "Info", "Name")
    oTitle = GetSetting("CustomDocs", "Info", "Title")
    oAdd1 = GetSetting("CustomDocs", "Info", "Add1")
    oAdd2 = GetSetting("CustomDocs", "Info", "Add2")
    oPh1 = GetSetting("CustomDocs", "Info", "PLabel1")
    oPh2 = GetSetting("CustomDocs", "Info", "PLabel2")
    oPDat1 = GetSetting("CustomDocs", "Info", "PData1")
    oPDat2 = GetSetting("CustomDocs", "Info", "PData2")
    oPaper = GetSetting("CustomDocs", "Info", "Paper")
    
    'populates the combo boxes in the dialog box
    oPhone(0) = "Phone"
    oPhone(1) = "Fax"
    oPhone(2) = "Email"
    
    'sets default values for the first use of the info dialog box
    'or in the case that a user generates a document with the tools
    'before saving information.
    If oName = "" Then
        oName = Application.UserName
        oChk = True
    End If
    If oPh1 = "" Then oPh1 = "Phone"
    If oPh2 = "" Then oPh2 = "Email"
    If oPaper = "" Then oPaper = "L"
    End Sub
    
  3. Agregue el código del UserForm.

    El procedimiento Initialize rellena el formulario con información que ya se ha guardado o con los valores predeterminados indicados en el procedimiento de variables mostrado en el paso anterior. El procedimiento cmdSave guarda la información proporcionada por el usuario en el Registro.

    Option Explicit
    
    Private Sub cmdCancel_Click()
    Unload Me
    End Sub
    
    Private Sub cmdSave_Click()
    Dim myP As String
    With Me
        SaveSetting "CustomDocs", "Info", "Name", .txtName.Value
        SaveSetting "CustomDocs", "Info", "Title", .txtTitle.Value
        SaveSetting "CustomDocs", "Info", "Add1", .txtAdd1.Value
        SaveSetting "CustomDocs", "Info", "Add2", .txtAdd2.Value
        SaveSetting "CustomDocs", "Info", "PLabel1", .cmbPh1.Value
        SaveSetting "CustomDocs", "Info", "PLabel2", .cmbPh2.Value
        SaveSetting "CustomDocs", "Info", "PData1", .txtPDat1.Value
        SaveSetting "CustomDocs", "Info", "PData2", .txtPDat2.Value
        If .optA.Value = True Then
            myP = "A"
        Else
            myP = "L"
        End If
        SaveSetting "CustomDocs", "Info", "Paper", myP
    End With
    Unload Me
    End Sub
    
    Private Sub UserForm_Initialize()
    Call modVarbs.DocVarbs
    With Me
        .txtName.Value = oName
        .txtTitle.Value = oTitle
        .txtAdd1.Value = oAdd1
        .txtAdd2.Value = oAdd2
        .txtPDat1.Value = oPDat1
        .txtPDat2.Value = oPDat2
        .cmbPh1.List() = oPhone
        .cmbPh2.List() = oPhone
        .cmbPh1.Value = oPh1
        .cmbPh2.Value = oPh2
        If oPaper = "L" Then
            .optL.Value = True
        Else
            .optA.Value = True
        End If
    End With
    End Sub
    
  4. Cree un módulo para Controles de la cinta. En dicho módulo, agregue un procedimiento para mostrar el UserForm y declare el procedimiento como control de la cinta.

    Sub UserInfo(ByVal control As IRibbonControl)
    frmInfo.Show
    End Sub
    

Tenga en cuenta que en este ejemplo se guarda la información del usuario en el Registro. Así, se podrá acceder a la misma información desde otros complementos, si fuese necesario, por ejemplo al crear contenido personalizado para PowerPoint o Excel. De hecho, el código y el UserForm de este ejemplo se podrían haber creado del mismo modo en PowerPoint o Excel.

Para crear un documento personalizado

  • Para esta tarea, empiece por una plantilla de documento, como la carta con la marca de la empresa de este ejemplo. El código de este ejemplo genera un documento a partir de la plantilla. A continuación, personaliza el documento basándose en las preferencias del usuario y rellena con la información almacenada del usuario los controles de contenido que aparecen que aparecen en el cuerpo del documento y en el pie de página.

  • Observe, en la Ilustración 3, que esta plantilla de documento con tamaño de carta incluye dos formas de fondo (para el fondo en gris degradado y para la barra roja) que se tendrán que ajustar mediante programación si la preferencia para el tamaño del papel del usuario es A4. Se ha puesto nombre a estas formas para facilitar su identificación en el código utilizando el panel Selección en Word 2010. Para acceder al panel Selección, busque en la pestaña Inicio y, a continuación, en el grupo Edición, haga clic en Seleccionar.

  • En la Ilustración 3, el nombre y el título del cuerpo del documento y la dirección, el teléfono y el correo electrónico (además de las etiquetas de teléfono y correo electrónico) del pie de página se encuentran en los controles de contenido. Puede insertar controles de contenido desde la pestaña Desarrollador, en el grupo Controles. En el mismo grupo, haga clic en Modo de diseño para acceder al texto del marcador de posición y editarlo. Haga clic en Propiedades para personalizar la configuración del control. Puede, por ejemplo, agregar las etiquetas que se usan para identificar los controles de contenido en el código siguiente.

    Nota

    En Word para Mac 2011, no puede crear controles de contenido ni interactuar con ellos mediante programación. En su lugar, puede utilizar las celdas de tabla o los marcadores como puntos de referencia para rellenar el contenido del documento, tal y como se muestra en esta sección.

    Para agregar un marcador y que pase a estar oculto para el usuario, empiece el nombre del marcador con un subrayado. Tenga en cuenta que solo puede hacerlo mediante programación. Para ello, haga clic en el documento en el que quiera agregar el marcador y, a continuación, en el editor de Visual Basic, use la ventana Inmediato para agregar el marcador. El código para agregar un marcador en la selección se muestra en el siguiente ejemplo de código.

    Selection.Range.Bookmarks.Add("_name")

    Ilustración 3. Plantilla que usa el código para generar un documento

    Plantilla que usa el código para generar un documento

  • A continuación, se muestra el código para generar y personalizar este documento. Es una buena idea crear un módulo independiente para este código, ya que es probable que sea uno de los distintos tipos de documentos que el usuario podría crear a partir de una versión de un complemento como este. Cuando el código esté completo, agregue un procedimiento al módulo de la cinta creado antes y podrá usarlo para declarar un control de cinta que llame a esta macro.

    Sub NewLetter()
    On Error GoTo ErrorHandler
    Dim cc As ContentControl
    'If the user has not yet saved their information, prompt with that option.
    If GetSetting("CustomDocs", "Info", "Name") = "" Then
    i = MsgBox("Would you like to save your document details now, so that they " _
    & "can be added to your documents automatically?", vbQuestion + vbYesNoCancel, _
    "Custom Document Tools")
        If i = vbYes Then
        frmInfo.Show
        ElseIf i = vbCancel Then
        Exit Sub
        End If
    End If
    
    Call modVarbs.DocVarbs
    'set the defined Word.Document variable to the new document when it's created.
    'avoids errors related to multiple concurrent open documents.
    Set oDoc = Documents.Add(oPath & "\CompanyTools\CustomDocs\CompanyLetter.dotx")
    
    'if the saved paper size preference is A4, this changes the paper size and
    'then corrects the size and position of the background graphics in the header.
    If oPaper = "A" Then
    oDoc.PageSetup.PaperSize = wdPaperA4
        With oDoc.Sections(1).Headers(wdHeaderFooterFirstPage).Range
                With .ShapeRange("Backing")
                    .Width = 541.75
                    .Height = 841.95
                End With
                With .ShapeRange("Edge")
                    .Width = 53.2
                    .Height = 841.95
                    .Left = 542.5
                End With
        End With
    End If
    
    'populate the saved information in the controls provided in the template.
    For Each cc In oDoc.Range.ContentControls
        Select Case cc.Tag
            Case "Name"
            cc.Range.Text = oName
            Case "Title"
            cc.Range.Text = oTitle
        End Select
    Next cc
    
    For Each cc In oDoc.Sections(1).Footers(wdHeaderFooterFirstPage) _
    .Range.ContentControls
        Select Case cc.Tag
            Case "Address Line 1"
            cc.Range.Text = oAdd1
            Case "Address Line 2"
            cc.Range.Text = oAdd2
            Case "Label1"
            cc.Range.Text = oPh1
            Case "Label2"
            cc.Range.Text = oPh2
            Case "Phone1"
            cc.Range.Text = oPDat1
            Case "Phone2"
            cc.Range.Text = oPDat2
        End Select
    Next cc
    Exit Sub
    
    ErrorHandler:
    Select Case Err.Number
        Case 5174
        MsgBox "The document template is unavailable." & _
        " Please contact your local IT staff for assistance." _
        , vbInformation, "Custom Document Tools"
        Case Else
        MsgBox "The task ended in error. The template may be damaged. Note " & _
        " that your saved info may not have been added to the new document.", _
        vbInformation, "Custom Document Tools"
    End Select
    End Sub
    
  • En este ejemplo se han utilizado controles de contenido independientes para la información del usuario. Según los requisitos, como si es necesario que aparezca la misma información del usuario en varias ubicaciones del documento o si la información aparece en una portada que se pueda cambiar con el bloque de creación de otra portada, es posible que prefiera utilizar campos dependientes.

Creación de la UI para el complemento

La UI del complemento de este ejemplo usa un control de botón de expansión situado en la pestaña Inicio, tras el grupo Párrafo, como se ve en la Ilustración 4. Para crear esta personalización de la cinta, siga los pasos del 1 al 4 del ejemplo de customUI anterior. Para el paso 2, use el marcado siguiente.

<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui">
  <ribbon>
    <tabs>
      <tab idMso="TabHome" >
        <group id="CustomDocs" label="Company Docs" 
               insertAfterMso="GroupParagraph" >
          <splitButton id="CompanyDocs" size="large" >
            <menu id="coDocs" >
              <button id="NewLetter" visible="true" label="New Letter" 
                      onAction="Letter" imageMso="NewPageShort"/>
              <button id="UserInfo" visible="true" label="Save Info" 
                      onAction="UserInfo" imageMso="ContactAddMyContacts"/>
            </menu>
          </splitButton>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

Ilustración 4. Personalización de complemento en la pestaña Inicio

Personalización de complementos en la ficha Inicio

En este ejemplo, se utilizan controles de contenido para rellenar la información guardada. También puede realizar acciones similares para rellenar otros objetos en un documento de Word, en una presentación de PowerPoint o en un libro de Excel. Por ejemplo, rellene el contenido de una celda de la tabla o de una ubicación marcada en un documento de Word, en un cuadro de texto de PowerPoint o en una celda de la hoja de cálculo en Excel.

Nota

Los eventos de aplicaciones, analizados en el apartado siguiente, no son totalmente compatibles con Office para Mac 2011. PowerPoint 2011 no admite los Eventos de aplicaciones y Word 2011 tiene una compatibilidad muy limitada. Sin embargo, puede seguir los mismos pasos para configurar el módulo y el módulo de clase en Excel para Mac 2011, y ver la gama de eventos de aplicaciones allí disponibles. Consulte la Nota que sigue al procedimiento del apartado siguiente para empezar a trabajar con eventos de aplicaciones en Word o Excel. Observe también que los eventos de documento son compatibles con Word 2011 y que PowerPoint 2011 admite varias macros específicas para presentaciones.

Interacción con eventos de aplicaciones

Puede haber distintas razones por las que desee que su complemento interactúe con acciones integradas de la aplicación o de un documento concreto, como cuando el usuario imprime o cierra un archivo. VBA le ofrece varias maneras de interactuar con eventos, incluidos aquellos que suceden al nivel de la aplicación (es decir, independientemente del documento que esté abierto) y aquellos que suceden al nivel del documento (es decir, solo se aplican a un documento específico, como los que se basan en una plantilla concreta).

Los eventos de documento se incluyen habitualmente en VBA para un documento o una plantilla individuales. Puede crear código en su complemento para interactuar con el comportamiento integrado en el documento o la plantilla. Sin embargo, los eventos de la aplicación suelen resultar más adecuados para los complementos, ya que se pueden integrar directamente en los complementos de Word, PowerPoint o Excel para interactuar con las acciones que realiza el usuario.

En este ejemplo se analiza cómo crear un evento de la aplicación en PowerPoint para comprobar las presentaciones de la empresa cuando el usuario cierra el archivo. El código busca patrones múltiples en la presentación y ofrece al usuario la opción de limpiar mediante programación los patrones y dejar en el archivo solo el original, adecuado a la marca.

Nota

El artículo usa este ejemplo porque nos ayuda a afrontar una de las quejas más habituales de los usuarios, especialmente en aquellas empresas que están realizando la migración desde una versión de Microsoft Office que usa formatos de archivo heredados (Office 2003 o anterior) a Office 2010 (u Office 2007). Cuando los usuarios copian diapositivas de presentaciones creadas en una versión anterior, suelen utilizar el comando Mantener formato de origen porque parece que así la diapositiva tendrá el mismo aspecto que las demás en la presentación. En realidad, dicho comando agrega otro patrón y un conjunto de diseños cada vez que se usa. Los resultados son presentaciones con una cantidad de patrones difícil de manejar, un formato poco coherente y un creciente tamaño de los archivos, que tanto los usuarios como el personal de soporte técnico achacan a archivos dañados. Se puede utilizar una herramienta similar al código de ejemplo para ayudar al usuario antes de que las presentaciones pasen a ser difíciles de manejar y para que conozca las consecuencias de determinadas acciones.

Para crear un evento de aplicación, debe agregar código a cualquiera de los módulos existentes en el proyecto VBA, y agregar un módulo de clase para el propio código del evento. En el ejemplo siguiente se usa también un UserForm, que puede actuar en función de las preferencias del usuario.

Para crear un evento de la aplicación en su complemento

  1. En la pestaña Insertar, haga clic en Módulo de clase para crear un módulo de clase. En la ventana Propiedades, ponga al módulo de clase un nombre intuitivo, como EventClassModule.

  2. Agregue código a un módulo existente de su proyecto para crear una instancia del nuevo módulo de clase. Esto solo requiere una declaración (observe el uso del nombre del módulo de clase en la instrucción Dim que aparece en la parte superior del módulo) y dos pequeños procedimientos.

    Dim XMST As New EventClassModule
    Sub Auto_Open()
    Call InitializeMSTApp
    End Sub
    
    Sub InitializeMSTApp()
    Set XMST.app = Application
    End Sub
    
  3. Cree el UserForm que consultará al usuario si desea quitar los patrones de la presentación. Este ejemplo utiliza un UserForm en lugar de un simple cuadro de mensaje para dar al usuario una opción adicional.

    Utilice las sugerencias de la sección anterior para crear un UserForm. El UserForm finalizado tiene una etiqueta, dos botones de comando y una casilla, como se ve en la Ilustración 5.

    Ilustración 5. UserForm completado para el evento de la aplicación

    UserForm completado para el evento de aplicación

  4. El código tras el UserForm permite en este caso que la ejecución del código de evento continúe (cmdYes), o bien descarga el formulario, finalizando la ejecución (cmdNo) con la opción de agregar una propiedad de documento al archivo que evitará que se vuelva a preguntar al usuario cuando esté trabajando en este mismo archivo (chkDontFix). Además, el procedimiento Terminate pasa un valor al código de evento para indicarle que se interrumpa si el usuario hace clic en la X de la barra de título para cerrar el cuadro de diálogo.

    Private Sub cmdNo_Click()
    If Me.chkDontFix.Value = True Then
        With ActivePresentation
            .CustomDocumentProperties.Add Name:="DontFix", _
            LinkToContent:=False, Type:=msoPropertyTypeBoolean, Value:=True
            .Saved = msoFalse
        End With
    End If
    Unload Me
    End Sub
    
    Private Sub cmdYes_Click()
    Me.Hide
    End Sub
    
    Private Sub userform_Terminate()
    oCncl = True
    End Sub
    
  5. Para agregar el código del evento, declare, en la parte superior del módulo de clase, una variable de la aplicación para utilizarla con eventos. A continuación, agregue el procedimiento. En este caso, el evento PresentationClose es el procedimiento utilizado.

    Observe que el código siguiente usa dos variables adicionales: oCncl como Boolean y i como Integer. Para declarar públicamente estas variables y utilizarlas en todo el proyecto, declárelas en la parte superior de cualquiera de los módulos habituales.

    Public WithEvents app As Application
    Private Sub app_PresentationClose(ByVal Pres As Presentation)
    Dim oProp As DocumentProperty
    oCncl = False
    i = 0
    'checks if the active presentation is a branded company
    'presentation. In this case, a document property is included
    'in the template for company presentations for ease of
    'identification.
    With ActivePresentation
        For Each oProp In .CustomDocumentProperties
            If oProp.Name = "CompanyPres" Then i = i + 1
        Next oProp
        If i = 0 Then Exit Sub
    'checks for the DontFix property added when the user
    'selects the check box in the user form.
        For Each oProp In .CustomDocumentProperties
            If oProp.Name = "DontFix" Then Exit Sub
        Next oProp
    'checks the presentation for the number of masters.
    'If only one master exists, there is no need to continue.
        If .Designs.Count = 1 Then Exit Sub
    End With
    'initiates the UserForm.
    With frmMasters
        .chkDontFix.Value = False
        .cmdYes.SetFocus
        .Show
    End With
    
    If oCncl = True Then
        Exit Sub
    End If
    
    Dim oDes As Design, oSd As slide
    'attaches all slides to the first master.
    With ActivePresentation
        For Each oSd In .Slides
            oSd.Design = .Designs(1)
        Next oSd
    'deletes all masters other than the first.
        Do Until .Designs.Count = 1
            For Each oDes In .Designs
                If Not oDes.Index = 1 Then oDes.Delete
            Next oDes
        Loop
    End With
    End Sub
    

Cuando haya guardado este archivo como complemento y lo haya guardado en PowerPoint, necesitará una presentación que contenga la variable CompanyPres y más de un patrón para probar su complemento. Utilice el documento de ejemplo incluido en la descarga de este artículo; además, utilice la presentación para crear sus propias presentaciones de prueba.

Nota

Puede usar los pasos 1 y 2 anteriores en Word o Excel, además de configurar un módulo de clase para los eventos de la aplicación. El código del paso 2 es idéntico para todos los programas y puede utilizar la misma instrucción Public WithEvents app As Application en la parte superior del módulo de clase del editor de Visual Basic para que Word o Excel declaren una variable para trabajar con eventos de aplicación. Cuando lo haya hecho, seleccione una aplicación de la lista de objetos (la lista desplegable a la izquierda, sobre la ventana del código) y verá todos los eventos disponibles en la lista de procedimientos (la lista desplegable a la derecha, sobre la ventana del código).

Control del complemento mediante programación

Si crea una UI personalizada para su complemento, es posible que en ocasiones necesite más control sobre el aspecto de la UI que el que le puede proporcionar el marcado de Office Open XML. Por ejemplo, el texto de la etiqueta de un control podría variar en función de condiciones específicas, o bien la visibilidad de los controles podría variar en función de las preferencias del usuario. Por suerte, el esquema customUI incluye una selección de atributos que le ofrecen este tipo de flexibilidad.

En el caso siguiente, una empresa tiene un conjunto de herramientas personalizadas para Excel en la cinta. Algunos usuarios quieren ver la pestaña, pero otros, no. El complemento pregunta al usuario durante el inicio si debe mostrar u ocultar la pestaña personalizada. Si el usuario decide ocultar la pestaña personalizada, el complemento proporcionará un control al final de la pestaña Inicio donde el usuario podrá cambiar la manera en la que se visualiza la pestaña personalizada.

Este proyecto de VBA requiere un módulo en el que colocar los procedimientos del control de la cinta, un UserForm para recuperar las preferencias del usuario y código en el objeto ThisWorkbook del complemento donde puede crear el evento que ejecuta el código siempre que el usuario inicia Excel.

El procedimiento siguiente requiere que disponga ya del marcado customUI.xml para la pestaña de la cinta personalizada y para el control Reset que verán los usuarios que en un principio no quieran la pestaña.

Para controlar el comportamiento de personalización de la cinta de control mediante programación

  1. Cree el UserForm que preguntará a los usuarios sus preferencias cuando inicien Excel.

    Como en la sección anterior, este ejemplo utiliza un UserForm en lugar de un cuadro de mensaje para dar al usuario una opción adicional.

    Ilustración 6. UserForm completado para el evento Workbook_Open

    UserForm completado para el evento Workbook_Open

  2. Agregue el código tras el UserForm, que define el valor de la variable que indica la preferencia de usuario. Tenga en cuenta que esta variable se debe declarar públicamente como cadena en un módulo habitual del proyecto.

    Private Sub cmdNever_Click()
    oVis = "Never"
    Me.Hide
    End Sub
    
    Private Sub cmdNo_Click()
    oVis = "No"
    Me.Hide
    End Sub
    
    Private Sub cmdYes_Click()
    oVis = "Show"
    Me.Hide
    End Sub
    
  3. En el objeto ThisWorkbook del proyecto, agregue un evento Workbook_Open. El código que ve aquí muestra el cuadro de diálogo si el usuario no ha indicado ya que no quiere que se le pregunte nunca. A continuación, muestra el cuadro de diálogo y guarda la preferencia que acaba de seleccionar el usuario (Sí, No o Nunca) en el registro.

    Private Sub Workbook_Open()
    Dim iResp As Integer
    oVis = GetSetting("CustomDocs", "Info", "ExcelVis")
    If Not oVis = "Never" Then
        frmTools.Show
        SaveSetting "CustomDocs", "Info", "ExcelVis", oVis
    End If
    End Sub
    

    Observe aquí cómo el objeto ThisWorkbook de Excel solo resulta útil para los complementos porque le permite utilizar eventos de documento en un nivel de aplicaciones. Dado que ThisWorkbook se refiere al propio archivo de complementos, el evento Workbook_Open que se utiliza en el siguiente ejemplo de código se ejecuta cuando la aplicación se inicia y carga (abre) automáticamente el archivo de complemento.

  4. En un módulo nuevo o ya existente en el proyecto, agregue los procedimientos que interactuarán con customUI.

    En este ejemplo, se utiliza un procedimiento para establecer las preferencias de visibilidad que se pasan al archivo customUI. El otro procedimiento se usa para el control que aparece si el usuario elige que no se le pregunte en las opciones de visibilidad, a fin de que se pueda restablecer la opción más adelante.

    Tenga en cuenta que el procedimiento ShowControls se refiere a los identificadores de control del archivo customUI.xml. El primero, en este caso, es el identificador proporcionado a la pestaña personalizada; el segundo es el identificador proporcionado al botón de reinicio opcional agregado a la pestaña Inicio.

    Public Sub ShowControls(ByVal control As IRibbonControl, ByRef visible As Variant)
    Select Case control.ID
        Case "TabCompany"
            If Not oVis = "Show" Then
                visible = False
            Else
                visible = True
            End If
        Case "CustomTools"
            If oVis = "Never" Then
                visible = True
            Else
                visible = False
            End If
    End Select
    End Sub
    
    Sub Reset(ByVal control As IRibbonControl)
    SaveSetting "CustomDocs", "Info", "ExcelVis", ""
    MsgBox "You will be prompted to show " & _
    "company tools the next time you start Excel.", _
    vbInformation, "Company Custom Tools"
    End Sub
    
  5. En el archivo customUI.xml, agregue el atributo GetVisible a la etiqueta de la pestaña personalizada y a la etiqueta del grupo en el que aparecerá el botón de reinicio. Utilice el nombre de procedimiento ShowControls como valor para ambas.

    A continuación, verá en primer lugar el marcado de las dos líneas editadas. El segundo conjunto de marcado muestra estas líneas en su contexto.

    <tab id="TabCompany" label="Company Tools" insertBeforeMso="TabHome" getVisible="ShowControls">
    <group id="CustomTools" label="Company Options" getVisible="ShowControls">
    

    Observe que la pestaña personalizada del ejemplo siguiente usa una selección arbitraria de comandos integrados, dado que la finalidad del ejemplo es mostrar el control de visibilidad de la propia pestaña.

    <?xml version="1.0" encoding="utf-8"?>
    <customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui">
     <ribbon>
     <tabs>
      <tab id="TabCompany" label="Company Tools" insertBeforeMso="TabHome"
           getVisible="ShowControls">
        <group id="coTools" label="Sample Tools" 
               supertip="Arbitrarily selected tools to demo GetVisible behavior.">
         <button idMso="FileNewDefault" size="large" />
         <button idMso="FileSave" size="large"/>
         <separator id="space2" />
         <button idMso="Paste" size="large"/>
         <gallery idMso="PasteGallery" size="large" />
        </group>
      </tab>
      <tab idMso="TabHome" >
         <group id="CustomTools" label="Company Options" 
                getVisible="ShowControls">
           <button id="coRestore" size="large" label="Reset" 
                   onAction="Reset" imageMso="GroupJournalArrangement" />
         </group>
      </tab>
     </tabs>
     </ribbon>
    </customUI>
    

Administración del código de VBA

Cuando el complemento esté terminado y listo para compartirse, puede que prefiera seguir un paso adicional y agregar una firma digital al proyecto. VBA proporciona dos opciones para el código de firmado: certificación automática y certificación autenticada.

La certificación automática se configura rápidamente y es muy fácil de usar, pero no comprueba su identidad. Si está trabajando con una empresa que requiere que se firme el código, lo más probable es que necesite comprar un certificado autenticado a una autoridad de certificado comercial designada.

Para configurar la certificación automática, utilice el Certificado digital para proyectos de VBA (Inicio, Todos los programas, Microsoft Office, Herramientas de Microsoft Office).

Para encontrar una autoridad de certificado comercial a la que comprar un certificado que se pueda autenticar, vaya al mismo cuadro de diálogo Certificado digital para proyectos de VBA y haga clic en el vínculo adecuado para ver una lista de posibles proveedores.

Pasos siguientes

En este artículo se han mostrado los aspectos básicos de cómo crear un complemento de VBA para Word, Excel o PowerPoint. Incluye ejemplos de algunos conceptos clave que se pueden utilizar para muchas tareas en sus complementos. Por supuesto, un único artículo no puede mostrar toda la variedad de acciones que puede realizar con un lenguaje de programación tan potente como VBA. Antes de asumir que necesita código administrado para un nuevo proyecto, piense en VBA y determine qué metodología le proporcionará la solución más sencilla para la tarea que tiene entre manos.

Los desarrolladores suelen presuponer que una solución tiene que empezar en una ventana de código. Recuerde, sin embargo, que los programas que está automatizando, ya sea con código administrado o con VBA, son potentes y flexibles por sí mismos. Una solución que requiera una automatización simple puede disponer de una solución sencilla sin nada de código (o lo que solemos considerar código). Por ejemplo, los códigos de campo o los controles de contenido dependientes en Word pueden activar el comportamiento dinámico, al igual que las funciones de Excel. Da igual que sus proyectos puedan sacar partido del uso de VBA o del uso de características de la ventana de la aplicación, la clave está en considerar sus opciones, evaluar los requisitos y, a continuación, determinar las mejores herramientas para cada tarea específica, proyecto a proyecto.

¿Qué hará si empieza un proyecto en código administrado o en VBA y se da cuenta en medio del proyecto de que sería mejor haber utilizado la otra opción? Consulte los Recursos adicionales, a continuación, para obtener ayuda en la conversión entre VBA y código administrado.

Recursos adicionales

Acerca de la autora

Stephanie Krieger es autora de dos libros: Advanced Microsoft Office Documents 2007 Edition Inside Out y Microsoft Office Document Designer. Como asesora de documentación profesional, ha ayudado a muchas empresas globales a desarrollar soluciones empresariales para Microsoft Office en ambas plataformas. Su nuevo libro para Office 2010 y Office para Mac 2011 saldrá a la venta en la primavera de 2011.