Perfeccionar InputBox de Fecha en Código Access

Siento las molestias

Con el código que me paso anteriormente Sveinbjorn El Rojo para realizar un INSERT INTO a una tabla histórico, que es este:

Private Sub Imagen113_Click()
Dim respuesta As String
Dim cSql As String
Dim vFecha As Date
respuesta = MsgBox("ELIMINARÁ EL REGISTRO ACTUAL,¿DESEA CONTINUAR?", vbYesNo, "CONFIRMAR")
If respuesta = 6 Then
vFecha = InputBox("Introduzca la fecha de Baja")
If StrPtr(vFecha) = 0 Then
MsgBox ("DEBE INTRODUCIR UNA FECHA"), vbInformation, "AVISO"
End If
DoCmd.RunSQL "INSERT INTO EquiposBaja (Modelo, EquipoSerialNumber,Observaciones,FechaBaja) VALUES ('" & Modelo.Value & "', '" & EquipoSerialNumber.Value & "', '" & Observaciones.Value & "',#" & Format(vFecha, "dd/mm/yyyy") & "#)"
MsgBox ("LA FICHA ELIMINADA PASARÁ AL REGISTRO HISTÓRICO"), vbInformation, "PASO DE DATOS A HISTÓRICO COMPLETADO"
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.Close acForm, "Equipos", acSaveYes
DoCmd.OpenForm "EquiposBaja"
MsgBox ("REGISTRO ACTUAL ELIMINADO"), vbInformation, "REGISTRO ELIMINADO"
Else
MsgBox ("REGISTRO ACTUAL NO ELIMINADO"), vbInformation, "CANCELAR ELIMINACION"
End If
End Sub

Estoy haciendo pruebas y he comprobado varios fallos con la sentencia relacionada con la fecha:

vFecha = InputBox("Introduzca la fecha de Baja")
If StrPtr(vFecha) = 0 Then
MsgBox ("DEBE INTRODUCIR UNA FECHA"), vbInformation, "AVISO"
End If

Los errores son los siguientes:

- Si el usuario deja el espacio en blanco en el InputBox y le da a ACEPTAR el código da error y se bloquea

- Si el usuario pone 0 o cualquier otro dígito el código avanza y al final el dígito puesto se entremezcla con el formato fecha y no sale correcto

- Si el usuario da a CANCELAR al InputBox el código también da error

- El MsgBox que he puesto no esta haciendo ninguna función

Necesitaria si porfavor podeis decirme la sentencia exacta que habria que poner para que se evitasen estos errores; osea que el usuario tenga que poner por narices una fecha con formato dd/mm/yyyy y sino que el InputBox le de error y vuelva a iniciar, que si deja el espacio en blanco y da a ACEPTAR el codigo le de un mensaje de error que le avise que debe poner una fecha y vuelva a mostrar en blanco el INPUTBOX, y que si da a Cancelar vuelva al formulario Equipos y no haga nada mas

Soy un principiante en esto de código VB para Access y no soy capaz de dar con la sentencias exactas que me hagan todo esto que necesito

Respuesta
1

Modifícalo así:

Dim vFecha As Variant

...

If respuesta = 6 Then
vFecha = InputBox("Introduzca la fecha de Baja")
If Not IsDate(vFecha)  Or StrPtr(vFecha) =0 Then 
MsgBox ("DEBE INTRODUCIR UNA FECHA"), vbInformation, "AVISO"
End If

...

A ver qué tal te va.

Gracias Sveinbjorn

Lo acabo de copiar y si dejo el campo vacío y le doy a Aceptar me sale error:

"SE HA PRODUCIDO EL ERROR 13 EN TIEMPO DE EJECUCIÓN . NO COINCIDEN LOS TIPOS" y cuando le doy a depurar me marca la línea de código:

vFecha = InputBox("Introduzca la fecha de Baja")

Si por el contrario en vez de una fecha formato dd/mm/yyyy pongo una cifra cualquiera al azar el código me continua pero luego en el formulario EquiposBaja el campo FechaBaja me sale la cifra en modo fecha de forma errónea, por ejemplo si pongo 0 me sale la fecha 00.00.0000

El primer error me da que es porque no modificaste la declaración de vFecha a Variant (que admite valores nulos) y la sigues teniendo como Date (que no lso admite)

El segundo, se me ocurre que compruebes también si el valor introducido en un número:

If Not IsDate(vFecha)  Or IsNumeric(vFecha) Or StrPtr(vFecha) =0 Then 

Como consejo, para que puedas comprobar en qué parte te falla, lo haría "en pasos":

...

vFecha = InputBox("Introduzca la fecha de Baja")

If StrPtr(vFEcha)=0 Then 'Se pulsó Cancelar

Msgbox "Proceso cancelado por el usuario"

Exit Sub

End If

If IsNumeric(vFecha) Then  'Se ha escrito un número

Msgbox "Tienes que introducir una fecha con formato dd/mm/aaaa"

Exit Sub

End If

If Not IsDate(vFecha) Then  'No es una fecha

Msgbox "Tienes que introducir una fecha con formato dd/mm/aaaa"

Exit Sub

End If

...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas