Tengo un formulario de access que abre una imagen en formato jpg pero sino esta en jpg la debo abrir en jpge

Tengo un formulario que busca una imagen y si esta en jpg la abre pero debo insertar una rutina en la cual sino esta en jpg la debe abrir con el mismo nombre pero en formato jpge pero sino esta tampoco en jpge debe mostar un mensaje que indique que la imagen no existe, yo le agrego la extension al nombre de la imagen en la primera vez que la intenta abrir solo que no puedo hacer que la intente abrir en formato jpge cambiandole nuevamente la extension a jpge y sino esta muestre el mensaje de inexistente

Respuesta
1

Las extensiones de los archivos solo sirven para 'asociarlas por defecto' a una aplicación que las maneje y pistas sobre su formato.
En ningún caso cambiarle la extensión cambia el objeto (seria una bicoca).

¿Es imprescindible que esa imagen solo se pueda utilizar en ese único formato?, un .jpg es un archivo de imagen de uso popular porque las comprime con baja perdida de calidad.

Se trata de un formulario que realiza una consulta de unos artículos que se almacenan en una carpeta solo que algunos se grabaron en jpg y otros en jpge, ya logro mostrar ambos cuando se hace una sola vez es decir tengo un botón que busca el archivo y lo muestra en un control de imagen, el problema es que si se vuelve a buscar otra vez y no existe la imagen, me muestra el error 220 y no logro que el programa salte a otra línea de código.

Private Sub Comando3_Click()
On Error GoTo sol_err

Dim vNom As Variant
'vNom = Me.nombre.Value
vNom = Me.nombi.Value
'Si no hay valor en el campo nombre no asigna ninguna imagen al
'cuadro de imagen
If IsNull(vNom) Then
Me.imgNombre.Picture = ""
Else
'Si hay valor, asigna el valor al cuadro de imagen
Dim miRuta As String
miRuta = Application.CurrentProject.Path & "\CD\" & vNom & ".jpg"
contador = contador + 1
Me.imgNombre.Picture = miRuta
End If

sol_err:
If Err.Number = 2220 And contador = 2 Then
Err.Number = 0
Me.Refresh
'nombi.Value = 0
Comando3.SetFocus
Else
If Err.Number = 2220 And contador = 1 Then
miRuta = Application.CurrentProject.Path & "\CD\" & vNom & ".jpeg"
contador = contador + 1
Me.imgNombre.Picture = miRuta
Else
MsgBox "La imagen especificada no existe", vbInformation, "AVISO"
'Borramos el nombre introducido
'Me.imgNombre.Value = Null
Me.imgNombre.Picture = ""
Err.Number = 0
Comando3.SetFocus
End If
End If

End Sub

Perdón mande otro código que era de prueba mando el correcto

On Error GoTo sol_err


Dim vNom As Variant
Dim miRuta As String
vNom = Me.Texto13.Value
'Si no hay valor en el campo nombre no asigna ninguna imagen al
'cuadro de imagen
If IsNull(vNom) Then
Me.imgNombre.Picture = ""
Comando83.SetFocus
Else
'Si hay valor, asigna el valor al cuadro de imagen
miRuta = Application.CurrentProject.Path & "\CD\" & vNom & ".jpg*"
Me.imgNombre.Picture = miRuta
End If


sol_err:
If Err.Number = 2220 Then
MsgBox "La imagen especificada no existe verifique", vbInformation, "AVISO"
'Borramos el nombre introducido
Me.imgNombre.Picture = ""
Texto13.Value = ""
Texto13.Enabled = False
Comando83.SetFocus
End If

No he profundizado en el código, solo una ojeada rápida.

Me llama la atención que tras construir la ruta no se utilice la función DIR para verificar la existencia del archivo y así evitar el temido error y (en base al resultado de 'DIR' ) optar por la misma búsqueda de la versión alternativa, de no existir tampoco esta ... dar por finalizada la gestión simplemente porque no existe.

Las veces que he utilizado imágenes externas en las que se contemplase su posible no-existencia, he partido de una imagen por defecto (puede ser una imagen que solo contenga un punto), si se localiza la esperada (con la función DIR por supuesto) se le asigna y si no se localiza se deja continuar el código que mostrara la de 'por defecto'.

Un apunte rápido:

Public Function MiImagen(X_Nombre$) As String
MiImagen = Application.CurrentProject.Path & "\CD\Foto_0.jpg"
If Dir(Application.CurrentProject.Path & "\CD\" & X_Nombre & ".jpg") <> "" Then
MiImagen = Application.CurrentProject.Path & "\CD\" & X_Nombre & ".jpg"
End If
Exit Function
If Dir(Application.CurrentProject.Path & "\CD\" & X_Nombre & ".jpge") <> "" Then
MiImagen = Application.CurrentProject.Path & "\CD\" & X_Nombre & ".jpge"
End If
End Function

Se utilizaría así:

Me.imgNombre.Picture = MiImagen(Me.Texto13)

Me auto-corrijo:
Un intercambio de posiciones:

Public Function MiImagen(X_Nombre$) As String
MiImagen = Application.CurrentProject.Path & "\CD\Foto_0.jpg"
If Dir(Application.CurrentProject.Path & "\CD\" & X_Nombre & ".jpg") <> "" Then
MiImagen = Application.CurrentProject.Path & "\CD\" & X_Nombre & ".jpg"
Exit Function
End If
If Dir(Application.CurrentProject.Path & "\CD\" & X_Nombre & ".jpge") <> "" Then
MiImagen = Application.CurrentProject.Path & "\CD\" & X_Nombre & ".jpge"
End If
End Function

Como suelo utilizar ese mismo código:

Public Function MiImagen(X_Nombre$) As String
MiImagen = Application.CurrentProject.Path & "\CD\Foto_0.jpg"
If Dir(Application.CurrentProject.Path & "\CD\" & X_Nombre & ".jpg") <> "" Then MiImagen = Application.CurrentProject.Path & "\CD\" & X_Nombre & ".jpg" : Exit Function
If Dir(Application.CurrentProject.Path & "\CD\" & X_Nombre & ".jpge") <> "" Then MiImagen = Application.CurrentProject.Path & "\CD\" & X_Nombre & ".jpge"
End Function

1 respuesta más de otro experto

Respuesta
1

No sé como "busca" ese formulario que no sabe si existe o no un archivo. Mira, si tengo un fomulario parecido a

Se puede hacer de mil formas. Si pongo el cursor sobre archivo( aunque no es necesario) me abre un "explorador" para que localice la imagen que me interese

Y selecciono, por ejemplo CC1

Uso la función MsoFiledialog

Private Sub Archivo_GotFocus()
Archivo = buscaArchivo()
Imagenfoto.Picture = Archivo
End Sub
End Function

Lo que hace mi código es que en el textobox el usuario ingresa el nombre del producto ejemplo "cebollas", a continuación yo le concateno la extensión queda así cebollas.jpg y busco la imagen si la encuentro se la asigno al control imagen y la muestro, el código actual si no la encuentra se va al procedimiento sol_err y muestra que la imagen no existe, pero yo quiero que si no la encuentra la primera vez la busque por cebollas.jpge y la muestre pero sino esta el archivo muestre error no existe la imagen solo que no he podido hacer que la segunda vez le asocie la extensión .jpge no quiero que el usuario la busque.

Vamos a suponer que las imágenes las guardas en una carpeta llamada Fotos. Entonces puedes usar, por ejemplo, ya que hay muchas formas, porque puedes crear una variable con la ruta a esa carpeta

If len(dir("C:\users\gonza\documentos\fotos\patatas.jpg"))=1 then

imagen10.picture="C:\..................\fotos\patatas.jpg

elseif len(dir("...............................\patatas.jpeg))=1 then

imagen10,picture="C:\users\gonza\documentos\fotos\patatas.jpeg"

else

Msgbox"Esa imagen no existe de ninguna forma", vbokonly,"Otro día quizá, pero hoy no"

end if

Lógicamente tienes que cambiar mi ruta por la tuya

Perdón, por la prisas puse una errata, es

If len(dir("C:\users\gonza\documentos\fotos\patatas.jpg"))>0 the

Y en la otra lo mismo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas