Error de inserción de imagen de VBA - Consejos de Excel

Tabla de contenido

Necesitaba que una macro de Excel insertara una imagen en Excel. Encendí la grabadora de macros, inserté la imagen. Pero cuando usé ese código grabado, la imagen no aparecerá en ninguna otra computadora. En cambio, obtengo una X roja donde debería estar la imagen.

El código utilizado para trabajar en Excel 2007 o versiones anteriores. Pero algo cambió en Excel 2010. Cuando ejecuta código en ActiveSheet.Pictures.Insert, Excel * no * inserta la imagen. En cambio, está insertando un enlace a la imagen.

Por supuesto, cuando ejecuta el código en su computadora, parece que todo funcionó. Aparece la imagen.

Parece que la macro funcionó.

Pero cuando alguien abre el libro de trabajo en otra PC, obtiene una X roja y un mensaje de que la imagen puede haber sido movida o renombrada.

X roja en lugar de la imagen

Bueno, por supuesto que la imagen no está en la computadora de mi Gerente. No le pedí a Excel que creara un enlace a la imagen. Le pedí a Excel que insertara la imagen. Pero el código grabado está insertando un enlace a la imagen.

La solución es cambiar a un código diferente. Al utilizar Shapes.AddPicture, puede especificar LinkToFile:=msoFalse. Aquí está el código a utilizar:

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

Ver video

Transcripción del video

Aprenda Excel del Podcast, Episodio 2214: Error de VBA realmente molesto cuando intenta insertar una imagen.

Bien. Entonces, oye, esto comenzó a suceder en Excel 2010. Recientemente me quemó nuevamente.

Así que voy a insertar una imagen en este libro de trabajo, pero quiero registrar esa acción para poder hacerlo automáticamente. Ver, macros, macro de la grabadora, HowToInsertAPicture. Perfecto. Y solo voy a insertar una imagen aquí: Ilustraciones, Imágenes, escojamos una de nuestras fotos de cohetes e Insertar. Muy bien, deja de grabar. Hermosa. Ahora, me voy a deshacer de eso. Quiero echar un vistazo a las macros, entonces Alt + F8, HowToInsertAPicture, Edit, y dice esto: ActiveSheet.Pictures.Insert y luego la ruta a la imagen. Bien. Sí, eso suena bien. Y, de hecho, deberíamos poder ejecutar esto. Entonces Alt + 8, HowToInsertAPicture y Run, y obtenemos la imagen, eso es hermoso. Hasta que guarde este libro de trabajo y te dejo descargarlo o enviarlo a otra persona, y luego la imagen no aparece.No aparezco en absoluto, todo lo que obtengo es una X roja que dice: Oye, ya no podemos encontrar la imagen. ¿Qué quieres decir con que no puedes encontrar la imagen? Te pedí que insertaras una imagen, no un enlace a la imagen. Pero a partir de Excel 2010, este código grabado en realidad inserta un enlace a la imagen. Y si abro este libro en algún lugar de una computadora que no tiene acceso a esta unidad y esa imagen: X roja. Muy molesto.

Bien. Entonces, por alguna razón, en Excel 2010, lo nuevo que se debe hacer es en lugar de ActiveSheet.Pictures.Insert, haga ActiveSheet.Shapes.AddPicture. Bien. Y todavía podemos especificar un nombre de archivo, pero luego estos argumentos adicionales que tenemos: LinkToFile = msoFalse - en otras palabras, no cree el vínculo rojo estúpido - y luego, SaveWithDocument: = msoTrue - lo que significa, en realidad Pon la maldita imagen allí y pueden especificar dónde se supone que debe estar: la izquierda, la parte superior …

Ahora, ¿cómo calculamos la altura y el ancho? Bien. Bueno, queremos cambiar el tamaño de esto proporcionalmente, ¿verdad? Así que voy a mantener presionada la tecla Shift, como, volver a tener menos de una pantalla llena de datos, tal vez así. Entonces ese es mi objetivo. Quiero insertar la imagen y tener una viga de ese tamaño con la seleccionada. Volveré a VBA Alt + F11, Ctrl + G para la ventana inmediata, y preguntaré:? selection.width - entonces eso es signo de interrogación, espacio, ancho del punto de selección y un signo de interrogación, altura del punto de selección (? Selection.height). Muy bien, y eso me dice acerca de 140 y 195, entonces el ancho, 140 y 195, así. Deshazte de la ventana inmediata, y luego aquí borraremos esto y ejecutaremos el código, y realmente lo insertó. Tiene el tamaño correcto, podrá abrirse cuando descargue esto,o descargo esto, si no tienes acceso a la imagen original.

Lo entiendo, las cosas cambian, tuvieron que cambiar el código. Pero el hecho de que no actualizaron la grabadora de macros y la grabadora de macros nos estaba dando el código incorrecto, eso no funciona. Eso es muy molesto.

Bueno, para obtener más información sobre las macros, consulte este libro, Excel 2016 VBA Macros, de Tracy Syrstad y yo. De hecho, tenemos una versión de esto para cada versión que se remonta a excel 2003. Entonces, lo que sea que tenga, siempre que sea Windows, hay una versión para usted.

Muy bien, termine hoy, es mi problema. Grabé el código para insertar una imagen y está creando un enlace a la imagen, por lo que cualquier otra persona a la que envíe el libro de trabajo no pueda ver la imagen. En su lugar, estoy usando la grabadora de macros que hace ActiveSheets.Shape.Picture, use este nuevo ActiveSheet.Shapes.AddPicture. O podemos especificar LinkToFile, no; guardar con documento, sí; y estarás listo para irte.

Bueno, oye, gracias por mirar, nos vemos la próxima vez para otro netcast de.

Descargar archivo de Excel

Para descargar el archivo de Excel: vba-insert-picture-bug.xlsm

Muchas veces, la grabadora de macros de Excel registra el código incorrecto. Con la corrección anterior, puede insertar imágenes con éxito usando VBA.

Pensamiento del día de Excel

Les he pedido a mis amigos de Excel Master sus consejos sobre Excel. Pensamiento de hoy para reflexionar:

"Excel es una herramienta al servicio de las personas que tienen que vivir con las consecuencias".

Oz du Soleil

Articulos interesantes...