Carga de imagen desde ruta relativa VBA Excel

Tengo una carpeta "BF Aircraft" que contiene un archivo Excel "BF Aircraft.xlsm" y otra carpeta "imagenes" donde están todas las fotos según el modelo y serie de aeronaves.
En el formulario del archivo hay un control Image1 que carga la imagen según el modelo de la aeronave y otro formulario similar donde me permite actualizar los datos técnicos y cambiar la foto si se requiere.
El problema es cuando llevo la carpeta "BF Aircraft" a otro PC la ruta es distinta y no muestra la foto que previamente había guardado.
En el archivo la columna que lista los nombres de aeronaves está en la columna B y la ruta de imagen está en la columna BI por lo que siempre está relacionado, por ejemplo:
Aeronaves (Columna B):
Fila 2: Boeing 737-900
Fila 3: Boeing 737-Max 10
Fila 4: Airbus 320-100
Ruta de imagen (Columna BI)
fila 2: C:\Users\Fernando\Documents\Proyectos\BF Aircraft\imágenes\Boeing 737\Boeing 737-900.jpg
fila 3: C:\Users\Fernando\Documents\Proyectos\BF Aircraft\imágenes\Boeing 737\Boeing 737-MAX10.jpg
fila 4: C:\Users\Fernando\Documents\Proyectos\BF Aircraft\imágenes\Airbus 320\Airbus 320-100.jpg
Pero cuando traslado la carpeta a otra computadora ya en el control Image1 no está la foto genera un error de ejecución.
Este es el código que utilizo:

Private Sub ButtonSelecImage_Click()
xfile = Application.GetOpenFilename("Image files(*.jpg;*.bmp;*.gif;*.ico),*.jpg;*.bmp;*.gif;*.ico")
If xfile <> "Falso" Then
   Image1.Picture = LoadPicture(xfile)
   TextBox51 = xfile
End If
End Sub

¿Qué debo hacer?

1 Respuesta

Respuesta
1

Cuando se trata de libros que pueden ejecutarse desde otros equipos, lo que se hace es enviarlo con la carpeta imágenes en la misma ubicación que el libro.

Y en la columna con las rutas solo debes indicar la subcarpeta IMAGENES y nombre del archivo.

En alguna macro donde tengas que hacer referencia a la ruta completa, se parte desde la del libro activo (Thisworkbook. Path). Algo como esto:

rutaImagen = Thisworkbook.Path & "\IMAGENES\

nbreImgen = rutaImagen & "Boeing 737\Boeing 737-900.jpg"

* Cyber-mes en manuales Excel:

htt://aplicaexcel.galeon.com/manuales.htm

Buen día Elsa, gracias por enviarme la respuesta, he estado analizando y probando con el código que inserté en la pregunta original pero cómo puedo hacer que parta desde la carpeta "\IMAGENES\" ? ...y que muestre la ruta en el TextBox51 de manera que tengo otro evento que me guarda la ruta en la columna respectiva. De antemano muchas gracias!

Te dejo la instrucción para encontrar solo la parte del nombre de la imagen insertada:

Private Sub ButtonSelecImage_Click()
xfile = Application.GetOpenFilename("Image files(*.jpg;*.bmp;*.gif;*.ico),*.jpg;*.bmp;*.gif;*.ico")
If xfile <> "Falso" Then
   Image1.Picture = LoadPicture(xfile)
   archi = Mid(xfile, (InStrRev(xfile, "\") + 1))  'esta te devuelve el nombre de la imagen (*)
   TextBox51 = archi
End If
End Sub

Si necesitas que además guarde la subcarpeta como parte del nombre, la instrucción será:

TextBox51 = "IMAGENES\" & archi

Sdos!

¡Gracias Elsa!
La instrucción que me enviaste funcionó para la parte del TextBox51 donde puedo elegir dos formas para mostrar tanto "el nombre de archivo" de la imagen como "la ruta de la imagen"
De tal manera que plantearé otro momento sobre "la ruta relativa" para evitar el error de ejecución al momento de abrir el formulario en otra computadora.
Valoro tu experticia en tu respuesta, muchas gracias Elsa!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas