Cómo programar una macro para que se ejecute al guardar un documento
🔍 WiseChecker

Cómo programar una macro para que se ejecute al guardar un documento

Desea que una macro VBA personalizada se ejecute automáticamente cada vez que guarda un documento de Word. Word no expone una configuración directa para ejecutar una macro al guardar, pero proporciona un evento integrado llamado DocumentBeforeSave que puede usar. Este artículo explica cómo escribir y adjuntar una macro al evento DocumentBeforeSave para que su código se ejecute antes de que finalice la operación de guardado. Aprenderá los pasos exactos para crear la macro, probarla y manejar problemas comunes como la seguridad de macros y múltiples ventanas de documentos.

Puntos clave: Automatizar una macro al guardar un documento

  • Evento DocumentBeforeSave en el módulo ThisDocument: Activa el código de su macro antes de cualquier acción de guardado en ese documento específico.
  • Protección con contraseña del proyecto VBA: Evita que usuarios no autorizados vean o modifiquen la macro automática.
  • Archivo > Opciones > Centro de confianza > Configuración de macros > Habilitar todas las macros: Necesario para permitir que se ejecute el evento DocumentBeforeSave.

ADVERTISEMENT

Entender el evento DocumentBeforeSave en VBA de Word

VBA de Word proporciona procedimientos de evento que se activan cuando ocurren acciones específicas. El evento DocumentBeforeSave se ejecuta automáticamente cada vez que guarda el documento, ya sea que use Ctrl+S, haga clic en el icono Guardar o cierre el documento y elija guardar los cambios. Este evento pertenece al objeto Application, pero también puede manejarlo a nivel de documento usando el módulo de clase ThisDocument.

El evento pasa un argumento: SaveAsUI, un valor Boolean que le indica si Word está mostrando el cuadro de diálogo Guardar como. Puede verificar este valor dentro de su macro para decidir si ejecutar cierto código solo durante una operación completa de Guardar como.

Antes de escribir la macro, asegúrese de tener acceso a la pestaña Desarrollador. Si la pestaña Desarrollador no está visible, vaya a Archivo > Opciones > Personalizar cinta de opciones y marque la casilla Desarrollador en el panel derecho. También necesita permitir la ejecución de macros en la configuración del Centro de confianza. Vaya a Archivo > Opciones > Centro de confianza > Configuración del Centro de confianza > Configuración de macros y seleccione Habilitar todas las macros. Para macros firmadas, puede elegir Deshabilitar todas las macros excepto las firmadas digitalmente en su lugar.

Dónde colocar la macro de evento

Debe colocar la macro DocumentBeforeSave dentro del objeto ThisDocument del documento específico. No la ponga en un módulo estándar. El módulo ThisDocument es visible en el Explorador de proyectos bajo Objetos de Microsoft Word. Haga doble clic en ThisDocument para abrir su ventana de código.

Pasos para crear y probar una macro que se ejecuta al guardar un documento

Siga estos pasos para agregar una macro que muestre un cuadro de mensaje antes de cada guardado. Puede reemplazar el código del cuadro de mensaje con su propia lógica, como actualizar una marca de tiempo, hacer una copia de seguridad del archivo o validar el contenido.

  1. Abrir el Editor de VBA
    Presione Alt+F11 para abrir el editor de Visual Basic para Aplicaciones. Si el Explorador de proyectos no está visible, presione Ctrl+R para mostrarlo.
  2. Localizar el módulo ThisDocument
    En el Explorador de proyectos, expanda el proyecto que corresponde a su documento. Por lo general, aparece como Proyecto (NombreDelDocumento). Bajo Objetos de Microsoft Word, haga doble clic en ThisDocument.
  3. Elegir el evento Document en la lista desplegable
    En la parte superior de la ventana de código, haga clic en la lista desplegable izquierda y seleccione Document. La lista desplegable derecha muestra automáticamente (Declaraciones). Haga clic en la lista desplegable derecha y seleccione DocumentBeforeSave. El editor de VBA inserta el esqueleto del procedimiento de evento con End Sub.
  4. Escribir el código de su macro dentro del procedimiento de evento
    Entre Private Sub DocumentBeforeSave(ByVal SaveAsUI As Boolean, ByRef Cancel As Boolean) y End Sub, agregue su código. Por ejemplo:
    MsgBox "Saving the document now. SaveAsUI = " & SaveAsUI
  5. Probar la macro
    Cierre el editor de VBA. Guarde el documento presionando Ctrl+S. Debería aparecer un cuadro de mensaje antes de que Word complete el guardado. Haga clic en Aceptar para permitir que finalice el guardado.
  6. Guardar el documento como un archivo habilitado para macros
    Vaya a Archivo > Guardar como. En la lista desplegable Guardar como tipo, seleccione Documento de Word habilitado para macros (docm). Si guarda como .docx, la macro y el procedimiento de evento se descartan.

Usar el argumento Cancel para detener un guardado

El evento DocumentBeforeSave incluye un parámetro Cancel. Si establece Cancel = True dentro del procedimiento, Word cancela la operación de guardado. Esto es útil para la validación: si no se cumplen ciertas condiciones, puede evitar que se guarde el documento. Por ejemplo:

Private Sub DocumentBeforeSave(ByVal SaveAsUI As Boolean, ByRef Cancel As Boolean)
    If Len(ActiveDocument.BuiltInDocumentProperties("Title")) = 0 Then
        MsgBox "You must set a document title before saving."
        Cancel = True
    End If
End Sub

Cuando Cancel es True, Word no guarda el documento. El usuario debe corregir el problema y guardar de nuevo.

ADVERTISEMENT

Problemas comunes al ejecutar una macro al guardar un documento

La macro no se ejecuta cuando guardo

La causa más común son las configuraciones de seguridad de macros. Vaya a Archivo > Opciones > Centro de confianza > Configuración del Centro de confianza > Configuración de macros y seleccione Habilitar todas las macros. También verifique que el documento esté guardado como un archivo .docm. Si la extensión del archivo es .docx, el proyecto de VBA se elimina y el evento nunca se activa.

Otra causa es colocar el código en un módulo estándar en lugar del módulo ThisDocument. Solo el módulo ThisDocument puede alojar procedimientos de evento a nivel de documento. Mueva el código a ThisDocument y elimine el duplicado en el módulo estándar.

La macro se ejecuta para cada documento abierto

Si colocó el evento DocumentBeforeSave en la plantilla Normal.dotm, la macro se ejecuta para cada documento que usa esa plantilla. Para restringir la macro a un documento, coloque el código solo en el módulo ThisDocument de ese documento. Evite editar Normal.dotm a menos que desee el comportamiento de forma global.

La macro deja de funcionar después de cerrar y volver a abrir el documento

Esto sucede cuando el documento se guardó como un archivo .docx. Vuelva a guardar el documento como Documento de Word habilitado para macros (.docm). El procedimiento de evento se conserva solo en archivos habilitados para macros. También verifique que el proyecto de VBA no esté dañado. Abra el editor de VBA, haga clic derecho en el proyecto y seleccione Propiedades de VBAProject. En la pestaña Protección, asegúrese de que Bloquear proyecto para verlo esté desmarcado si desea editar el código más adelante.

Evento DocumentBeforeSave vs otros eventos relacionados con el guardado

Elemento DocumentBeforeSave DocumentSave
Cuándo se activa Antes de que comience la operación de guardado Después de que finaliza la operación de guardado
Puede cancelar el guardado Sí, estableciendo Cancel = True No, el guardado ya ha finalizado
Ubicación en VBA Módulo ThisDocument, objeto Application o Document Módulo ThisDocument, solo objeto Document
Caso de uso Validación, registro o copia de seguridad antes de guardar Actualizar metadatos o desencadenar acciones después de que se escribe el archivo

Si necesita ejecutar código después de que finalice el guardado, use el evento DocumentSave en su lugar. Ese evento no tiene un parámetro Cancel porque el guardado ya se completó. Ambos eventos deben colocarse en el módulo ThisDocument del documento específico.

Ahora puede programar cualquier macro de VBA para que se ejecute automáticamente al guardar un documento de Word. Comience escribiendo una macro de prueba simple en el evento DocumentBeforeSave del documento de destino. Después de verificar que funciona, reemplace el código de prueba con su lógica de automatización real. Para evitar cambios accidentales, proteja el proyecto de VBA con una contraseña a través de Herramientas > Propiedades de VBAProject > Protección > Bloquear proyecto para verlo.

ADVERTISEMENT