Cuando inserta varias imágenes de alta resolución en un documento de Word, el tamaño del archivo puede aumentar rápidamente, lo que dificulta compartirlo o almacenarlo. Word no ofrece un comando integrado de un solo clic para comprimir todas las imágenes a la vez antes de guardar. Puede usar una macro VBA para automatizar la compresión de imágenes en lote, reduciendo el tamaño del archivo sin ajustar manualmente cada imagen. Este artículo explica cómo escribir y ejecutar una macro VBA que comprime cada imagen en su documento antes de la operación de guardado.
Puntos clave: Escribir una macro VBA para la compresión de imágenes en lote
- Alt + F11 para abrir el editor de VBA: Acceda al entorno de Visual Basic for Applications donde escribe la macro.
- ActiveDocument.InlineShapes o .Shapes: Use estos objetos para recorrer todas las imágenes en el cuerpo del documento y en los encabezados y pies de página.
- Método PictureFormat.Compress: El comando principal que reduce la resolución de la imagen y elimina las áreas recortadas.
- Application.Options.PictureCompression: Establezca esta propiedad en True antes de la compresión para asegurarse de que Word aplique la configuración de compresión.
Cómo almacena Word las imágenes y por qué es importante la compresión
Word almacena cada imagen insertada en su resolución original de forma predeterminada. Una foto de 10 megapíxeles de una cámara digital puede ocupar de 5 a 10 MB dentro del documento. Cuando inserta veinte de estas imágenes, el tamaño del archivo supera los 100 MB. Esto hace que el documento se abra lentamente, sea difícil de enviar por correo electrónico y problemático para el almacenamiento en la nube.
La función de compresión integrada de Word reduce la resolución de todas las imágenes a un PPI objetivo, normalmente 220 PPI para uso web o 150 PPI para correo electrónico. También descarta las áreas recortadas que están ocultas a la vista. Puede aplicar esta configuración manualmente a través de Archivo > Opciones > Avanzadas > Tamaño y calidad de la imagen, o mediante el botón Comprimir imágenes en la pestaña Formato de imagen de la cinta de opciones. Sin embargo, ninguno de los dos métodos permite comprimir imágenes automáticamente antes de cada guardado. Una macro VBA resuelve esta limitación ejecutando la lógica de compresión cuando la activa, ya sea manualmente o automáticamente al guardar.
Requisitos previos para ejecutar una macro VBA
Antes de escribir la macro, asegúrese de que la configuración de seguridad de Word permita las macros. Vaya a Archivo > Opciones > Centro de confianza > Configuración del Centro de confianza > Configuración de macros. Seleccione Habilitar todas las macros. Esta configuración es temporal para el desarrollo; vuelva a Deshabilitar todas las macros con notificación después de las pruebas. También necesita familiaridad básica con el editor de VBA. La macro descrita funciona en Word 2016, Word 2019, Word 2021 y Word para Microsoft 365.
Escribir la macro VBA para la compresión de imágenes en lote
La macro recorre todas las imágenes en línea y las formas flotantes en el cuerpo del documento, luego aplica la compresión. También admite imágenes en encabezados y pies de página. El código utiliza el método PictureFormat.Compress que requiere un objeto PictureCompression.
- Abrir el Editor de VBA
Presione Alt + F11 en Word. Se abre la ventana de Visual Basic for Applications. Si el Explorador de proyectos no está visible, presione Ctrl + R para mostrarlo. - Insertar un nuevo módulo
En el Explorador de proyectos, busque Normal o el nombre de su documento actual. Haga clic derecho y seleccione Insertar > Módulo. Aparece una ventana de código en blanco. - Pegar el código de la macro
Copie y pegue el siguiente código en la ventana del módulo:Sub CompressAllImages() Dim shp As Shape Dim ils As InlineShape Dim s As Section Dim hf As HeaderFooter ' Set compression options Application.Options.PictureCompression = True ' Compress inline shapes in document body For Each ils In ActiveDocument.InlineShapes If ils.Type = wdInlineShapePicture Then ils.PictureFormat.Compress ppResolutionDefault, msoFalse End If Next ils ' Compress floating shapes in document body For Each shp In ActiveDocument.Shapes If shp.Type = msoPicture Then shp.PictureFormat.Compress ppResolutionDefault, msoFalse End If Next shp ' Compress images in headers and footers For Each s In ActiveDocument.Sections For Each hf In s.Headers For Each shp In hf.Shapes If shp.Type = msoPicture Then shp.PictureFormat.Compress ppResolutionDefault, msoFalse End If Next shp For Each ils In hf.InlineShapes If ils.Type = wdInlineShapePicture Then ils.PictureFormat.Compress ppResolutionDefault, msoFalse End If Next ils Next hf For Each hf In s.Footers For Each shp In hf.Shapes If shp.Type = msoPicture Then shp.PictureFormat.Compress ppResolutionDefault, msoFalse End If Next shp For Each ils In hf.InlineShapes If ils.Type = wdInlineShapePicture Then ils.PictureFormat.Compress ppResolutionDefault, msoFalse End If Next ils Next hf Next s MsgBox "All images compressed.", vbInformation End Sub - Ejecutar la macro
Presione F5 o haga clic en Ejecutar > Ejecutar Sub/UserForm. La macro comprime todas las imágenes y muestra un mensaje de confirmación. Alternativamente, cierre el editor y presione Alt + F8, seleccione CompressAllImages, luego haga clic en Ejecutar. - Guardar el documento
Después de ejecutar la macro, guarde el documento normalmente (Ctrl + S). El tamaño del archivo debería ser significativamente menor.
Personalizar la resolución de compresión
La macro utiliza ppResolutionDefault que aplica la resolución predeterminada establecida en Opciones de Word. Para especificar un PPI concreto, reemplace ppResolutionDefault con una de las siguientes constantes:
ppResolution200– 200 PPI, adecuado para impresión de alta calidadppResolution150– 150 PPI, bueno para la mayoría de los documentosppResolution96– 96 PPI, mejor para correo electrónico o visualización en pantallappResolution72– 72 PPI, la calidad más baja pero el tamaño de archivo más pequeño
Por ejemplo, para comprimir a 150 PPI, cambie la línea a: ils.PictureFormat.Compress ppResolution150, msoFalse
Ejecutar la macro automáticamente antes de guardar
Para comprimir imágenes automáticamente cada vez que guarde, use el evento DocumentBeforeSave. Esto requiere colocar código en el módulo de clase ThisDocument. Haga doble clic en ThisDocument en el Explorador de proyectos y pegue lo siguiente:
Private Sub DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
Call CompressAllImages
End Sub
Ahora, cada vez que guarde, la macro ejecuta primero la compresión. Tenga en cuenta que esto puede ralentizar el proceso de guardado en documentos grandes.
Problemas comunes con la macro de compresión
La macro no comprime imágenes en encabezados o pies de página
El código anterior incluye bucles para encabezados y pies de página. Si aún encuentra imágenes en encabezados que no se comprimen, verifique que las imágenes no estén vinculadas. Las imágenes vinculadas no están incrustadas y no se pueden comprimir. Convierta las imágenes vinculadas en incrustadas seleccionándolas, haciendo clic derecho y eligiendo Cambiar imagen > Desde archivo, luego vuelva a insertar la imagen sin vincular.
La compresión causa pérdida de calidad de imagen
La macro utiliza la constante de resolución que especifique. Si el documento requiere impresión de alta calidad, use ppResolution200 o ppResolutionDefault con una configuración predeterminada alta. Para cambiar el valor predeterminado, vaya a Archivo > Opciones > Avanzadas > Tamaño y calidad de la imagen y establezca la salida objetivo en 220 PPI o más.
La macro se ejecuta pero no se produce compresión
Verifique que las imágenes estén incrustadas, no vinculadas. También verifique que Application.Options.PictureCompression esté establecido en True. Si esta propiedad es False, el método Compress no tiene efecto. La macro lo establece en True al inicio, pero si ocurre un error antes de que se ejecute esa línea, es posible que la compresión no se aplique.
Error: Error en el método Compress del objeto PictureFormat
Este error ocurre cuando la imagen está dañada o en un formato no compatible. Inserte la imagen de nuevo usando un formato estándar como JPEG o PNG. También asegúrese de que la imagen no esté en un control de contenido que restrinja el acceso programático. Desbloquee el control de contenido o elimínelo temporalmente.
Compresión manual vs macro VBA: diferencias clave
| Elemento | Compresión manual | Compresión con macro VBA |
|---|---|---|
| Número de clics por imagen | 3 o más por imagen | 1 ejecución de macro para todas las imágenes |
| Tiempo para 50 imágenes | 5–10 minutos | Menos de 10 segundos |
| Encabezados y pies de página incluidos | Debe navegar manualmente | Incluidos automáticamente |
| Resolución personalizada por imagen | Posible por imagen | Misma resolución para todas |
| Automatización antes de guardar | No es posible | Posible con el evento DocumentBeforeSave |
Ahora puede escribir y usar una macro VBA para comprimir todas las imágenes en un documento de Word antes de guardar. Comience probando la macro en una copia de su documento. Ajuste la constante de resolución para que coincida con sus necesidades de calidad. Para una automatización avanzada, adjunte la macro al evento DocumentBeforeSave para que la compresión ocurra automáticamente cada vez que guarde. Recuerde restaurar la configuración de seguridad de macros después de las pruebas para evitar que se ejecuten macros no autorizadas.