Ao inserir várias imagens de alta resolução em um documento do Word, o tamanho do arquivo pode crescer rapidamente, dificultando o compartilhamento ou armazenamento. O Word não oferece um comando nativo de um clique para comprimir todas as imagens de uma vez antes de salvar. Você pode usar uma macro VBA para automatizar a compressão em lote, reduzindo o tamanho do arquivo sem ajustar manualmente cada imagem. Este artigo explica como escrever e executar uma macro VBA que comprime todas as imagens do documento antes da operação de salvar.
Principais Pontos: Escrevendo uma Macro VBA para Compressão em Lote de Imagens
- Alt + F11 para abrir o editor VBA: Acesse o ambiente Visual Basic for Applications onde você escreve a macro.
- ActiveDocument.InlineShapes ou .Shapes: Use esses objetos para percorrer todas as imagens no corpo do documento e nos cabeçalhos/rodapés.
- Método PictureFormat.Compress: O comando principal que reduz a resolução da imagem e remove áreas cortadas.
- Application.Options.PictureCompression: Defina esta propriedade como True antes da compressão para garantir que o Word aplique as configurações de compressão.
Como o Word Armazena Imagens e Por Que a Compressão é Importante
Por padrão, o Word armazena cada imagem inserida em sua resolução original. Uma foto de 10 megapixels de uma câmera digital pode ocupar de 5 a 10 MB dentro do documento. Ao inserir vinte dessas imagens, o tamanho do arquivo ultrapassa 100 MB. Isso torna o documento lento para abrir, difícil de enviar por e-mail e problemático para armazenamento em nuvem.
O recurso de compressão integrado do Word reduz a resolução de todas as imagens para um PPI alvo, normalmente 220 PPI para uso na web ou 150 PPI para e-mail. Ele também descarta áreas cortadas que estão ocultas. Você pode aplicar essas configurações manualmente através de Arquivo > Opções > Avançado > Tamanho e qualidade da imagem, ou pelo botão Comprimir Imagens na guia da faixa de opções Formato da Imagem. No entanto, nenhum dos métodos permite comprimir imagens automaticamente antes de cada salvamento. Uma macro VBA resolve essa limitação executando a lógica de compressão quando você a aciona, manualmente ou automaticamente ao salvar.
Pré-requisitos para Executar uma Macro VBA
Antes de escrever a macro, verifique se as configurações de segurança do Word permitem macros. Vá em Arquivo > Opções > Central de Confiabilidade > Configurações da Central de Confiabilidade > Configurações de Macro. Selecione Habilitar todas as macros. Essa configuração é temporária para desenvolvimento; reverta para Desabilitar todas as macros com notificação após os testes. Você também precisa de familiaridade básica com o editor VBA. A macro descrita funciona no Word 2016, Word 2019, Word 2021 e Word para Microsoft 365.
Escrevendo a Macro VBA para Compressão em Lote de Imagens
A macro percorre todas as imagens inline e formas flutuantes no corpo do documento e aplica a compressão. Ela também suporta imagens em cabeçalhos e rodapés. O código usa o método PictureFormat.Compress que requer um objeto PictureCompression.
- Abra o Editor VBA
Pressione Alt + F11 no Word. A janela Visual Basic for Applications é aberta. Se o Project Explorer não estiver visível, pressione Ctrl + R para exibi-lo. - Insira um Novo Módulo
No Project Explorer, localize Normal ou o nome do seu documento atual. Clique com o botão direito e selecione Inserir > Módulo. Uma janela de código em branco aparece. - Cole o Código da Macro
Copie e cole o seguinte código na janela do módulo:Sub CompressAllImages() Dim shp As Shape Dim ils As InlineShape Dim s As Section Dim hf As HeaderFooter ' Definir opções de compressão Application.Options.PictureCompression = True ' Comprimir formas inline no corpo do documento For Each ils In ActiveDocument.InlineShapes If ils.Type = wdInlineShapePicture Then ils.PictureFormat.Compress ppResolutionDefault, msoFalse End If Next ils ' Comprimir formas flutuantes no corpo do documento For Each shp In ActiveDocument.Shapes If shp.Type = msoPicture Then shp.PictureFormat.Compress ppResolutionDefault, msoFalse End If Next shp ' Comprimir imagens em cabeçalhos e rodapés 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 "Todas as imagens foram comprimidas.", vbInformation End Sub - Execute a Macro
Pressione F5 ou clique em Executar > Executar Sub/UserForm. A macro comprime todas as imagens e exibe uma mensagem de confirmação. Alternativamente, feche o editor e pressione Alt + F8, selecione CompressAllImages e clique em Executar. - Salve o Documento
Após executar a macro, salve o documento normalmente (Ctrl + S). O tamanho do arquivo deve ser significativamente menor.
Personalizando a Resolução da Compressão
A macro usa ppResolutionDefault que aplica a resolução padrão definida nas Opções do Word. Para especificar um PPI específico, substitua ppResolutionDefault por uma das seguintes constantes:
ppResolution200– 200 PPI, adequado para impressão de alta qualidadeppResolution150– 150 PPI, bom para a maioria dos documentosppResolution96– 96 PPI, melhor para e-mail ou visualização em telappResolution72– 72 PPI, qualidade mais baixa, mas menor tamanho de arquivo
Por exemplo, para comprimir para 150 PPI, altere a linha para: ils.PictureFormat.Compress ppResolution150, msoFalse
Executando a Macro Automaticamente Antes de Salvar
Para comprimir imagens automaticamente toda vez que você salvar, use o evento DocumentBeforeSave. Isso requer colocar o código no módulo de classe ThisDocument. Dê um duplo clique em ThisDocument no Project Explorer e cole o seguinte:
Private Sub DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
Call CompressAllImages
End Sub
Agora, toda vez que você salvar, a macro executará a compressão primeiro. Observe que isso pode tornar o salvamento mais lento em documentos grandes.
Problemas Comuns com a Macro de Compressão
A Macro Não Comprime Imagens em Cabeçalhos ou Rodapés
O código acima inclui loops para cabeçalhos e rodapés. Se você ainda encontrar imagens em cabeçalhos não comprimidas, verifique se as imagens não estão vinculadas. Imagens vinculadas não são incorporadas e não podem ser comprimidas. Converta imagens vinculadas em incorporadas selecionando-as, clicando com o botão direito e escolhendo Alterar Imagem > De Arquivo e reinserindo a imagem sem vinculação.
A Compressão Causa Perda de Qualidade da Imagem
A macro usa a constante de resolução que você especificar. Se o documento exigir impressão de alta qualidade, use ppResolution200 ou ppResolutionDefault com uma configuração padrão alta. Para alterar o padrão, vá em Arquivo > Opções > Avançado > Tamanho e qualidade da imagem e defina a saída alvo para 220 PPI ou superior.
A Macro é Executada, Mas Nenhuma Compressão Ocorre
Verifique se as imagens estão incorporadas, não vinculadas. Verifique também se Application.Options.PictureCompression está definido como True. Se essa propriedade for False, o método Compress não terá efeito. A macro a define como True no início, mas se ocorrer um erro antes dessa linha ser executada, a compressão pode não ser aplicada.
Erro: Method Compress of Object PictureFormat Failed
Esse erro ocorre quando a imagem está corrompida ou em um formato não suportado. Insira a imagem novamente usando um formato padrão como JPEG ou PNG. Certifique-se também de que a imagem não está em um controle de conteúdo que restrinja o acesso programático. Desbloqueie o controle de conteúdo ou remova-o temporariamente.
Compressão Manual vs Macro VBA: Principais Diferenças
| Item | Compressão Manual | Compressão com Macro VBA |
|---|---|---|
| Número de cliques por imagem | 3 ou mais por imagem | 1 execução da macro para todas as imagens |
| Tempo para 50 imagens | 5–10 minutos | Menos de 10 segundos |
| Cabeçalhos e rodapés incluídos | É necessário navegar manualmente | Incluídos automaticamente |
| Resolução personalizada por imagem | Possível por imagem | Mesma resolução para todas |
| Automação antes de salvar | Não é possível | Possível com o evento DocumentBeforeSave |
Agora você pode escrever e usar uma macro VBA para comprimir todas as imagens em um documento do Word antes de salvar. Comece testando a macro em uma cópia do seu documento. Ajuste a constante de resolução para atender às suas necessidades de qualidade. Para automação avançada, anexe a macro ao evento DocumentBeforeSave para que a compressão ocorra automaticamente toda vez que você salvar. Lembre-se de restaurar as configurações de segurança de macro após os testes para evitar a execução de macros não autorizadas.