Como Usar VBA para Inserir Imagem na Posição do Cursor
🔍 WiseChecker

Como Usar VBA para Inserir Imagem na Posição do Cursor

Inserir uma imagem diretamente na posição do cursor em um documento do Word não é um recurso de um clique na faixa de opções padrão. O menu Inserir > Imagens padrão coloca a imagem no cursor, mas muitas vezes altera o alinhamento ou exige redimensionamento e posicionamento manuais. Usar uma macro VBA oferece controle preciso sobre onde a imagem será inserida e como ela se comporta. Este artigo explica como escrever uma macro VBA que insere uma imagem exatamente na posição do cursor e a mantém ancorada ao texto ao redor.

Você aprenderá os principais objetos VBA, como InlineShape e Range, as diferenças entre imagens flutuantes e inline, e como lidar com a seleção de arquivos. O guia inclui uma macro pronta para uso, explicações de cada linha e dicas para evitar problemas comuns, como distorção da imagem ou posicionamento incorreto.

Principais Conclusões: Inserir Imagem no Cursor com VBA

  • Método Selection.Range.InlineShapes.AddPicture: Insere a imagem como uma forma inline no ponto de seleção atual, mantendo-a vinculada ao fluxo do texto.
  • FileDialog(msoFileDialogFilePicker): Permite que o usuário escolha um arquivo de imagem sem sair do Word, evitando caminhos de arquivo fixos no código.
  • Propriedade LockAspectRatio: Evita a distorção da imagem ao redimensioná-la posteriormente, seja por código ou manualmente.

ADVERTISEMENT

Por que Inserir Imagens no Cursor no Word Exige VBA

O comando Inserir > Imagens padrão coloca uma imagem no cursor, mas não oferece controle programático. Você não pode inserir várias imagens em lote, definir uma largura específica ou garantir que a imagem permaneça inline com o texto. Quando você precisa inserir muitas imagens em um documento com formatação consistente — por exemplo, fotos de produtos em um catálogo ou capturas de tela em um manual — o método manual se torna lento e propenso a erros.

As macros VBA resolvem isso usando a coleção InlineShapes. Uma forma inline se comporta como um caractere de texto grande. Ela fica na mesma linha do texto ao redor e se move quando você edita o texto. Esta é a maneira mais previsível de inserir uma imagem no cursor, pois a imagem se torna parte do parágrafo. A macro também pode travar a proporção, definir uma largura padrão e até filtrar tipos de arquivo para que apenas imagens sejam selecionáveis.

Antes de escrever a macro, verifique se suas configurações de segurança permitem a execução de macros. Vá em Arquivo > Opções > Central de Confiabilidade > Configurações da Central de Confiabilidade > Configurações de Macro e selecione Habilitar todas as macros. Para uso em produção, considere assinar sua macro com um certificado digital.

Como Escrever uma Macro VBA para Inserir uma Imagem no Cursor

A macro usa o objeto FileDialog para permitir que o usuário escolha uma imagem. Em seguida, insere essa imagem como uma forma inline na seleção atual. O código abaixo inclui tratamento de erros para casos em que o usuário cancela o diálogo ou seleciona um arquivo que não é imagem.

  1. Abra o Editor VBA
    Pressione Alt + F11 para abrir o Editor Visual Basic. No painel Projeto, clique duas vezes em Normal ou no nome do documento onde deseja armazenar a macro. Clique com o botão direito no módulo de destino e escolha Inserir > Módulo para criar um novo módulo de código.
  2. Nomeie a macro e declare as variáveis
    Copie e cole o código a seguir no módulo. O nome da macro é InsertImageAtCursor.
    Sub InsertImageAtCursor()
        Dim fd As FileDialog
        Dim filePath As String
        Dim img As InlineShape
        
        Set fd = Application.FileDialog(msoFileDialogFilePicker)
        With fd
            .Title = "Selecione uma imagem para inserir"
            .Filters.Clear
            .Filters.Add "Imagens", "jpg;jpeg;png;gif;bmp;tiff"
            .AllowMultiSelect = False
            If .Show = -1 Then
                filePath = .SelectedItems(1)
            Else
                MsgBox "Nenhuma imagem selecionada.", vbExclamation, "Cancelado"
                Exit Sub
            End If
        End With
        
        Set img = Selection.Range.InlineShapes.AddPicture( _
            FileName:=filePath, _
            LinkToFile:=False, _
            SaveWithDocument:=True)
        
        With img
            .LockAspectRatio = msoTrue
            .Width = InchesToPoints(3)
        End With
        
        Set fd = Nothing
        Set img = Nothing
    End Sub
  3. Execute a macro
    Feche o Editor VBA. Posicione o cursor exatamente no local do documento onde deseja a imagem. Pressione Alt + F8, selecione InsertImageAtCursor e clique em Executar. Uma caixa de diálogo de seleção de arquivo será aberta. Navegue até um arquivo de imagem e clique em Inserir.
  4. Verifique o resultado
    A imagem aparece no cursor como uma forma inline. Ela é definida com largura de 3 polegadas e proporção bloqueada. Você pode alterar o valor da largura na macro editando .Width = InchesToPoints(3) — substitua 3 por qualquer número. A macro salva a imagem dentro do documento, para que não dependa do local original do arquivo.

Alternativa: Inserir uma Imagem sem Caixa de Diálogo

Se você sempre insere a mesma imagem, pode fixar o caminho do arquivo no código. Substitua o bloco da caixa de diálogo por filePath = "C:\Users\SeuNome\Imagens\logo.png". Lembre-se de que caminhos fixos quebram se a imagem for movida ou se a macro for executada em outro computador.

Alternativa: Inserir como Forma Flutuante

Para inserir a imagem como uma forma flutuante que pode ser arrastada livremente, use Selection.Range.Shapes.AddPicture. Formas flutuantes não são ancoradas ao cursor da mesma forma — elas se fixam ao parágrafo mais próximo. Para inserção verdadeira na posição do cursor, formas inline são mais confiáveis.

ADVERTISEMENT

Erros Comuns ao Inserir Imagens com VBA

A Imagem Aparece no Topo do Documento em Vez do Cursor

Isso acontece quando você usa ActiveDocument.InlineShapes.AddPicture sem especificar um Range. O intervalo padrão para uma chamada no nível do documento é o início do documento. Sempre use Selection.Range.InlineShapes.AddPicture para mirar na posição exata do cursor.

A Imagem Está Distorcida ou Cortada

A distorção ocorre quando você define tanto .Width quanto .Height sem travar a proporção. A macro acima define .LockAspectRatio = msoTrue e altera apenas a largura. A altura se ajusta automaticamente. Se você precisar definir ambas as dimensões, calcule a proporção: .Height = .Width * (alturaOriginal / larguraOriginal).

A Caixa de Diálogo Não Mostra Imagens

A string de filtro na macro inclui extensões de imagem comuns. Se sua imagem tiver uma extensão incomum, como .webp, adicione-a ao filtro: "jpg;jpeg;png;gif;bmp;tiff;webp". Você também pode remover todos os filtros para mostrar todos os arquivos: .Filters.Clear sem adicionar novos filtros.

A Macro Não Executa Devido às Configurações de Segurança

Se o Word bloquear a macro, abra a Central de Confiabilidade e selecione Habilitar todas as macros. Para uma abordagem mais segura, salve o documento como um arquivo habilitado para macro (.docm) e assine digitalmente a macro. Macros não assinadas de fontes desconhecidas são desabilitadas por padrão.

Inserção de Imagem Inline vs Flutuante: Comparação

Item Forma Inline (InlineShapes) Forma Flutuante (Shapes)
Ancoragem Na posição exata do cursor como um caractere de texto Ancorada ao parágrafo mais próximo, não ao cursor
Quebra de texto Inline com o texto — sem configuração de quebra A quebra padrão é Quadrado ou Apertado — pode ser alterada
Estabilidade de posição Move-se com edições de texto como um caractere Permanece em uma posição fixa da página, a menos que você defina posicionamento relativo
Método VBA Selection.Range.InlineShapes.AddPicture Selection.Range.Shapes.AddPicture
Melhor caso de uso Inserir imagens em um local específico do texto para relatórios ou manuais Inserir logotipos ou gráficos que devem permanecer em um canto fixo da página

Após inserir a imagem, você pode converter uma forma inline em flutuante clicando com o botão direito na imagem, selecionando Quebra Automática de Texto e escolhendo uma opção não inline. O inverso não é possível — formas flutuantes não podem ser convertidas em formas inline pela interface do usuário.

Agora você pode inserir qualquer imagem na posição exata do cursor usando uma macro VBA que preserva a proporção e a portabilidade do arquivo. Para estender esta macro, adicione um loop para inserir várias imagens de uma pasta usando chamadas da função Dir. Para usuários avançados, combine esta macro com um formulário que permita escolher a largura e o tipo de arquivo antes da inserção.

ADVERTISEMENT