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
¿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.
- Compartir respuesta