Introducción a VBA en Word 2010
Resumen: en este artículo se ofrece una introducción para nuevos programadores acerca del uso de la programación de Visual Basic para Aplicaciones (VBA) para extender Microsoft Word 2010. En este tema se resume el lenguaje VBA, las instrucciones acerca de cómo obtener acceso a VBA en Word 2010, una solución detallada para un problema real de programación de VBA en Word y sugerencias acerca de cómo programar y depurar.
Última modificación: lunes, 11 de mayo de 2015
Hace referencia a: Office 2010 | Open XML | Visual Studio Tools for Microsoft Office | Word 2007 | Word 2010
En este artículo
¿Qué es una macro, cuál es su utilidad y cómo se puede crear una?
Parte 2: Escritura de macros más complejas
Conclusión
Recursos adicionales
Acerca del autor
Se aplica a: Microsoft Word 2010 | Microsoft Office Word 2007 | Microsoft Office Word 2003
Publicado: abril de 2010
Proporcionado por: Shauna Kelly
Contenido
Parte 1: Ejemplo completo de una macro
Parte 2: Escritura de macros más complejas
Conclusión
Recursos adicionales
Acerca del autor
¿Qué es una macro, cuál es su utilidad y cómo se puede crear una?
Una macro permite poner Word en piloto automático.
En Word, puede resultar frustrante realizar una tarea repetitiva cuando hay que usar una secuencia larga de clics de mouse o de pulsaciones de teclas cada vez que se realiza dicha tarea. La creación de una macro permite agrupar una colección de comandos y dar instrucciones a Word para que los inicie con un solo clic o una pulsación de teclas.
En este artículo se asume que el lector es un usuario experto de Word y que no tiene conocimientos de programación o desarrollo de software.
Este artículo se divide en dos partes:
En la primera parte se describe un ejemplo completo de una macro: cómo escribir una macro sencilla, dónde guardarla, cómo crear un botón en la barra de herramientas de acceso rápido o crear un método abreviado de teclado para ejecutar la macro y cómo copiar esa macro a otro equipo (para que se pueda usar en casa y en el trabajo, o para compartirla con un compañero). Esto proporcionará una idea básica.
En la segunda parte se analizan las macros en detalle: cómo escribir macros más complejas y cómo asegurarse de que la macro haga realmente lo que uno desea y no genere errores ni problemas.
Parte 1: Ejemplo completo de una macro
Uno de los objetivos de las macros es permitir la realización de una tarea con un solo clic o una pulsación de teclas.
A menudo creo documentos que contienen hipervínculos a sitios web. De forma predeterminada, Word requiere que siga, o abra, un hipervínculo, presionando CTRL mientras hago clic en el hipervínculo. En la siguiente imagen se muestra la opción predeterminada para seguir un hipervínculo.
Figura 1. Presionar CTRL y hacer clic en el hipervínculo para seguirlo
En la siguiente imagen se muestra la opción alternativa para seguir un hipervínculo haciendo clic en él.
Figura 2. Hacer clic para seguir el hipervínculo
A veces esto es útil, pero otras veces prefiero seguir un hipervínculo haciendo clic en él (figura 2). En ocasiones tengo que configurar esta opción muchas veces al día. Para ello, hago clic en el botón Archivo y, en Ayuda, hago clic en Opciones. En el cuadro de diálogo Opciones de Word, hago clic en Opciones avanzadas y, en las opciones de edición, activo (o desactivo) Utilizar CTRL + Clic del mouse para seguir hipervínculo y hago clic en Aceptar. Tener que repetir esta secuencia de clics del mouse una y otra vez resulta frustrante y me gustaría poder configurar esta opción con un solo clic.
En esta sección se describe cómo crear una macro sencilla para alternar entre el uso de CTRL+clic y solo hacer clic en un hipervínculo. Para crear esta macro, aprenderá a:
Crear un archivo de plantilla habilitada para macros (.dotm) de Word para almacenar la macro y guardarla en la carpeta de inicio de Word.
Abrir y usar el Editor de Visual Basic, que forma parte de Word.
Escribir una macro en el Editor de Visual Basic.
Probar la macro.
Crear un botón en la barra de herramientas de acceso rápido para ejecutar la macro.
Crear un método abreviado de teclado para ejecutar la macro.
Guardar el archivo, cargarlo como complemento y, si es necesario, compartirlo con un compañero o usarlo en otro equipo.
En esta sección se describe cada paso.
Crear un archivo para contener la macro
Antes de empezar a escribir una macro, piense cómo y dónde desea guardarla.
Word permite guardar macros en dos tipos de archivo de Word: un archivo de documento habilitado para macros (.docm) de Word y un archivo de plantilla habilitada para macros (.dotm) de Word. No se recomienda almacenar las macros en un documento. Las macros se almacenan normalmente en un archivo de plantilla habilitada para macros (.dotm) de Word.
Es posible guardar macros en la plantilla Normal (Normal.dotm), pero eso dificulta la capacidad de organizar o compartir las macros. Por lo general, es mejor crear su propio archivo y guardar las macros ahí.
La ubicación en la que se guardará el archivo de plantilla depende de cómo desee usar las macros. Debe decidir si desea usar las macros con todos los documentos en los que puede trabajar o solo con algunos documentos.
Por ejemplo, puede crear una plantilla para los informes de ventas mensuales y puede tener macros para formatear dichos informes. En este caso, guarde el archivo de plantilla en la carpeta de plantillas personales y use esa plantilla como base para los nuevos documentos. (Para comprobar la carpeta de plantillas personales, haga clic en la pestaña Archivo y, a continuación, haga clic en Opciones. En el cuadro de diálogo Opciones de Word, haga clic en Opciones avanzadas y, a continuación, haga clic en el botón Ubicación de archivos). Si una macro se almacena en una plantilla, solo los documentos adjuntos a esa plantilla pueden tener acceso a la macro. Otros documentos no podrán "ver" la macro.
En este artículo, se crearán macros que pueden usarse en cualquier documento. Para ello, se creará un archivo de plantilla habilitada para macros. En primer lugar, cierre cualquier archivo de Word que esté abierto. Para crear el nuevo archivo que contendrá las macros, haga clic en el botón Archivo, elija Nuevo y, a continuación, haga clic en Mis plantillas. En el cuadro de diálogo Nuevo, seleccione el botón de opción Plantilla y, a continuación, haga clic en Aceptar. Guarde el archivo como un archivo de plantilla habilitada para macros denominado MyWordTools.dotm en la carpeta de inicio de Word. (Para comprobar la carpeta de inicio de Word, haga clic en la pestaña Archivo y, a continuación, haga clic en Opciones. En el cuadro de diálogo Opciones de Word, haga clic en Opciones avanzadas y, a continuación, haga clic en el botón Ubicación de archivos).
Uso del editor de Visual Basic.
Las macros de Word se escriben en un lenguaje de programación llamado Visual Basic para Aplicaciones (VBA).
Las macros se escriben en una parte de Word que la mayoría de los usuarios nunca ven: el Editor de Visual Basic (VBE). Abra el VBE con cualquiera de los métodos siguientes:
Presione el método abreviado de teclado Alt+F11
Haga clic en el botón Visual Basic en la pestaña Desarrollador. Para ello, haga clic en la pestaña Archivo y, a continuación en, Opciones. En el cuadro de diálogo Opciones de Word, haga clic en Personalizar la cinta de opciones. En el lado derecho del cuadro de diálogo, seleccione la pestaña Desarrollador. Haga clic en Aceptar para volver al documento y, a continuación, en la pestaña Desarrollador, haga clic en el botón Visual Basic.
Agregue el comando de Visual Basic a la barra de herramientas de acceso rápido.
Antes de empezar a usar el VBE, en el menú Herramientas, haga clic en Opciones. En el cuadro de diálogo Opciones, en la pestaña Editor, asegúrese de que todas las casillas de verificación estén activadas.
En la parte superior izquierda del VBE, verá el Explorador de proyectos que muestra todos los archivos abiertos actualmente en Word. Debería mostrarse el archivo Normal (que se refiere a Normal.dotm) y MyWordTools (el nuevo archivo que acaba de crear).
En la siguiente imagen se muestra el proyecto MyWordTools en el Explorador de proyectos del Editor de Visual Basic.
Figura 3. Explorador de proyectos del Editor de Visual Basic
Dentro del archivo, las macros se almacenan en Módulos. Para agregar un módulo al archivo, en el Explorador de proyectos, seleccione el archivo MyWordTools (figura 3). En el menú Insertar, haga clic en Módulo. Al agregar un módulo al archivo, verá el módulo agregado en el Explorador de proyectos y en la ventana Propiedades debajo de él (figura 4). Se puede cambiar el nombre de un módulo mediante la ventana Propiedades. Deje el nombre como Module1.
En la siguiente imagen se muestra Module1 en el Explorador de proyectos del Editor de Visual Basic.
Figura 4. Explorador de proyectos del Editor de Visual Basic
Por último, verá que la entrada para el archivo se denomina TemplateProject. Aunque no es necesario, se recomienda asignarle un nombre más descriptivo. Para ello, haga clic con el botón secundario en la entrada del archivo MyWordTools y, a continuación, haga clic en Propiedades de TemplateProject en el menú contextual (figura 5).
En la siguiente imagen se muestra el elemento de menú Propiedades de TemplateProject.
Figura 5. Elemento de menú de propiedades
En el diálogo Propiedades de TemplateProject, cambie el nombre del proyecto a MyWordTools.
Escribir la macro
La gran zona blanca a la derecha del VBE es donde se escribe el código de la macro. Si no puede verla, en el menú Ver, haga clic en Código para ver la ventana del código. Word inserta automáticamente la instrucción Option Explicit en la parte superior de la ventana de código. No la elimine.
Tal vez desee que una macro alterne entre las dos opciones posibles, en Word, para seguir un hipervínculo. Funcionará como otros botones que alternan opciones en Word. El botón Negrita en la pestaña Inicio, por ejemplo, pondrá en negrita el texto si no está en negrita y quitará la negrita del texto si lo está.
Copie y pegue el siguiente ejemplo de código de macro en la ventana de código.
Sub ToggleHyperlinkCtrlClick()
Options.CtrlClickHyperlinkToOpen = Not Options.CtrlClickHyperlinkToOpen
End Sub
Se trata de una macro corta denominada ToggleHyperlinkCtrlClick y solo tiene una línea de código. La única línea de código en la macro significa "cambiar la opción de Word que controla si se debe usar CTRL+clic para abrir un hipervínculo al valor opuesto de su configuración actual, es decir, a Not su configuración actual" (figura 6).
En la siguiente imagen se muestra una explicación línea por línea del método ToggleHyperLinkCtrlClick.
Figura 6. Explicación del método ToggleHyperLinkCtrlClick
Probar la macro
Para probar la macro, use el siguiente procedimiento.
Para probar la macro
Organice las ventanas de VBE y Word de modo que pueda verlas en paralelo.
Haga clic en la ventana principal de Word. Escriba varios párrafos de texto en el documento MyWordTools.dotm. Incluya algunos hipervínculos en el texto (figura 7).
En la siguiente imagen se muestran en paralelo el documento MyWordTools y el código de ToggleHyperLinkCtrlClick en el VBE.
Figura 7. Documento y Editor de Visual Basic en paralelo
En el VBE, haga clic en cualquier lugar dentro de la macro. Para ejecutar la macro, en el menú Ejecutar, haga clic en Ejecutar Sub/UserForm o presione F5.
Se modificará la configuración para seguir un hipervínculo. Pase el mouse sobre un hipervínculo en la ventana principal de Word para comprobar que la información sobre herramientas ha cambiado.
Vuelva a ejecutar la macro para alternar la opción.
También se puede ejecutar la macro dentro de Word. En la pestaña Ver, en el grupo Macros, haga clic en el botón Macros. La macro ToggleHyperlinkCtrlClick aparecerá en el cuadro de diálogo Macros. Para ejecutar la macro, haga clic en el nombre de la macro y, a continuación, haga clic en el botón Ejecutar.
Creación de un botón en la barra de herramientas de acceso rápido para ejecutar la macro
Para obtener acceso de un solo clic a la macro, se puede agregar un botón a la barra de herramientas de acceso rápido. Para ello, siga este procedimiento.
Para crear un botón en la barra de herramientas de acceso rápido
Haga clic con el botón secundario en la barra de herramientas de acceso rápido y, a continuación, haga clic en Personalizar barra de herramientas de acceso rápido en el menú contextual.
En Personalizar barra de herramientas de acceso rápido, en la lista Comandos disponibles en, seleccione Macros.
En la lista Personalizar barra de herramientas de acceso rápido, seleccione MyWordTools.dotm. (Debe seleccionar MyWordTools.dotm para que Word guarde el botón en la barra de herramientas de acceso rápido en el archivo MyWordTools.dotm. Solo entonces el botón estará disponible al copiar ese archivo a otro equipo).
Seleccione la macro ToggleHyperlinkCtrlClick y, a continuación, haga clic en Agregar.
Haga clic en el botón Modificar para seleccionar un símbolo y cambie el nombre a ToggleHyperlinkCtrlClick.
Ahora puede ejecutar la macro en cualquier momento haciendo clic en el botón nuevo en la barra de herramientas de acceso rápido.
Creación de un método abreviado de teclado para ejecutar la macro
También se puede crear un método abreviado de teclado para ejecutar la macro. Para ello, siga este procedimiento.
Para crear un método abreviado de teclado para ejecutar la macro
Haga clic con el botón secundario en la barra de herramientas de acceso rápido y, a continuación, haga clic en Personalizar la cinta de opciones en el menú contextual. Junto a Métodos abreviados de teclado, haga clic en el botón Personalizar.
En la siguiente imagen se muestra el cuadro de diálogo Personalizar teclado
Figura 8. Cuadro de diálogo Personalizar teclado
En el cuadro de diálogo Personalizar teclado (figura 8), debe hacer lo siguiente:
En la lista Categorías, seleccione Macros.
En la lista Macros, haga clic en el nombre de la macro.
Haga clic en el cuadro Nueva tecla de método abreviado y escriba el método abreviado de teclado que desee usar. Aquí usé Alt+H, que puedo recordar porque esto alterna la opción para los hipervínculos. El cuadro de diálogo también indica que este método abreviado está todavía sin asignar, por lo que no interferirá con un método abreviado de teclado existente.
En la lista Guardar cambios en, seleccione MyWordTools.dotm. (Debe seleccionar MyWordTools.dotm para que Word guarde el método abreviado de teclado en el archivo MyWordTools.dotm. Solo entonces el botón estará disponible al copiar ese archivo a otro equipo).
Haga clic en Asignar.
Para ejecutar la macro, presione Alt+H.
Finalizar
Hasta ahora se creó un nuevo archivo para contener la macro (MyWordTools.dotm), se agregó un módulo (Module1), se creó la macro (conocida como ToggleHyperlinkCtrlClick), se creó un botón en la barra de herramientas de acceso rápido para iniciar la macro y se creó un método abreviado de teclado para iniciar la macro. Ahora, guarde el archivo MyWordTools.dotm (lo puede hacer en el VBE o desde la ventana principal de Word).
Puesto que ya terminó con el VBE, ciérrelo y vuelva a Word. Para ello, en el VBE, haga clic en el menú Archivo y, a continuación, haga clic en Cerrar y volver a Microsoft Word.
Para escribir texto en la macro, haga clic en el botón de la barra de herramientas de acceso rápido. Cuando haya confirmado que está funcionando, guarde y cierre el archivo.
Administrar y cargar complementos
El plan era que esta macro esté disponible, independientemente del documento con el que se esté trabajando. Sin embargo, si crea un nuevo documento (use Ctrl+N) no podrá ver el botón en la barra de herramientas de acceso rápido y no hay manera de iniciar la macro.
Para hacer que la macro almacenada en MyWordTools.dotm esté disponible en cualquier documento que se abra, es necesario cargar MyWordTools.dotm como complemento. (Cuando se usa un archivo .dotm como complemento, también se denomina "plantilla global"). Se puede cargar un archivo .dotm como complemento de forma manual o automática:
Para cargar un archivo .dotm como complemento de forma manual, cierre el archivo .dotm si se encuentra abierto. En la pestaña Programador, haga clic en el botón Complementos. En el cuadro de diálogo Plantillas y complementos, haga clic en Agregar, busque el archivo .dotm y, a continuación, haga clic en Abrir.
Para cargar un archivo .dotm como complemento de forma automática, el archivo .dotm debe guardarse en la carpeta de inicio de Word. Cierre y reinicie Word. Word cargará el complemento de forma automática.
Puede ver los complementos que están cargados actualmente en Word. En la pestaña Desarrollador, haga clic en el botón Complementos.
Dado que guardó MyWordTools.dotm en la carpeta de inicio de Word, cierre y reinicie Word. Word cargará automáticamente el archivo MyWordTools.dotm como complemento. El botón se mostrará en la barra de herramientas de acceso rápido y ya podrá usar la macro.
Cuando MyWordTools.dotm se carga como complemento, no verá ninguna parte del texto que se haya quedado en la ventana principal de Word en MyWordTools.dotm. Word no usa ninguna parte del contenido en el documento mismo. Elimine el texto en la ventana principal de Word antes de guardar un archivo .dotm que se use como complemento.
Es importante diferenciar entre abrir un archivo de complemento (por ejemplo, al hacer clic en Archivo y después en Abrir) y cargar un complemento (por ejemplo, mediante el botón Complementos en la pestaña Desarrollador). Abra un archivo cuando desee editarlo y probarlo. Cargue el archivo como complemento cuando desee usarlo.
Advertencia
Nunca cargue un archivo como complemento si este se encuentra abierto en Word. Nunca abra y edite un archivo de complemento si se encuentra cargado como complemento. Esto puede provocar un comportamiento impredecible.
Uso de la macro en otro equipo
Para usar la macro, debe tener:
El código de la macro.
Un botón en la barra de herramientas de acceso rápido que ejecute la macro.
El método abreviado de teclado que ejecute la macro.
Se guardaron los tres elementos en MyWordTools.dotm. Por lo tanto, para usar la macro en otro equipo, o para compartir la macro, solo tiene que copiar MyWordTools.dotm a la carpeta de inicio de Word en otro equipo. Cuando inicie Word, Word cargará MyWordTools.dotm como complemento, y la macro, el botón y el método abreviado de teclado estarán disponibles.
Parte 2: Escritura de macros más complejas
El ejemplo completo de la primera parte incluye una macro sencilla de una línea. En la segunda parte se describe cómo ampliar ese proceso básico completo para crear macros más complejas.
Agregar macros adicionales al archivo MyWordTools.dotm
El archivo que se creó en la primera parte, MyWordTools.dotm, ahora tiene un módulo (Module1) y ese módulo contiene una macro (ToggleHyperlinkCtrlClick).
No edite un archivo mientras esté cargado como complemento. Para agregar más macros al archivo, debe:
Descargar el archivo como complemento. Para ello, en la pestaña Desarrollador, haga clic en Complementos y, a continuación, haga clic para desactivar la casilla de verificación del complemento y haga clic en Aceptar.
Abra el archivo para su edición. Para ello, haga clic en la pestaña Archivo. En Información, haga clic en Abrir. Busque el archivo, haga clic en él y, a continuación, haga clic en Abrir.
Cuando el archivo esté abierto para su edición, podrá:
Agregar una macro en el módulo existente, Module1, escribiendo en la ventana de código, o bien
Agregar un nuevo módulo al archivo y escribir una nueva macro en el nuevo módulo.
El método que use depende del grado de complejidad de las macros. Si solo dispone de varias macros cortas, es común colocarlas en un solo módulo. Si tiene muchas macros largas, es preferible almacenarlas en módulos separados y cambiar el nombre de cada módulo para que indique las macros que contiene.
Cuando haya agregado una nueva macro al archivo, podrá probarla, crear un botón para ella en la barra de herramientas de acceso rápido y crear un método abreviado de teclado, tal y como se hizo con la primera macro.
Comentarios
Los desarrolladores profesionales suelen incluir comentarios en su código que explican para qué sirve el código.
Para agregar comentarios en las macros, anteponga el texto del comentario con un solo apóstrofo. De forma predeterminada, el VBE muestra los comentarios en verde.
Escribir código sólido: una macro para ordenar texto
Debe tener en cuenta dos cosas al compartir una macro con un compañero. En primer lugar, el equipo del otro usuario seguramente no está configurado de forma idéntica al suyo. En segundo lugar, es probable que el otro usuario sea menos indulgente con el código pobre. Por lo tanto, el código debe ser sólido.
Si una macro es sólida, el usuario no verá mensajes de error inexplicables y la macro hará lo que pretende hacer, ni más ni menos.
Para demostrar algunos problemas en la escritura de código sólido, tenga en cuenta la siguiente macro que se usa para ordenar texto.
Se necesitan varios clics del mouse para ordenar varios párrafos de texto. Si debe ordenar texto con frecuencia, puede ser útil disponer de un solo botón para realizar una ordenación simple (y cuando tenga que realizar una ordenación más compleja, el botón integrado seguirá estando disponible en la pestaña Inicio). Esta acción de macro se muestra en el siguiente ejemplo de código.
Sub SortText1()
' A macro to sort the selected text
Selection.Sort
End Sub
Puede probar esta macro como probó la anterior. Coloque en mosaico las ventanas de VBE y Word en paralelo. En la ventana principal de Word, escriba varios párrafos de texto y selecciónelos. En el VBE, ejecute la macro haciendo clic en el código de macro y presionando F5. Word ordenará alfabéticamente los párrafos.
La macro SortText1 parece funcionar bien. Sin embargo, no es sólida. Para ver lo que puede salir mal, inserte una imagen en el documento. Haga que sea una imagen flotante. Para ello, seleccione la imagen. En la pestaña Formato, en el grupo Organizar de la pestaña Herramientas de imagen, haga clic en Posición. Seleccione cualquiera de las opciones de posición de página Con ajuste de texto.
Seleccione la imagen y, a continuación, ejecute la macro SortText1. Como no tiene sentido que Word ordene una imagen flotante, verá un mensaje de error de Visual Basic. Por tanto, esto no es una macro sólida.
La única línea de código, Selection.Sort, solo funciona correctamente si se selecciona texto normal. Antes de buscar una forma de resolver ese problema, tenga en cuenta otro problema.
Advertencia
Si hace clic en el documento sin seleccionar texto y ejecuta la macro SortText1, todo el documento se ordenará. En el mejor de los casos, es algo inesperado; en el peor de los casos, podría dañar los datos.
En el ejemplo de código siguiente se muestra cómo restringir la macro para que ordene solo cuando hay dos o más párrafos de texto seleccionado.
Sub SortText2()
' A macro to sort the Selection if the user has selected more than one
' paragraph of text.
If Selection.Paragraphs.Count > 1 Then
Selection.Sort
End If
End Sub
Pruebe a ejecutar la macro SortText2. A diferencia de SortText1, esta macro no mostrará un mensaje de error si selecciona una imagen y después ejecuta la macro. Además, no le permitirá ordenar accidentalmente el documento completo. Para ver lo que ocurre, siga este procedimiento para recorrer el código línea por línea.
Para recorrer el código de VBA
Haga clic en la ventana principal de Word y seleccione la imagen.
Haga clic en cualquier lugar dentro de la macro SortText2.
Presione F8. Word resaltará la primera línea de la macro (Sub SortText2()).
Presione F8 varias veces para recorrer el código de línea en línea.
El uso de F8 para recorrer el código es una forma común para ver lo que hace el código y para solucionar problemas en el código. En este caso, verá que, cuando se selecciona una imagen, Word procesa la instrucción If, pero omite la instrucción Selection.Sort.
Hay varias cosas importantes que ver en la nueva macro SortText2:
Se puede usar If y End If para controlar si Wordprocesa el código o lo omite.
La línea If termina con la palabra clave Then.
Cada línea If debe tener una línea End If correspondiente.
Esta macro usa Selection dos veces. Selection.Paragraphs.Count proporciona información acerca de lo que ha seleccionado el usuario. Selection.Sort ordena el texto seleccionado.
En el ejemplo de código siguiente se muestra cómo ampliar esta macro para proporcionar información al usuario mediante las palabras clave Else y MsgBox.
Sub SortText3()
If Selection.Paragraphs.Count > 1 Then
' The user has selected more than one paragraph of text.
' Sort the selection.
Selection.Sort
Else
' Tell the user what to do.
MsgBox "Please select two or more paragraphs and try again."
End If
End Sub
En esta macro, puede ver que:
Se puede usar If…Then, Else y End If para controlar si Word procesa el código o lo omite.
El uso de una instrucción Else es opcional. Cada instrucción If puede tener cero o una instrucción Else.
Si se usa Else, aún se necesita una línea End If.
El comando muestra un mensaje al usuario en la pantalla. Escriba el texto del mensaje después de la palabra clave MsgBox y póngalo entre comillas. Si proporciona texto en una macro (como el texto de este mensaje), debe ponerlo entre comillas ("). Sin las comillas, Word intentará encontrar "Please" en el modelo de objetos de Word. Como Word no conoce el significado de "Please", la macro producirá un mensaje de error.
Para ver el problema, siga este procedimiento.
Para probar la macro SortText3
Cree un botón en la barra de herramientas de acceso rápido para iniciar la macro SortText3. De instrucciones a Word para que guarde el botón en MyWordTools.dotm.
Pruebe el botón para asegurarse de que ejecuta la macro SortText3.
Guarde el archivo MyWordTools.dotm
Cierre y reinicie Word.
Si un documento está abierto, ciérrelo para que no haya ningún documento abierto.
Vuelva a probar el botón en la barra de herramientas de acceso rápido.
Debería ver un mensaje de error. El error se produce porque la primera línea de la macro hace referencia a la selección. El complemento está cargado. Si ningún documento está abierto en la ventana principal de Word, no hay Selection. Sin Selection, Word no puede ejecutar el código en la macro.
Realice un cambio más en la macro para que sea sólida. Agregue un comentario en la parte superior de la macro. Esa es una buena forma de documentar la macro para que cualquier usuario sepa lo que esta pretende hacer.
Descargue el complemento y, a continuación, abra el archivo para editarlo. Reemplace la macro existente con el siguiente ejemplo de código.
Sub SortText()
' A macro to sort the selected text, if the user has selected
' more than one paragraph
If Documents.Count > 0 Then
' The user has at least one document open.
If Selection.Paragraphs.Count > 1 Then
' The user has selected more than one paragraph
' of text, so sort it.
Selection.Sort
Else
' Tell the user what to do.
MsgBox "Please select two or more paragraphs and try again."
End If
End If
End Sub
En esta versión final de SortText, el ejemplo usó bloques If…End If anidados. Es importante aplicar sangría en las líneas de código. Cada línea If coincide con la línea End If correcta.
Una macro que no es sólida puede dar lugar a:
Mensajes de error (por ejemplo, cuando se usa el objeto Selection, pero no hay ningún documento abierto y, por tanto, ninguna Selection), o bien
Comportamiento no deseado (por ejemplo, cuando el comando Selection.Sort ordena de forma no intencionada todo el documento).
Estas son algunas sugerencias para escribir macros sólidas.
Si la macro se refiere a la Selection, cree un documento de prueba y pruebe la macro ejecutándola después de seleccionar distintas partes del documento: simplemente haga clic para que no haya seleccionado ningún texto, mueva el cursor a la parte superior o inferior del documento o seleccione una sola palabra, varios párrafos, una imagen, toda una tabla o parte de ella, el texto del encabezado o pie de página, el texto de una nota al pie, nota al final o comentario, etc.
Cierre el archivo, cárguelo como complemento y pruebe la macro para garantizar que funciona si no hay ningún documento abierto. Use If Documents.Count > 0 para comprobar si un documento está abierto.
Información acerca del modelo de objetos de Word
Las macros creadas hasta ahora han usado tres elementos importantes de Word:
Options. Esto se refiere a las opciones utilizadas para configurar Word.
Documents. Esto se refiere a todos los documentos abiertos actualmente en Word. Se puede usar la palabra clave ActiveDocument para hacer referencia al documento activo en ese momento.
Selection. Esto se refiere a todo lo que el usuario ha seleccionado en ActiveDocument. Puede ser una palabra, varios párrafos, una imagen o cualquier otro tipo de contenido.
Para cada una de estas macros, se usaron los siguientes elementos de nivel inferior:
Selection.Sort
Estos elementos (Options, Documents y Selection) se conocen como Objetos y juntos forman parte del modelo de objetos de Word.
Un modelo de objetos es una jerarquía. La jerarquía incluye todas las partes de Word que es necesario que una macro controle. Por ejemplo, el objeto ActiveDocument se refiere al documento activo en ese momento.
Si el documento actual contiene una tabla con al menos tres filas y dos columnas, se mostrará el siguiente texto en la segunda celda de la tercera fila de la primera tabla del documento activo.
MsgBox ActiveDocument.Tables(1).Rows(3).Cells(2).Range.Text
Una macro puede manipular un objeto (como el objeto Selection o el objeto ActiveDocument). En realidad, los objetos tienen dos formas de manipularse: métodos y propiedades.
Los métodos son como verbos, describen una acción. Por ejemplo:
ActiveDocument.PrintPreview
ActiveDocument.AcceptAllRevisionsShown
Las propiedades son como adjetivos, describen objetos. Por ejemplo:
MsgBox ActiveDocument.Paragraphs(1).Range.Text
ActiveDocument.Paragraphs(1).Range.Text = "New text for Paragraph 1"
En el primer ejemplo la macro "lee" la propiedad Text y muestra el texto en un cuadro de mensaje. En el segundo ejemplo, la macro "escribe" (o establece) la propiedad Text. Si se ejecuta esa línea de código, se modificará el texto existente en el primer párrafo a "New text for Paragraph 1".
En general, la macro puede "leer" o "escribir" una propiedad. Sin embargo, algunas propiedades son de solo lectura. Por ejemplo, el objeto Documents tiene una propiedad denominada .Count. Tenga en cuenta lo siguiente:
MsgBox Documents.Count ' Reports the number of currentlyopen documents.
Documents.Count = 4 ' Does not work: .Count is a readonly property.
Escritura de código de acceso directo: una macro para alternar la visualización de límites de texto
Cuando edito un documento grande, me gusta ver los límites de texto en el mismo. Cuando lo reviso, prefiero desactivar los límites de texto. Puede que tenga que activar y desactivar la visualización de límites de texto varias veces durante un día. Para ello, hago clic en el botón Archivo y, en la Ayuda, hago clic en Opciones. En el cuadro de diálogo Opciones de Word, hago clic en Opciones avanzadas y, en Mostrar contenido de documento, activo (o desactivo) Mostrar límites de texto y hago clic en Aceptar. Tener que hacer esta secuencia de clics del mouse una y otra vez es frustrante. Preferiría hacer clic una sola vez para activar o desactivar los límites de texto.
El siguiente ejemplo de código es una macro que se usa para alternar la visualización de límites de texto.
Sub ToggleTextBoundaries1()
ActiveDocument.ActiveWindow.View.ShowTextBoundaries = Not ActiveDocument.ActiveWindow.View.ShowTextBoundaries
End Sub
En Word no importa que la única línea de código sea tan larga, pero hay que escribir mucho y puede resultar difícil de leer para los usuarios. Para acortar la macro y facilitar su lectura, use la palabra clave With, tal como se muestra en el siguiente ejemplo de código.
Sub ToggleTextBoundaries2()
With ActiveDocument.ActiveWindow.View
.ShowTextBoundaries = Not .ShowTextBoundaries
End With
End Sub
En el modelo de objetos, se puede "explorar en profundidad" de un objeto a otro mediante un punto (".") entre cada elemento de la jerarquía. Dado que el punto demarca un objeto secundario de su objeto primario, no se puede iniciar una línea de código sin un punto (salvo cuando se usa la palabra clave With).
Cada palabra clave With debe estar emparejada a una instrucción End With. Entre With y End With, se puede usar un punto para iniciar un acceso directo.
With ActiveDocument.ActiveWindow.View
' Between With and End With you can use
' a period to begin shortcut code.
' The shortcut will refer to ActiveDocument.ActiveWindow.View.
End With
Por ejemplo, entre With y End With, el acceso directo .ShowTextBoundaries se refiere a ActiveDocument.ActiveWindow.View.ShowTextBoundaries.
Cuando hay código que se refiere al mismo objeto varias veces, se escribe menos y se facilita la lectura si se usa With y End With.
Esta todavía no es una macro sólida, pero se puede hacer una versión final sólida, tal como se muestra en el siguiente ejemplo de código.
Sub ToggleTextBoundaries()
If Documents.Count > 0 Then
With ActiveDocument.ActiveWindow.View
.ShowTextBoundaries = Not .ShowTextBoundaries
End With
End If
End Sub
En esta versión final de ToggleTextBoundaries, hay un bloque With…End With anidado en un bloque If…End If. Al aplicar sangría en las líneas, se asegura de que cada With coincide con su End With y cada instrucción If coincide con su instrucción End If.
Uso de With y el objeto Selection: una macro para insertar una sección horizontal
Este es un ejemplo más completo que usa la palabra clave With: una macro para insertar una sección horizontal en el cursor.
Esta macro usa la palabra clave With con el objeto Selection (es decir, With Selection). A medida que adquiera habilidad para escribir macros, verá que usa el objeto Selection cada vez menos, porque a menudo resulta más eficaz usar un objeto Range. Observar esta macro es una buena forma de aprender cómo Word administra el objeto Selection. Con Word y el VBE colocados en mosaico, haga clic en la macro y presione F8 varias veces para recorrer la macro línea por línea, para ver lo que ocurre en la ventana principal de Word.
Esta macro muestra también que cuando hay varias líneas de texto se recomienda dividirlas en "párrafos" lógicos, con comentarios para describir lo que el código pretende hacer.
Public Sub InsertLandscapeSectionHere()
' Purpose: Insert a landscape section at the insertion point,
' and insert text to tell the user where the landscape section is.
If Documents.Count > 0 Then
' The user has a document open, so insert a
' landscape section.
With Selection
' Do not accidentally over-write selected text
.Collapse Direction:=wdCollapseStart
' Insert section breaks with blank paragraphs
' in the new section.
.TypeParagraph
.Style = ActiveDocument.Styles(wdStyleNormal)
.InsertBreak Type:=wdSectionBreakNextPage
.TypeParagraph
.TypeParagraph
.TypeParagraph
.InsertBreak Type:=wdSectionBreakNextPage
.MoveUp Unit:=wdLine, Count:=3
' Set the orientation of new section to landscape.
.PageSetup.Orientation = wdOrientLandscape
' Provide guidance to the user.
.TypeText Text:="Your landscape section starts here."
End With
Else
' Tell the user what to do.
MsgBox "Please open a document and try again."
End If
End Sub
Verá dos tipos de sintaxis en esta macro:
La primera sintaxis usa un signo igual (=): Selection.PageSetup.Orientation = wdOrientLandscape
La segunda sintaxis usa dos puntos y un signo igual (=): Selection.InsertBreak Type:=wdSectionBreakNextPage.
Para obtener más información acerca de las diferencias entre estos tipos de sintaxis, vea el artículo de información sobre la sintaxis de Visual Basic en la Ayuda del VBE.
Más información acerca de las macros de Word y el Editor de Visual Basic
El Editor de Visual Basic (VBE) incluye herramientas para ayudarle a escribir sus propias macros. Esta es una lista de cosas que debe tener en cuenta:
La grabadora de macros de Word es una herramienta muy eficaz. Si desea escribir una macro, pero no sabe qué partes del modelo de objetos de Word debe usar, la grabadora de macros es la mejor manera de averiguarlo. Para obtener más información, vea los temas sobre cómo grabar una macro para generar código y cómo modificar una macro grabada.
Cuando escriba el nombre de un objeto en el modelo de objetos de Word (como Selection o ActiveDocument) y después escriba un punto (.),Word mostrará una lista de todas las propiedades y métodos de ese objeto. Si desea obtener más información, vea el tema para entender los conceptos básicos de VBA en 15 minutos.
La ventana Inmediato en el VBE puede ayudarle a aprender más acerca del modelo de objetos de Word y a probar macros sencillas. Para obtener más información, vea el tema sobre cómo ampliar Word 2007, Excel 2007 y PowerPoint 2007 con una sola línea de código VBA.
Puede personalizar los menús y barras de herramientas en el VBE. Una personalización útil consiste en crear métodos abreviados de teclado para los comentarios. Para ello, haga clic con el botón secundario en el espacio abierto junto al menú o las barras de herramientas y seleccione Personalizar. En el cuadro de diálogo Personalizar, en la pestaña Barras de herramientas, seleccione la barra de herramientas Editar. Deje el cuadro de diálogo Personalizar abierto. En la barra de herramientas Editar, haga clic con el botón secundario en el botón Poner marca de comentario en el bloque, cambie el nombre a &Comentario y, a continuación, haga clic en Imagen y Texto. Use el mismo procedimiento para el botón Quitar marca de comentario del bloque y asígnele el nombre &Sin comentarios. Ahora puede seleccionar varias líneas de código y usar los métodos abreviados de teclado Alt+C y Alt+U para comentar el código seleccionado o quitar la marca del comentario.
El VBE incluye una gran cantidad de información de ayuda. Esta será la principal fuente de información sobre el modelo de objetos de Word:
Para obtener información general, en el menú de ayuda del VBE, haga clic en la Ayuda de Microsoft Visual Basic para Aplicaciones. Asegúrese de mostrar la Tabla de contenido; para ello, haga clic en el pequeño icono de libro en la barra de herramientas del visor de la Ayuda del cliente. Esto hace que la exploración de la ayuda para desarrolladores sea mucho más intuitiva. Concretamente, en Conceptos, lea los temas en las preguntas más frecuentes sobre Visual Basic.
Si desea obtener ayuda específica sobre una palabra clave o un objeto del modelo de objetos de Word (por ejemplo, ActiveDocument), haga clic en la palabra y presione F1 para leer la Ayuda acerca de esa palabra clave u objeto.
Conclusión
Las macros de Word pueden ser largas, complejas y eficaces. Se puede escribir una macro para comunicarse con una base de datos externa, realizar cálculos y devolver el resultado a Word. También se puede escribir una macro en Word para controlar Excel, PowerPoint u Outlook. A veces las macros sencillas resultan útiles y pueden ahorrar mucho tiempo.
Si la macro es para dar formato al texto, puede ser conveniente crear un estilo en lugar de escribir una macro. Si la macro es para controlar el diseño de un documento, puede ser conveniente crear una nueva plantilla. Además, puede haber un comando integrado que se puede agregar a la barra de herramientas de acceso rápido (al personalizar la barra de herramientas de acceso rápido, en la lista Comandos disponibles en, haga clic en Todos los comandos).
Diviértase creando macros, pero no pierda mucho tiempo escribiendo una macro para que haga lo que Word ya puede hacer.
Recursos adicionales
Para obtener más información, vea los siguientes recursos:
Ampliación de Word 2007, Excel 2007 y PowerPoint 2007 con una sola línea de código de VBA
Solución de problemas de documentos de Word 2007 con mayor facilidad mediante el uso de VBA
Uso de VBA para dar formato a documentos extensos de Word 2007 en una fracción de tiempo
Ver vídeo sobre el uso de VBA para controlar comandos integrados en 2007 Office System
Difusión por web: usar VBA a diario es más sencillo de lo que cree
Acerca del autor
Shauna Kelly desarrolla complementos y plantillas de Word para ayudar a los usuarios de instituciones públicas y empresas a usar Word de forma más eficaz. Es colaboradora MVP de Microsoft Word desde 2002.