Image1 en UserForm no carga fotografía

Tengo un trozo de código muy simple que no me está funcionando y no entiendo por qué. Se trata de mostrar una fotografía en un formulario cuando en un cuadro de texto se mete la dirección de la fotografía.

El userform es esto:

El caso es que si pongo este trozo de código para que se cargue la fotografía al incializar el formulario funciona bien:

Private Sub UserForm_Activate()
    Image1.Picture = LoadPicture("C:\Users\167630\Desktop\foto1.jpg")
End Sub

Como podéis ver, la fotografía se carga (olvidad el zoom, es solo un ejemplo):

En cambio, cuando utilizo este código y meto exactamente la misma ruta en el cuadro de texto, nunca carga la fotografía:

Private Sub TextBox8_Change()
    On Error GoTo sinfoto
    Image1.Picture = LoadPicture(TextBox8.Value)
sinfoto:
    Image1.Picture = LoadPicture("")
End Sub

En cambio, con este trozo de código sí que funciona, así que entiendo que el error está en el uso del "On Error...":

Private Sub TextBox8_Change()
    If TextBox8.Value <> "" Then
        Image1.Picture = LoadPicture("C:\Users\167630\Desktop\foto1.jpg")
    Else
       Image1.Picture = LoadPicture("")
    End If
End Sub

¿Alguien puede echarme una mano? Estoy totalmente atascado.

2 Respuestas

Respuesta
2

El código funciona.

Solamente considera que en el evento change del textbox, por cada caracter que vas ingresando se va a ejecutar el código.

Podrías validar si el archivo existe, solamente si el archivo existe, cargará la imagen.

Private Sub TextBox8_Change()
  If TextBox8.Value <> "" Then
    If Dir(TextBox8.Value) <> "" Then
      Image1.Picture = LoadPicture(TextBox8.Value)
    End If
  Else
    Image1.Picture = LoadPicture("")
  End If
End Sub
Respuesta

Pruebe con este código;

Private Sub TextBox8_Change()
    On Error GoTo sinfoto
    Image1.Picture = LoadPicture(Trim(TextBox8.Text))
sinfoto:
    Image1.Picture = ""
End Sub

Buenas Eduardo:

He probado con Trim y con Cstr y sucede exactamente igual. Entre en la primera parte del "On Error" y parece que interpreta como que la línea 

Image1.Picture = LoadPicture(Trim(TextBox8.Text))

contiene un error. Da igual que use Trim, Cstr o nada, como he dicho anteriormente.

Lo curioso es que si pongo la línea sin estar dentro de un "On Error" sí que la interpreta bien: cuando pego la ruta directa en la casilla de golpe, lo lee bien y muestra la foto. Si la voy escribiendo a mano, cada introducción de caracter que no es una ruta válida me devuelve un error (como debe ser).

Vamos, que está claro que es la instrucción "On Error" lo que no está funcionando. ¿Alguna idea de por qué?

Kir.

Disculpad, me respondo a mi mismo.

Cambiando el código original por este otro sí que funciona:

Private Sub TextBox8_Change()
    Image1.Picture = LoadPicture("")
    On Error Resume Next
    Image1.Picture = LoadPicture(TextBox8.Value)
End Sub

El código original yo lo entiendo como "intenta cargar la foto y si tienes un error, bórrala".  El que funciona dice "borra la foto y si no hay errores, carga una nueva". El resultado es el mismo pero la ejecución es exactamente la contraria y uno funciona y el otro no. Los dos deberían funcionar.

No entiendo nada.

Kir.

Hasta ahora me doy cuenta que no debe ir el código en el evento al cambiar. Sino en el evento Después de Actualizar e control. El código que propone en su solución no es lógico.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas