Mensaje para error en VBA

Tengo el siguiente código:

Private Sub Form_Current()

If Not IsNull([Imagen1]) Then
Me.ImagenFoto1.Picture = Me.Imagen1
ElseIf IsNull([Imagen1]) Then
Me.ImagenFoto1.Picture = ""
End If

El problema es que, cuando se me va la gaita y cambio la imagen, me da error de que ha cambiado el archivo. Quería preguntar cómo puedo añadir ahí un trozo de código para que si se produce ese cambio, me salga una ventanita diciendo que la imagen ya no existe.

1 respuesta

Respuesta
1
'Si por lo que entiendo [Imagen1] es la Ruta completa de la Imagen entonces Después de 
'If Not IsNull([Imagen1]) Then y sustituyendo a >> Me.ImagenFoto1.Picture = Me.Imagen1
'Si el Fichero Existe >> En la Carpeta Imagenes. ExisteFichero es: Function ExisteFichero(RutaFichero As String) As Boolean de más abajo
 If ExisteFichero(Imagen1) = True Then
    Me.ImagenFoto1.Picture = Imagen1
Else
    ''Si no Existe se pueden contemplar dos alternativas:
    ''Alternativa Uno>> Que no ponga Imagen
    'Me.ImagenFoto1.Picture = ""
    'MsgBox "El Fichero " & vNom & " no está en la Carpeta de Imagenes", vbCritical, "RECTIFICA EL NOMBRE"
     'Alternativa Dos >> Que ponga una por Omisión
      Dim ImgOmision As Variant
      ImgOmision = "ImgComodin.bmp"   'Esta imagen es la que tu quieras y que debes tener
      'Estoy suponiendo que la carpeta de Imagenes está colgando de la Carpeta de la Aplicación y que se llama Imagenes
      Me.ImagenFoto1.Picture = Application.CurrentProject.Path & "\Imagenes\" & ImgOmision
      MsgBox "El Fichero  " & vNom & " no está en la Carpeta de Imagenes" & vbCrLf & "Se mostrará la Imagen por Omisión >>  " & ImgOmision, vbCritical, "RECTIFICA EL NOMBRE"
End If
'Y la Función que aparece arriba (ExisteFichero)
Function ExisteFichero(RutaFichero As String) As Boolean
Dim NombreFichero As String
NombreFichero = Dir(RutaFichero)
If NombreFichero <> "" Then
        ExisteFichero = True
Else
        ExisteFichero = False
End If
End Function

Un saludo >> Jacinto

Hola, Jacinto. Cuánto tiempo. Me alegra volver a verte. Te explico. Has supuesto bien de que la existe una carpeta Imágenes en la carpeta de la aplicación, que se llama Informes. He leído el código, y si no hay imagen, no quiero una predeterminada. Y, por último, el código está repetido para cinco imágenes más, por lo que cuando pego tu código, me da error. He aquí el código completo.

Private Sub Form_Current()

If Not IsNull([Imagen1]) Then
Me.ImagenFoto1.Picture = Me.Imagen1
ElseIf IsNull([Imagen1]) Then
Me.ImagenFoto1.Picture = ""
End If

If Not IsNull([Imagen2]) Then
Me.ImagenFoto2.Picture = Me.Imagen2
ElseIf IsNull([Imagen2]) Then
Me.ImagenFoto2.Picture = ""
End If

If Not IsNull([Imagen3]) Then
Me.ImagenFoto3.Picture = Me.Imagen3
ElseIf IsNull([Imagen3]) Then
Me.ImagenFoto3.Picture = ""
End If

If Not IsNull([Imagen4]) Then
Me.ImagenFoto4.Picture = Me.Imagen4
ElseIf IsNull([Imagen4]) Then
Me.ImagenFoto4.Picture = ""
End If

If Not IsNull([Imagen5]) Then
Me.ImagenFoto5.Picture = Me.Imagen5
ElseIf IsNull([Imagen5]) Then
Me.ImagenFoto5.Picture = ""
End If

If Not IsNull([Imagen6]) Then
Me.ImagenFoto6.Picture = Me.Imagen6
ElseIf IsNull([Imagen6]) Then
Me.ImagenFoto6.Picture = ""
End If

End Sub

Muchas gracias. Saludos.

Diego: Utiliza la alternativa 1 que te citaba y lo repites en todas las Imágenes.

Luego miro de racionalizarlo un poco, para intentar hacerlo más corto.

Dim NumImagen As Variant  'Solo declarar una vez en el Procedimiento
NumImagen = Val(Right(Me.Imagen1,1))
If ExisteFichero(Imagen1) = True Then
    Me.ImagenFoto1.Picture = Imagen1
Else
    'Si no Existe se pueden contemplar dos alternativas:
    'Alternativa Uno>> Que no ponga Imagen
    Me.ImagenFoto1.Picture = ""
    MsgBox "El Fichero " & " Imagen" & NumImagen & " no está en la Carpeta de Imagenes", vbCritical, "RECTIFICA EL NOMBRE"
End If

Y no te olvides copiar la Función de ExisteFichero >> Un saludo >> Jacinto

Ok, gracias.

He estado probando a integrar el código que me has pasado, y no soy capaz. He intentado a nada poner el mensaje si es nulo, y deja de funcionar la previsualización de imágenes.

Diego:Dime si puedes aislar los objetos que intervienen en el proceso, incluidas las imágenes, carpetas etc. y me envías tu BD, con datos inventados claro está. Mi correo ya lo tienes

Ya me comentarás. Saludos >> Jacinto

Pues no lo sé. Ahora lo miro, y si no pudiera, te lo dejo indicado.

Dego: Antes de proseguir has por favor tu sondeo añadiéndole que no sea una cadena vacía.

If Not IsNull(Me.Imagenx) And Me.Imagenx <> "" Then

Un saludo >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas