Guardar imagen en una macro Excel

He buscado pero no he encontrado nada al respecto, mi meta es una macro que almacene una imagen en especifico de manera permanente y la inserte siempre que le de la orden.

La idea es que la macro la pueda ejecutar en cualquier archivo Excel o en cualquier computador y cuando la inicie inserte la imagen. Nota: La macro no deberá extraer la imagen del pc ya que, la idea es que la macro siempre tenga esa imagen hay almacenada, para cuando siempre se inicie la inserte.

3 Respuestas

Respuesta

La única forma de almacenar una imagen es dejarla fuera de la vista dentro de una hoja y solo copiarla a donde la necesites, te anticipo que trabajar con muchas imágenes en excel alentá mucho los procesos.

Respuesta

Una forma de hacerlo es poner la ruta de la imagen en la macro, la macro es un conjunto de instrucciones que no almacenan nada lo unico que hece es ejecutar instrucciones para lo que pides necesitas esta macro solo inserta una imagen de una ruta predefinada, ojo primero hace un borrado de imagen preestablecida, cambia la variable ruta la direccion del archivo en tu maquina.

Sub insertar_foto()
Set objeto = ActiveSheet.Shapes
For Each foto In objeto
    tipo = foto.Type
    If tipo = 13 Then
        foto.Delete
    End If
Next foto
ruta = "c:\bibliotecas\monterrey\1653765_903178973068910_1474863024517629694_n.jpg"
ActiveSheet.Pictures.Insert (ruta)
End Sub

Por cierto lo que pides de hacerlo en cualquier maquina por macro no se logra quizá por un formulario solo que este no te dejara pasarla a hoja puesto que invariablemente necesitara la ruta del archivo en la maquina.

Pero e eliminado la foto de mi maquina, y aun así el UserForm en Image, tiene la imagen almacenada. Osea que por hay va la cosa.

Si efectivamente la imagen se guarda por tiempo indefinido en el userform y esto es porque el userform es un objeto que tiene propiedades de almacenar la foto como un objeto imagen el cual no se puede copiar ni usando programación VBE y dudo mucho que en foros de Excel en español encuentres una solución que no sea recuperar la imagen

Respuesta

Hay varias formas de hacer eso, la primera que me viene a la mente es con un OLEobject. Cuando pones una imagen en un control de Excel, la imagen se agrega al proyecto y se almacena su referencia en la propiedad Picture.

Este es un vídeo que grabé como prueba de su funcionamiento: video demo

Si te fijas en el vídeo elimine la imagen de mi PC, para que veas que la ruta no importa, ya que se crea un Bitmap en el proyecto del libro Excel y si te fijas en el código tampoco se accede a ninguna ruta, solo a la propiedad Picture.

Este es el código que usé:

Private Sub CommandButton1_Click()
Dim CrearImg As OLEObject
    With Worksheets("Sheet1")
        Set CrearImg = .OLEObjects.Add(ClassType:="Forms.Image.1", _
                        Link:=False, _
                        DisplayAsIcon:=False, _
                        Left:=.Cells(3, "C").Left, _
                        Top:=.Cells(3, "C").Top, _
                        Width:=Me.Image1.Width, _
                        Height:=Me.Image1.Height)
    End With
    With CrearImg
        .Object.PictureSizeMode = 3
        .Object.Picture = Me.Image1.Picture
    End With
End Sub

Como te dije hay algún par de formas mas, como con el método Render de la propiedad Picture quizás, pero se complica un poco. Hmmm también usando BitBlt y un dibujado de pantalla, pero la forma mas sencilla es esa que te mostré, y su rendimiento dependerá de cuantos OLEObjects vas a crear, de que tamaño, calidad de la foto etc etc.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas