Error al cargar 2 o más imágenes a un Userform

Tengo un inconveniente bastante partícular que no logro entender porque.

Tengo el siguiente código:

    On Error GoTo 2
    imagen1 = ThisWorkbook.Path & "\Imagenes\" & ComboBox1 & ".jpg"
    Fotos.Image1.Picture = LoadPicture(imagen1)
    GoTo 3
2:
    imagen1 = ThisWorkbook.Path & "\Imagenes\Sin Imagen.jpg"
    Fotos.Image1.Picture = LoadPicture(imagen1)
3:
    On Error GoTo 4
    imagen2 = ThisWorkbook.Path & "\Imagenes\" & ComboBox1 & " 2.jpg"
    Fotos.Image2.Picture = LoadPicture(imagen2)
    GoTo 5
4:
    imagen2 = ThisWorkbook.Path & "\Imagenes\Sin Imagen.jpg"
    Fotos.Image2.Picture = LoadPicture(imagen2)

5:

En esta macro, capturo el valor que esta en combobox1 y busca un archivo en la carpeta "imagenes" alojada en la misma carpeta que mi formulario y muestra la imagen en "Imagen1" e "Imagen2". Cuando no encuentra la imagen, me muestra una imagen "default" llamada "Sin Imagen". Hasta ahora todo funciona de maravillas. El tema surge cuando no encuentra el archivo para mostrar (o sea debe mostrar la imagen llamada "Sin Imagen") en el segundo cuadro no me lo muestra, de hecho me genera un error.

Porque no me reconoce el "on error goto 4"? ¿Alguna alternativa?

2 respuestas

Respuesta
1

Programar con "On Error" no es una buena práctica, te recomiendo que busques alternativas en VBA para controlar el error. Por ejemplo, te anexo el código con una opción para verificar si existe el archivo, si existe, entonces carga la imagen, si no existe, entonces carga "sin imagen"

'Act. Por. Dante Amor
    imagen1 = ThisWorkbook.Path & "\Imagenes\" & ComboBox1 & ".jpg"
    If Dir(imagen1) <> "" Then
        Fotos.Image1.Picture = LoadPicture(imagen1)
    Else
        imagen1 = ThisWorkbook.Path & "\Imagenes\Sin Imagen.jpg"
        If Dir(imagen1) <> "" Then
            Fotos.Image1.Picture = LoadPicture(imagen1)
        End If
    End If
    '
    imagen2 = ThisWorkbook.Path & "\Imagenes\" & ComboBox1 & " 2.jpg"
    If Dir(imagen2) <> "" Then
        Fotos.Image2.Picture = LoadPicture(imagen2)
    Else
        imagen2 = ThisWorkbook.Path & "\Imagenes\Sin Imagen.jpg"
        If Dir(imagen2) <> "" Then
            Fotos.Image2.Picture = LoadPicture(imagen2)
        End If
    End If

S a l u d o s . D a n t e   A m o r

Recuerda valorar la respuesta.

Muchas Gracias Dante! la verdad que si bien hace rato que armo VBA tengo la mala costumbre de generar errores a proposito para saltear en ciertos casos parte del codigo utilizando On Error Goto... voy a investigar mas sobre alternativas.

Gracias por la ayuda.

Respuesta
1
On Error GoTo 2
    imagen1 = ThisWorkbook.Path & "\Imagenes\" & ComboBox1 & ".jpg"
    imagen2 = ThisWorkbook.Path & "\Imagenes\" & ComboBox1 & " 2.jpg"
    Fotos.Image1.Picture = LoadPicture(imagen1)
    Fotos.Image2.Picture = LoadPicture(imagen2)
    GoTo 3
2:
    imagen1 = ThisWorkbook.Path & "\Imagenes\Sin Imagen.jpg"
    imagen2 = ThisWorkbook.Path & "\Imagenes\Sin Imagen.jpg"
    Fotos.Image1.Picture = LoadPicture(imagen1)
    Fotos.Image2.Picture = LoadPicture(imagen2)
3:

Te da fallo porque los On Error no trabajan bien anidados. Como mucho uno en tu código es aceptable.

Gracias por tu respuesta. No sabia que los On Error no trabajan bien anidados, sin embargo tengo códigos que poseen varios On Error y funcionan bien, es una mala costumbre mía utilizarlos y a veces forzar un error para saltear parte de mi código en ciertos casos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas