Importar una foto en un userform de VBA

Resuelto
Meloooooo Mensajes publicados 10 Estado Miembro -  
 Johann -
Bonjour,

En el marco de un proyecto informático, debo crear un programa VBA. Se trata de un software para un centro ecuestre.
En un momento de mi proyecto, creé un userform "InscriptionChevaux", que permite al usuario ingresar en el software un nuevo caballo. El usuario deberá ingresar el nombre, la fecha de nacimiento, la raza, etc. del caballo. Pero, también me gustaría que el usuario pudiera agregar la foto del caballo.

Para ello, en mi userform, he insertado una herramienta de imagen llamada "ImageCheval". Quiero que cuando el usuario haga clic en esta herramienta, aparezca un explorador para que el usuario pueda navegar por su PC y encontrar la imagen.

Para esto, he creado la macro siguiente dentro de la herramienta "ImageCheval":

Private Sub ImageCheval_Click() Dim fd As FileDialog Set fd = Application.FileDialog(msoFileDialogFilePicker) fd.Show If fd.SelectedItems.Count > 0 Then MsgBox fd.SelectedItems(1) End If Set fd = Nothing End Sub


Esta macro funciona perfectamente, cuando el usuario hace clic en "ImageCheval", aparece el explorador y puede ir a buscar la foto en cualquier parte del PC. Sin embargo, esta macro no importa ni guarda la foto elegida dentro de mi objeto "ImageCheval". En efecto, quisiera que la foto se guarde en mi hoja de cálculo de Excel para que cuando el usuario quiera consultar los caballos inscritos, la foto vuelva a aparecer.

Por lo tanto, me gustaría saber cómo importar la foto en mi userform y también en mi hoja de cálculo de Excel...?

Espero haber sido claro, y gracias de antemano por tu ayuda :)

23 respuestas

  • 1
  • 2
  1. Meloooooo
     
    Sí, estoy en Excel
    La imagen está bien en el Userform
    Y el código en el botón de imagen del Userform

    Así que aquí está el enlace: http://cjoint.com/?3KutMk9ZeFn

    Una vez que el documento esté abierto, haz clic en "Entrar", luego en "Los caballos", luego en "Inscribir un nuevo caballo" y finalmente haz clic en la imagen.
    1
  2. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    En las referencias añadir Ole Automation
    Con eso no habrá más errores, pero como se dijo más arriba, la imagen no se dibuja
    Añadir un botón (en lugar de Haga clic a continuación para agregar una foto y poner el código en este botón.
    A+

    --
    Si te golpeas con una olla y suena hueca, no necesariamente es la olla la que está vacía. ;-)(Confucio)
    Nota: No respondo a MP para preguntas técnicas. Y mi bola de cristal está rota.
    1
  3. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Para responder a tu segunda pregunta así como en mi hoja de cálculo de Excel...?
    Tu libro de trabajo ya es lo suficientemente "pesado" para añadir todas las fotos.
    Te aconsejaría más bien ...
    Crear un subdirectorio para tus imágenes de caballos
    en el botón validar copiar la imagen seleccionada en este directorio, con un nombre significativo como, por ejemplo, Clientexx.jpg
    De esta manera, cuando lo necesites, solo tienes que recargarlas.
    ¡A+!

    --
    Si te chocas con un recipiente y suena hueco, no necesariamente es el recipiente el que está vacío. ;-)(Confucio)
    Nota: No respondo a los MP para preguntas técnicas. Y mi bola de cristal está rota.
    1
  4. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Hola,
    importar una imagen, nada más fácil
    En el Userform un PictureBox
     PictureBox1.Picture = LoadPicture(Ruta & nombreimagen) 
    en una hoja
    Seleccionar la celda y..
     ActiveSheet.Pictures.Insert(Ruta & nombreImagen).Select
    Solo que, con eso tus imágenes estarán deformadas, si quieres mantener la proporción es mucho más complicado.
    Ver esta demo
    ¡Hasta luego!
    Si te golpeas con una maceta y suena hueca, no necesariamente la maceta está vacía. ;-)(Confucio)
    Nota: No respondo a MP para preguntas técnicas. Y mi bola de cristal está rota.
    0
  5. Meloooooo Mensajes publicados 10 Estado Miembro
     
    Muchas gracias por su rápida respuesta :)

    He instalado este elemento en mi macro, pero aparece un mensaje de error "Error de compilación: Sub o Function no definida" y la depuración resalta "loadpicture", ¿sabe de dónde puede proceder esto?
    0
  6. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    ¿Dónde se encuentra el código? ¿en el módulo del UserForm?
    En VBA no es PictureBox sino Image
    Image1.Picture = LoadPicture("C\Repertoire\Image1.Jpg") 

    Muestra la línea exacta y completa donde se encuentra el error.
    EDIT:
    Para centrar la imagen pon las propiedades..
    PictureAlignment a 2
    PictureSizeMode a 3

    Si te das un golpe con un frasco y suena vacío, no necesariamente es el frasco el que está vacío. ;-)(Confucio)
    Nota: No respondo a los MP para preguntas técnicas. Y mi bola de cristal está rota.
    0
  7. Meloooooo Mensajes publicados 10 Estado Miembro
     
    Te agradezco mucho por tu ayuda :)

    Para Image y no PictureBox, gracias pero me lo había imaginado ;)

    No puedo insertar una captura de pantalla en el foro, pero aquí está mi macro (he puesto en negrita el lugar donde el depurador me resalta y en el momento en que me muestra el mensaje de alerta diciendo que Sub o Function no está definida):

    Private Sub ImageCheval_Click() Dim fd As FileDialog Set fd = Application.FileDialog(msoFileDialogFilePicker) fd.Show If fd.SelectedItems.Count > 0 Then MsgBox fd.SelectedItems(1) ImageCheval.Picture = <gras>loadpicture</gras>(fd) End If Set fd = Nothing End Sub


    Esta macro se encuentra en el Userform y más precisamente en la imagen.

    Sin embargo, no entiendo lo que quieres decirme con esto:
    "EDIT:
    Para centrar la imagen pon las propiedades..
    PictureAlignment a 2
    PictureSizeMode a 3 "
    0
  8. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
     ImageCaballo.Imagen = CargarImagen(fd.ElementosSeleccionados(1))

    Para la Edición:
    En modo edición, clic derecho sobre el control de imagen -> Propiedades
    En la ventana de Propiedades vas a entender lo que quiero decir.
    A+

    --
    Si te golpeas con un bote y suena hueco, no necesariamente el bote está vacío. ;-)(Confucio)
    Nota: No respondo a mensajes privados para preguntas técnicas. Y mi bola de cristal está rota.
    0
  9. Meloooooo Mensajes publicados 10 Estado Miembro
     
    Efectivamente, ahora entiendo mucho mejor las propiedades ;) Muchas gracias, ¡he cambiado como usted me dijo!

    También cambié según sus consejos el loadpicture, pero aún tengo el mensaje de alerta que proviene del loadpicture que dice "Error de compilación: Sub o Function no definida".
    Realmente no entiendo...

    Private Sub ImageCheval_Click() Dim fd As FileDialog Set fd = Application.FileDialog(msoFileDialogFilePicker) fd.Show If fd.SelectedItems.Count > 0 Then MsgBox fd.SelectedItems(1) ImageCheval.Picture = <negrita>[/contents/1171-vbscript-funciones-diversas LoadPicture]</negrita>(fd.SelectedItems(1)) End If Set fd = Nothing End Sub


    Sin querer abusar de su amabilidad, ¿tiene una nueva idea con respecto al mensaje de alerta?
    0
  10. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    En el editor haz clic en el menú..
    Herramientas => Referencias.
    En la ventana, ¿no habría una referencia marcada como "FALTANTE"?
    Si es así, ¿cuál es?

    --
    Si te golpeas con una olla y suena hueca, no necesariamente es la olla la que está vacía. ;-)(Confucio)
    Nota: No respondo a los MP para preguntas técnicas. Y mi bola de cristal está rota.
    0
  11. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Me doy cuenta de que hay un problema con el control de imagen, en mi caso no hay fallos, pero la imagen no se quiere colocar en el control.
    Intenta poniendo el código en un botón.

    --
    Si te chocas con una olla y suena hueca, no necesariamente es la olla la que está vacía. ;-)(Confucio)
    Nota: No respondo a mensajes privados para preguntas técnicas. Y mi bola de cristal está rota.
    0
  12. Meloooooo
     
    Acabo de poner mi macro en un "CommandButton" y me da exactamente el mismo problema que cuando la macro está en una "Imagen", es decir, que la depuración me bloquea en loadpicure destacándolo.
    0
    1. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
       
      ¿Estás seguro de que estás en Excel?
      ¿La imagen está en un UserForm?
      ¿El código está en el módulo del UserForm?
      No veo otra razón que podría crear este problema.
      He revisado la ayuda y probado varias veces...
      Eventualmente, pon una copia de tu libro en Cjoint.com (sin datos confidenciales)
      Y pon el enlace en un siguiente mensaje.
      ¡A+!
      0
  13. Meloooooo
     
    ¡Son FORMIDABLES, funciona!!!! :D

    ¡Un gran agradecimiento a ustedes y gracias por su gran paciencia! :)
    0
  14. Meloooooo
     
    De acuerdo, gracias por el consejo, veré cómo hacerlo.
    ¡Y gracias por todo!
    0
  15. Meloooooo Mensajes publicados 10 Estado Miembro
     
    Buenas noches,
    Había dejado un poco de lado mi proyecto de VBA, que ahora debe entregarse muy pronto. Todo está casi terminado, pero pensaba que podría terminar el registro de la foto por mi cuenta guardando las fotos de los caballos en un subdirectorio cuando el usuario haga clic en "validar" (como usted me aconsejó), pero realmente no puedo. He estado buscando en libros y en internet, pero no veo ningún tema en un foro que pueda corresponder al mío. Lermite, ¿puede ayudarme de nuevo, por favor, indicándome cómo proceder?
    0
  16. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Re,
    Todo en la parte superior del módulo, pon
     Dim MemoImage as String 

    En la sub que te permite poner la imagen en la Imagen, justo debajo de..
     ImageCheval.Picture = LoadPicture(fd.SelectedItems(1)) 'Pon MemoImage = fd.SelectedItems(1)

    En el código del botón Validar
    Dim Destination as string Destination = "C:\Directorio\Directorio de imágenes\Client" & NumClient & ".jpg" FileCopy MemoImage, Destination

    Dices
    Si te golpeas contra una olla y suena hueca, no necesariamente es la olla la que está vacía. ;-)(Confucio)
    Nota: No respondo a los MP para preguntas técnicas. Y mi bola de cristal está rota.
    0
  17. Meloooooo Mensajes publicados 10 Estado Miembro
     
    Buenas noches,
    Primero que nada, muchas gracias por su rapidez.
    He hecho todo como me dijo, no se ha detectado ningún problema en la depuración. Sin embargo, la foto no se guarda en el directorio...
    ¿Estamos de acuerdo en que debo reemplazar "C:\Répertoire\Répertoire des images\Client" por la ruta correspondiente a mi ordenador y a mi directorio?
    0
  18. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    ¿Cómo numeras a los clientes?
    Para probar...
     'Después de la línea.. Destino = "C:\Directorio\Directorio de imágenes\Cliente" & NumCliente & ".jpg" 'Agregas MsgBox "Imagen = " & MemoImagen & Chr(13) & "NumCliente =" & NumCliente _ & Chr(13) & "Destino = " & Destino

    Pon el resultado en un siguiente mensaje.
    ¡Hasta luego!
    --
    Si te chocas contra una olla y suena hueca, no necesariamente es la olla la que está vacía. ;-)(Confucio)
    Nota: No respondo a mensajes privados para preguntas técnicas. Y mi bola de cristal está rota.
    0
  19. Meloooooo Mensajes publicados 10 Estado Miembro
     
    Merci beaucoup pour votre réponse.
    He encontrado de dónde provenía mi error, me faltaba un "\" al final de mi camino.
    Así que, aquí está mi camino:
    Destino = "C:\Users\Méloo\Documents\Photos Caballos\& InscripciónCaballos.NombreCaballo.Valor & .jpg"

    Mi problema ahora es que me gustaría que el nombre de mi foto cambie en cada inscripción y que tome el nombre del caballo. Pero, con este camino, InscripciónCaballos.NombreCaballo.Valor no cambia nunca, por lo que todas las fotos tienen el mismo nombre y con cada inscripción, la nueva foto reemplaza a la anterior...
    He intentado crear una variable, pero cada vez es lo mismo, el nombre no cambia...
    ¿Tienes alguna idea, por favor?
    0
    1. Johann
       
      Hola,
      Publicación muy interesante, gracias.
      Por mi parte, deseo mostrar una imagen (en mi formulario de usuario) cuya dirección sea un enlace de internet (tipo http://).
      Se trata de mostrar solamente la imagen. Sin guardar localmente.
      Gracias a ustedes.
      0
  • 1
  • 2