Ir ao conteúdo

Excel Transferir imagem do Excel para formulário no word


Ir à solução Resolvido por Edson Luiz Branco,

Posts recomendados

Postado

@LaerteB    Boa noite! Atualmente criei um formulário que após eu cadastrar minha informações no excel me permiti transferir as informações do userform para um documento do word. No entanto, só consigo transferir o texto. Queria também poder transferir a imagem carregada no formulário do registro pesquisado na listbox1 junto com as suas informações. Conhece algum comando que permite transferir a imagem para um campo pré-determinado no word? Estou encaminhado o projeto do excel, a pasta com formulário modelo e a pasta para salvamento das imagens após o cadastro (se for em altera não salva a imagem na pasta, melhor apagar o cadastros e inserir novos com imagens, caso queira). 

Para poder abrir o formulário do word tem que mudar o caminho da pasta no seu pc (atualizar o caminho da pasta Relatórios) assim como a para salvar as imagens (atualizar o caminho da pasta imagensnf). Ver imagens anexas 1 e 2.

Após é só selecionar um registro no listbox1 e da um click botão relatórios. Vide imagem 3 e 4.

 

Desde já agradeço a atenção e a disponibilidade! Muito obrigado :D

relatorio.png

salvar imagem.png

Sem título.png

Sem título1.png

inserir imagem no word.zip

Postado
Em 12/08/2020 às 22:44, josequali disse:

@LaerteB 🥺. Consegui inserir o ícone de inserir imagem no word após gerar o relatório, mas ainda não é o que quero. Queria transferir direto a imagem para o word. Achei alguns tutoriais mais não se aplicavam ao que eu queria! 😩😞

 

Postado

Alguns detalhes além da correta solução apresentada por @Midori:

O ideal no Word, ao invés de usar texto-captcha como #MOTIVO, #DESCRIÇÃO seria usar marcadores de posição/indicadores (bookmarks: guia Inserir > grupo Links > Indicador). No caso de imagens, melhor ainda seria inserir em seu modelo um Controle de Conteúdo (Content Control) tipo Imagem (guia Desenvolvedor > grupo Controles > Controle de Conteúdo de Imagem).
Mas como você já marcou a posição usando o texto "Inserir imagem aqui" e já que está usando o método Find para as outras captchas, seguindo o mesmo raciocínio, poderia fazer assim (o método AddPicture é o mesmo que @Midori sugeriu):
 

Sub btnrelatorio_Click()
  '...
  '...
  With DOC
    '...
    '...
    'COMANDO PARA A IMAGEM
    Dim wdRg As Word.Range
    Set wdRg = .Content
    wdRg.Find.Execute FindText:="Inserir imagem aqui"
    wdRg.Text = ""
    wdRg.InlineShapes.AddPicture FileName:="C:\Users\Paloma\Desktop\imagensnf\x.jpg", _
                                 LinkToFile:=False, _
                                 SaveWithDocument:=True
    '...
  End With
  '...
End Sub

 

  • Curtir 1
Postado

Esse erro indica que você não está usando ligação antecipada aos objetos do Word (Early Binding). Então ou você marca a biblioteca do Word pra poder usar seus objetos diretamente ou usa variável objeto genérica.

Para a primeira alternativa, basta ir no menu Ferramentas do VBA e em Referências... rolar até encontrar e marcar a biblioteca do Word (Microsoft Word xx.x Object Library).

A outra forma é continuar usando ligação tardia (Late Binding) e, ao invés de dimensionar a variável wdRg As Word.Range, dimensione-a As Object.

  • Curtir 1
Postado
13 minutos atrás, josequali disse:

 fiz  mudança indicada

Qual das duas?

 

13 minutos atrás, josequali disse:

apareceu outro erro.

Qual a mensagem do erro?

 

Uma pergunta: a frase "Inserir imagem aqui" ainda estava no texto do doc quando você rodou a macro?

Postado

Esse erro indica que não existe a imagem x.jpg no caminho C:\Users\Paloma\Desktop\imagensnf  (ou você está no PC errado rsrsrsrs). Confira se o caminho existe e, se existir, se a imagem com o nome x e com extensão jpg está mesmo naquela pasta.

49 minutos atrás, josequali disse:

A outra não funcionou.

🤔 Como assim?

 

_____

P.S.: pra facilitar, selecione e copie daqui mesmo C:\Users\Paloma\Desktop\imagensnf\x.jpg, abra o Windows explorer ou o navegador Web que você usa, então cole na barra de endereços e dê enter. Se a imagem não aparecer, ela não está lá.

Postado
1 minuto atrás, josequali disse:

...o código só funciona se a imagem estiver com o nome x.jgp, porque a depender da imagem que eu salvar o nome pode alterar

 

Veja, o código dá as linhas gerais que você deve seguir. Logicamente que se o nome do arquivo é outro ou varia, você poderá implementar isso para que se altere. O foco da dúvida era inserir imagem no documento Word à partir do Excel e foi isso que foi buscado até esse ponto.

 

adicionado 8 minutos depois

O erro "Era esperado variável ou procedimento, não projeto" provavelmente é porque você usou o nome reservado Word também como nome de variável. Evite usar nomes internos de objetos, de comandos, de métodos, de constantes enumeradas... enfim. Eu gosto de dar nomes às variáveis na língua portuguesa mesmo, pois evita esses conflitos. Mas é minha opinião apenas. Ou use um sufixo numérico como Word1, por exemplo.

 

  • Curtir 1
Postado

@Edson Luiz Branco funcionou, mas o problema que nem toda  imagem tem nome “x.jpg”. Como posso alternar. Fazer a busca pela imagem com o nome salvo na linha. Porque para cada cadastro a imagem salva terá um nome diferente na mesma pasta. Segunda dúvida: Ao inserir no word como fazer que ela tenha uma tamanho específico para não deformar o formulário? Desde já agradeço pela disponibilidade! Obrigado 🤗

Postado
10 horas atrás, josequali disse:

o problema que nem toda  imagem tem nome “x.jpg”. Como posso alternar. Fazer a busca pela imagem com o nome salvo na linha. Porque para cada cadastro a imagem salva terá um nome diferente na mesma pasta.

Não analisei seu código do restante do projeto todo porque são muitos e como você não limpou o que não era essencial à solução das dúvidas, foquei apenas no procedimento de exportação ao Word.

Porém percebi que em alguns trechos de código você já usa  variáveis/controles que conteriam o caminho/nome da imagem ou talvez ela viria da coluna I, linha 3 em diante... não sei, você que conhece seu projeto saberá melhor identificar. Verifique qual é (loadimg, loadimg_imagem, LocalImagens, imagem1, origen, destino, explorar_arquivo...) e use-a como variável no nome que o Word inserirá no documento. Se precisar que ela não perca o valor ao encerrar o procedimento em que foi criada, dimensione-a em nível de módulo (bem no topo) pra que seu valor se mantenha entre uma chamada e outra.

adicionado 47 minutos depois
 

Quanto à segunda dúvida:

10 horas atrás, josequali disse:

Segunda dúvida: Ao inserir no word como fazer que ela tenha uma tamanho específico para não deformar o formulário? 

Crie uma variável:

Dim pic As Object            (se usar L.B.) ou
Dim pic As Word.InlineShape  (se usar E.B.)

 

Substitua a linha da inserção direta da figura por essa que insere mas ao mesmo tempo atribui à variável (atenção aos parênteses):

Set pic = wdRg.InlineShapes.AddPicture(Filename:="C:\Users\Paloma\Desktop\imagensnf\x.jpg", _
                                       LinkToFile:=False, _
                                       SaveWithDocument:=True)

Trave a proporção entre altura e largura pra não deformar ao redimensionar:

pic.LockAspectRatio = msoTrue

Defina ou a largura (pic.Width) ou a altura (pic.Height) em pontos (não ambas).

pic.Width = 250

Alternativamente, ao invés de largura/altura, você pode definir uma porcentagem do tamanho atual ou para a altura ou para a largura. Números maiores que 100 aumentam e menores diminuem. No comando abaixo, a imagem aumentaria 10%:

pic.ScaleWidth = 110

 

  • Curtir 1
Postado

@Edson Luiz Branco fiz as mudanças sugeridas, o tamanho da imagem agora regula, entretanto, ele só transfere a imagem renomeada como x. Se eu escolher outro cadastro com outra imagem, ela não é transferida.

 

No código abaixo o x é o nome da imagem que ele trás salva com o nome: x. (veja imagem abaixo).

 

Set pic = wdRg.InlineShapes.AddPicture(Filename:="C:\Users\Paloma\Desktop\imagensnf\x.jpg" 

 

O nome da textbox que traz o caminho da imagem é: loadimg

 

Mudanças feitas:

 

Set Word1 = CreateObject("Word.Application")
    Word1.Visible = True
    
    Set doc = Word.Documents.Open("C:\Users\Paloma\Desktop\Relatorios\Relatorio_de_nao_conformidade.docx")


        With doc

       .

       .

       .
      Dim wdRg As Object
    Set wdRg = .Content
    Dim pic As Object
    wdRg.Find.Execute FindText:= "#IMAGEM"
    wdRg.Text = ""
    Set pic = wdRg.InlineShapes.AddPicture(Filename:="C:\Users\Paloma\Desktop\imagensnf\x.jpg", _
                                 LinkToFile:=False, _
                                 SaveWithDocument:=True)
        pic.LockAspectRatio = msoTrue
        pic.Width = 150
        pic.Height = 150

      .

      .    
End Sub

Sem título.png

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...