Control imagen en formulario excel

Estoy practicando macros para excel con formularios y necesito agregarle a mi gestor de inventarios por medio del humilde formulario que armé en Visual para cargarle una foto del producto de modo tal que, cuando varíe los datos en el combobox, ¿vayan apareciendo las diferentes fotos almacenadas en la planilla correspondiente a cada producto. Yo ya hice la rutina que carga la foto y se ve en el formulario pero necesito la rutina que al presionar el botón "ingresar" guarde el path de la imagen que ingresé. Se entiende?

1 respuesta

Respuesta
1

¿Cuándo cargas la foto cómo lo haces? ¿Abres una ventana para seleccionar el archivo con el explorador de windows?

¿Puedes poner tu código que carga la foto?

¿Y supongo que quieres guardar el path en alguna celda?

Hola Dante, yo le agregue el objeto"imagen" desde las herramientas del formulario y le coloque un botón debajo que dice"cargar fotografía". Cuando toco el botón abre el explorador de mi windows para buscar la foto y al seleccionarla queda en el formulario. Hasta ahí llegue.Lo que necesito ahora es que al tocar el otro botón "registrar producto " pasen 2 cosas: a) que la imagen que cargue se guarde el path en una celda y que aparte guarde todos los valores de cada caja de texzto en la celda correspondiente.Lo que yo no se es como grabar el path de la imagen en la celda de la planilla. Esto es a los efectos de que el operador vea la foto de cada producto a medida que la va pasando. Gracias

Cuando abres el explorador en ese momento puedes obtener la ruta, por eso quiero ver tu código para saber cómo estás abriendo el explorador y poder obtener la ruta y de esa forma pasar la ruta a una celda.

Buen día Dante, justamente eso es lo que no tengo:el código. Yo necesito el código que hace justamente eso, es decir hacerlo desde cero.

Dante, esto seria lo que necesito:

Cargar fotos desde el formulario y guardar el path como se ve en la planilla.

Saludos

Tú escribiste esto:

"Yo ya hice la rutina que carga la foto "

¿A qué rutina te refieres?

¿Es un código de programación en vba? ¿Si es así lo puedes poner?

O envíame tu archivo y me explicas con un ejemplo lo que necesitas

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Gustavo Ariel” y el título de esta pregunta.

Dante, más claro de lo que he sido no puedo.Voy de nuevo: armé un formulario en el cual le coloqué un control "imagen" con un botón debajo que dice "cargar imagen". ¿Cuándo le doy click al botón "cargar imagen" me aparece un explorador para buscar la foto que quiero cargar, la cargo y aparece en el formulario.ESO ES LO QUE PROGRAME, es decir cargar la foto y poder verla en el formulario.Lo que necesito ahora es el código para que, al tocar el otro botón "ingresar artículo nuevo", la imagen que cargué previamente se grabe en la planilla excel.Se entendió?. Saludos

Ya entendí.

Te explico un poco, la imagen que cargaste en el control "imagen" está en memoria. Entonces no tenemos información de esa imagen, para pasar la imagen a excel se tiene que obtener la información de la imagen como lo es la ruta y el nombre del archivo.

Lo que te pedí es que pusieras el código de "ESO ES LO QUE PROGRAME", para poder obtener la ruta y el nombre de la imagen.

Voy a suponer cuál es tu código para abrir el explorador, ya que hay varias formas de abrirlo.

Suponiendo que tienes esto

Private Sub CommandButton1_Click()
'Por.Dante Amor
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Seleccione archivo imagen"
        .Filters.Clear
        .Filters.Add "Todos", "*.*"
        .Filters.Add "imagen", "*.jp*"
        .FilterIndex = 2
        .AllowMultiSelect = False
        .InitialFileName = ThisWorkbook.Path
        '.Show
        If .Show Then
            archivo = .SelectedItems.Item(1)
            Image1.Picture = LoadPicture(archivo)
        End If
    End With
End Sub

Voy a poner en la variable archivo la información de la imagen, entonces en la variable archivo tengo la ruta y el nombre del archivo de la imagen.

Ya que tengo la información, ahora sí, voy a "pasar" la imagen a la plantilla, por ejemplo voy a poner la imagen en la celda D4 (previamente puse la celda D4 con las medidas que necesito.

La macro completa, fíjate cómo al principio de la macro declaré la variable archivo, esto significa que la voy a ocupar en diferentes eventos:

Dim archivo
'
Private Sub CommandButton1_Click()
'Por.Dante Amor
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Seleccione archivo imagen"
        .Filters.Clear
        .Filters.Add "Todos", "*.*"
        .Filters.Add "imagen", "*.jp*"
        .FilterIndex = 2
        .AllowMultiSelect = False
        .InitialFileName = ThisWorkbook.Path
        '.Show
        If .Show Then
            archivo = .SelectedItems.Item(1)
            Image1.Picture = LoadPicture(archivo)
        End If
    End With
End Sub
'
Private Sub CommandButton2_Click()
'Por.Dante Amor
    If archivo <> "" Then
        Set imagen = Sheets("Hoja1").Pictures.Insert(archivo)
        'asignamos el rango de celdas que ocupará la foto
        With Range("D4")
            Arriba = .Top
            Izquierda = .Left
            Ancho = .Width
            Alto = .Height
        End With
        '
        With imagen
            .ShapeRange.LockAspectRatio = msoFalse
            .Top = Arriba
            .Left = Izquierda
            .Width = Ancho
            .Height = Alto
        End With
        '
    End If
End Sub

Te anexo mi archivo para que veas el funcionamiento y lo adaptes a tu formulario.

https://www.dropbox.com/s/4e64eajbe0h7utc/insertar%20img%20de%20form%20a%20hoja.xlsm?dl=0 


Si tienes dudas de cómo adaptar el código a tu formulario avísame.


Saludos. Dante Amor

Muchas gracias Dante, este es el código que coloque cuando presiono el botón "cargar imagen"

Private Sub CommandButton3_Click()
On Error Resume Next
        ArchivoIMG = Application.GetOpenFilename("Imágenes jpg,*.jpg,Imágenes bmp,*.bmp", 0, "Seleccionar Imágen para Reegistro de Clientes")
        Image1.Picture = LoadPicture("")
        Image1.Picture = LoadPicture(ArchivoIMG)
End Sub

Este código lo que hace es abrirme un "explorador" para buscar la foto y cargarla y como decís vos esta en memoria. Hasta acá llegue.Lo que necesitaba era que el path de esa foto quedara grabado en la planilla de esta manera

Eso es todo. Gracias!

Esta muy bueno el código Dante pero la única diferencia es que vos grabas toda la imagen en la planilla y yo quiero guardar el path de la carpeta donde la saque en la planilla porque me imagino que se agrandaría la planilla de una manera mosntruosa si coloco imágenes todos los días. Yo esta técnica la vi en otro la do pero perdí el rastro por eso les consulto a ustedes que son los capos! :)

Muy bien !

Entonces quedaría así.

Esoty declarando la variable al principio del código puse Dim ArchivoIMG

En el commandbutton4 está el código para poner la ruta y el nombre del archivo en la última fila de la columna F, cambia la "A" por la columna que siempre tenga datos y cambia la "F" por la columna en la que quieres poner la ruta y nombre de archivo.

Dim ArchivoIMG
Private Sub CommandButton3_Click()
    On Error Resume Next
    ArchivoIMG = Application.GetOpenFilename("Imágenes jpg,*.jpg,Imágenes bmp,*.bmp", 0, "Seleccionar Imágen para Reegistro de Clientes")
    Image1.Picture = LoadPicture("")
    Image1.Picture = LoadPicture(ArchivoIMG)
End Sub
'
Private Sub CommandButton4_Click()
'Por.Dante Amor
    If ArchivoIMG <> "" Then
        u = Range("A" & Rows.Count).End(xlUp).Row + 1
        Cells(u, "F") = ArchivoIMG
    End If
End Sub

Si tienes dudas avísame.

Saludos. Dante Amor

Si es lo que necesitas.

Querido Dante,aquí te coloco el proyecto completo. Presiona el botón "registro de productos" y presiona "cargar imagen". Decime en que parte tendría que colocar el código para que quede grabado el path de la imagen. Muchas gracias

 http://www.gigasize.com/get/w1zdbz2k2nf

No me permite hacer la descarga,

Envíame tu archivo

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Gustavo Ariel” y el título de esta pregunta.

Código actualizado

Dim ArchivoIMG
Private Sub CommandButton1_Click()
    Dim Fila As Integer
    Dim final As Integer
    Dim Registro As Integer
    For Fila = 1 To 1000
        If Hoja2.Cells(Fila, 1) = "" Then
            final = Fila
            Exit For
        End If
    Next
    For Registro = 2 To final
        If Hoja2.Cells(Registro, 1) = (Me.txt_CodProd) Then
            Me.txt_CodProd.BackColor = &H8080FF
            MsgBox ("Registro ya existe" + Chr(13) + "Ingrese un código diferente")
            Me.txt_CodProd.SetFocus
            Exit Sub
            Exit For
        End If
    Next
    If MsgBox("Son correctos los datos?" + Chr(13) + "Desea proceder?", vbOKCancel) = vbOK Then
        Me.txt_CodProd.BackColor = &HFFFFFF
        Hoja2.Cells(final, 1) = Me.txt_CodProd
        Hoja2.Cells(final, 2) = Me.txt_Nombre
        Hoja2.Cells(final, 3) = Me.txt_Descrip
        Hoja2.Cells(final, 4) = ArchivoIMG
        '-----------------------------------------------
        Hoja5.Cells(final, 1) = Me.txt_CodProd
        Hoja5.Cells(final, 2) = Me.txt_Nombre
        Hoja5.Cells(final, 3) = 0
        '-----------------------------------------------
        Me.txt_CodProd = ""
        Me.txt_Nombre = ""
        Me.txt_Descrip = ""
        Me.txt_CodProd.SetFocus
    Else
        Exit Sub
    End If
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Private Sub CommandButton3_Click()
    On Error Resume Next
    ArchivoIMG = Application.GetOpenFilename("Imágenes jpg,*.jpg,Imágenes bmp,*.bmp", 0, "Seleccionar Imágen para Reegistro de Clientes")
    Image1.Picture = LoadPicture("")
    Image1.Picture = LoadPicture(ArchivoIMG)
End Sub

Saludos.Dante Amor

Recuerda valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas