Eu precisava ter uma macro do Excel para inserir uma imagem no Excel. Liguei o gravador de macro, inseri a imagem. Mas quando usei esse código gravado, a imagem não aparecerá em nenhum outro computador. Em vez disso, recebo um X vermelho onde a imagem deveria estar.
O código usado para funcionar no Excel 2007 ou anterior. Mas algo mudou no Excel 2010. Quando você executa o código para ActiveSheet.Pictures.Insert, o Excel * não * está inserindo a imagem. Em vez disso, ele está inserindo um link para a imagem.
Claro, quando você executa o código em seu computador, parece que tudo funcionou. A imagem aparece.

Mas quando alguém abre a pasta de trabalho em outro PC, recebe um X vermelho e uma mensagem informando que a imagem pode ter sido movida ou renomeada.

Bem, é claro que a imagem não está no computador do meu gerente. Não pedi ao Excel para criar um link para a imagem. Pedi ao Excel para inserir a imagem. Mas o código gravado está inserindo um link para a imagem.
A solução é mudar para um código diferente. Usando Shapes.AddPicture, você pode especificar LinkToFile:=msoFalse
. Aqui está o código a ser usado:
Sub HowToInsertPicture() ' This code fails in 2010 or newer ' ActiveSheet.Pictures.Insert( _ ' "C:UsersBillDesktopPhotoPrintAll RocketaWalg180422-3.jpg.webp").Select NewFN = "C:UsersBillDesktopPhotoPrintAll RocketaWalg180422-3.jpg.webp" ActiveSheet.Shapes.AddPicture(Filename:=NewFN, _ LinkToFile:=msoFalse, _ SaveWithDocument:=msoTrue, _ Left:=1, Top:=1, Width:=140, Height:=195).Select End Sub
Assistir vídeo
Transcrição de vídeo
Aprenda Excel com o Podcast, Episódio 2214: Bug VBA realmente irritante quando você está tentando inserir uma imagem.
Tudo bem. Então, ei, isso começou a acontecer no Excel 2010. Acabei de me queimar de novo recentemente.
Vou inserir uma imagem nesta pasta de trabalho, mas quero registrar essa ação para que possa fazê-la automaticamente. Exibir, macros, macro do gravador, HowToInsertAPicture. Perfeito. E só vou inserir uma imagem aqui: Ilustrações, Imagens, vamos escolher uma de nossas fotos de foguete e inserir. Tudo bem, pare de gravar. Bonito. Agora, vou me livrar disso. Eu quero dar uma olhada nas macros, então Alt + F8, HowToInsertAPicture, Edit e diz é este: ActiveSheet.Pictures.Insert e então o caminho para a imagem. Tudo bem. Sim, parece bom. E, de fato, devemos ser capazes de executar isso. Então Alt + 8, HowToInsertAPicture e Run, e temos a imagem - isso é lindo. Até que eu salve esta pasta de trabalho e deixe você baixá-la ou enviá-la para outra pessoa, e então a imagem nãonão apareço - tudo que recebo é um X vermelho dizendo: Ei, não podemos mais encontrar a foto. Tipo, o que você quer dizer com não consegue encontrar a imagem? Pedi que você inserisse uma imagem, não um link para a imagem. Mas, a partir do Excel 2010, esse código gravado está, na verdade, inserindo um link para a imagem. E se eu abrir essa pasta de trabalho em algum lugar em um computador que não tem acesso a este drive e aquela imagem: X vermelho. Super irritante.
Tudo bem. Então, por algum motivo, no Excel 2010, a nova coisa a fazer é, em vez de ActiveSheet.Pictures.Insert, fazer ActiveSheet.Shapes.AddPicture. Tudo bem. E ainda podemos especificar um nome de arquivo, mas então estes argumentos extras que temos: LinkToFile = msoFalse-- em outras palavras, não crie o link vermelho estúpido-- e então, SaveWithDocument: = msoTrue-- o que significa, na verdade coloque a maldita imagem lá e eles podem especificar onde ela deve estar-- a esquerda, o topo …
Agora, como descobrimos a altura e a largura? Tudo bem. Bem, queremos redimensionar isso proporcionalmente, certo? Vou manter pressionada a tecla Shift, tipo, voltar para menos de uma tela cheia de dados, talvez assim aqui. Então esse é o meu objetivo. Quero inserir a imagem e ter um feixe desse tamanho com o selecionado. Voltarei ao VBA Alt + F11, Ctrl + G para a janela imediata e pedirei:? selection.width-- então isso é um ponto de interrogação, espaço, largura do ponto de seleção e um ponto de interrogação, altura do ponto de seleção (? Selection.height). Tudo bem, e isso me diz cerca de 140 e 195 - então a largura, 140 e 195, assim. Livre-se da janela imediata e, em seguida, excluiremos isso e executaremos o código, e ele realmente o inseriu. É do tamanho certo, poderá ser aberto quando você fizer o download,ou faço o download, se você não tiver acesso à imagem original.
Eu entendo, as coisas mudam, eles tiveram que mudar o código. Mas o fato de eles não terem atualizado o gravador de macro, e o gravador de macro estar nos fornecendo o código ruim, isso não funciona. Isso é super irritante.
Bem, ei, para aprender mais sobre macros, dê uma olhada neste livro, Excel 2016 VBA Macros, de Tracy Syrstad e eu. Na verdade, temos uma versão disso para cada versão desde o Excel 2003. Então, seja o que for que você tenha, desde que seja o Windows, há uma versão para você.
Tudo bem, encerrar hoje - é meu problema. Gravei o código para inserir uma imagem e ele está criando um link para a imagem, para que qualquer outra pessoa para quem eu envie a pasta de trabalho não possa ver a imagem. Em vez disso, estou usando o gravador de macro que executa ActiveSheets.Shape.Picture, use este novo ActiveSheet.Shapes.AddPicture. Ou podemos especificar LinkToFile, não; salvar com documento, sim; e você estará pronto para ir.
Bem, ei, obrigado por assistir, vejo você na próxima vez para outro netcast de.
Baixar arquivo Excel
Para baixar o arquivo excel: vba-insert-picture-bug.xlsm
Muitas vezes, o gravador de macro do Excel grava o código errado. Com a correção acima, você pode inserir imagens com êxito usando o VBA.
Excel Pensamento do Dia
Pedi conselhos aos meus amigos do Excel Master sobre o Excel. O pensamento de hoje para ponderar:
“O Excel é uma ferramenta a serviço das pessoas que têm que conviver com as consequências”.
Oz du Soleil