Como Escrever Macro VBA no Word para Compressão em Lote de Imagens Antes de Salvar
🔍 WiseChecker

Como Escrever Macro VBA no Word para Compressão em Lote de Imagens Antes de Salvar

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.

ADVERTISEMENT

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.

  1. 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.
  2. 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.
  3. 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
    
  4. 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.
  5. 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 qualidade
  • ppResolution150 – 150 PPI, bom para a maioria dos documentos
  • ppResolution96 – 96 PPI, melhor para e-mail ou visualização em tela
  • ppResolution72 – 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.

ADVERTISEMENT

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.

ADVERTISEMENT