VBA Insérer un bogue d'image - Conseils Excel

Table des matières

J'avais besoin d'une macro Excel pour insérer une image dans Excel. J'ai allumé l'enregistreur macro, j'ai inséré l'image. Mais lorsque j'ai utilisé ce code enregistré, l'image n'apparaîtra sur aucun autre ordinateur. Au lieu de cela, j'obtiens un X rouge à l'endroit où l'image devrait être.

Le code utilisé pour fonctionner dans Excel 2007 ou version antérieure. Mais quelque chose a changé dans Excel 2010. Lorsque vous exécutez du code dans ActiveSheet.Pictures.Insert, Excel n'insère * pas * l'image. Au lieu de cela, il insère un lien vers l'image.

Bien sûr, lorsque vous exécutez le code sur votre ordinateur, il semble que tout a fonctionné. L'image apparaît.

On dirait que la macro a fonctionné.

Mais lorsque quelqu'un ouvre le classeur sur un autre PC, il reçoit un X rouge et un message indiquant que l'image a peut-être été déplacée ou renommée.

X rouge au lieu de l'image

Eh bien, bien sûr, l'image n'est pas sur l'ordinateur de mon manager. Je n'ai pas demandé à Excel de créer un lien vers l'image. J'ai demandé à Excel d'insérer l'image. Mais le code enregistré insère un lien vers l'image.

La solution est de passer à un code différent. En utilisant Shapes.AddPicture, vous pouvez spécifier LinkToFile:=msoFalse. Voici le code à utiliser:

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

Regarder la vidéo

Transcription vidéo

Apprenez Excel à partir du podcast, épisode 2214: Bug VBA vraiment ennuyeux lorsque vous essayez d'insérer une image.

Bien. Donc, hé, cela a commencé à se produire dans Excel 2010. Je viens de me brûler à nouveau récemment.

Je vais donc insérer une image dans ce classeur, mais je souhaite enregistrer cette action afin de pouvoir le faire automatiquement. Affichage, macros, macro enregistreur, HowToInsertAPicture. Parfait. Et je vais juste insérer une image ici: Illustrations, Images, choisissons l'une de nos photos de fusée et Insérer. D'accord, arrêtez l'enregistrement. Beau. Maintenant, je vais m'en débarrasser. Je veux jeter un oeil aux macros, donc Alt + F8, HowToInsertAPicture, Edit, et il est dit: ActiveSheet.Pictures.Insert, puis le chemin d'accès à l'image. Bien. Ouais, ça sonne bien. Et, en fait, nous devrions être en mesure d'exécuter cela. Donc Alt + 8, HowToInsertAPicture et Run, et nous obtenons l'image - c'est magnifique. Jusqu'à ce que j'enregistre ce classeur et que je vous laisse le télécharger ou l'envoyer à quelqu'un d'autre, puis l'image ne sera pasJe n'apparais pas du tout - tout ce que j'obtiens, c'est un X rouge disant, Hé, nous ne pouvons plus trouver l'image. Comme tu veux dire que tu ne trouves pas l'image? Je vous ai demandé d'insérer une image, pas un lien vers l'image. Mais à partir d'Excel 2010, ce code enregistré insère en fait un lien vers l'image. Et si j'ouvre ce classeur quelque part sur un ordinateur qui n'a pas accès à ce lecteur et à cette image: X rouge. Super ennuyeux.

Bien. Donc, pour une raison quelconque, dans Excel 2010, la nouvelle chose à faire est au lieu d'ActiveSheet.Pictures.Insert que vous faites ActiveSheet.Shapes.AddPicture. Bien. Et nous pouvons toujours spécifier un nom de fichier, mais alors ces arguments supplémentaires que nous avons: LinkToFile = msoFalse - en d'autres termes, ne créez pas le stupide lien rouge - et ensuite, SaveWithDocument: = msoTrue - ce qui signifie, en fait mettez la fichue image là-dedans et ils peuvent spécifier où elle est censée être - la gauche, le haut…

Maintenant, comment déterminer la hauteur et la largeur? Bien. Eh bien, nous voulons redimensionner cela proportionnellement, non? Je vais donc maintenir la touche Maj enfoncée, comme, ramener cela à moins d'un écran plein de données, peut-être comme ça juste là. C'est donc mon objectif. Je veux insérer l'image et avoir un faisceau de cette taille avec celui sélectionné. Je reviendrai à VBA Alt + F11, Ctrl + G pour la fenêtre immédiate, et je demanderai:? selection.width - c'est donc le point d'interrogation, l'espace, la largeur du point de sélection et un point d'interrogation, la hauteur du point de sélection (? Selection.height). D'accord, et cela me dit environ 140 et 195 - donc la largeur, 140 et 195, comme ça. Débarrassez-vous de la fenêtre immédiate, puis ici nous allons supprimer ceci et exécuter le code, et il l'a effectivement inséré. C'est la bonne taille, il pourra être ouvert lorsque vous téléchargez ceci,ou je télécharge ceci, si vous n'avez pas accès à l'image originale.

Je comprends, les choses changent, ils ont dû changer le code. Mais le fait qu'ils n'aient pas mis à jour l'enregistreur de macros et que l'enregistreur de macros nous donnait le mauvais code, cela ne fonctionne pas. C'est super ennuyeux.

Eh bien, pour en savoir plus sur les macros, consultez ce livre, Excel 2016 VBA Macros, par Tracy Syrstad et moi-même. Nous en avons en fait une version pour chaque version remontant à Excel 2003. Donc, quoi que vous ayez, à condition que ce soit Windows, il existe une version pour vous.

Bon, récapitule aujourd'hui - c'est mon problème. J'ai enregistré un code pour insérer une image et cela crée un lien vers l'image, de sorte que toute autre personne à qui j'envoie le classeur ne peut pas voir l'image. Au lieu de cela, j'utilise l'enregistreur de macros qui fait ActiveSheets.Shape.Picture, utilise ce nouveau ActiveSheet.Shapes.AddPicture. Ou nous pouvons spécifier LinkToFile, non; enregistrer avec le document, oui; et vous serez prêt à partir.

Eh bien, merci d'avoir regardé, je vous verrai la prochaine fois pour une autre diffusion sur Internet.

Télécharger le fichier Excel

Pour télécharger le fichier excel: vba-insert-picture-bug.xlsm

Plusieurs fois, l'enregistreur de macros dans Excel enregistre le mauvais code. Avec le correctif ci-dessus, vous pouvez insérer avec succès des images à l'aide de VBA.

Excellente pensée du jour

J'ai demandé à mes amis Excel Master leurs conseils sur Excel. Pensée d'aujourd'hui à méditer:

"Excel est un outil au service des personnes qui doivent vivre avec les conséquences."

Oz du Soleil

Articles intéressants...