Problema de fechas

Hola, yo entro las fechas en una rejilla a través de una caja de texto, como puedo hacer para luego pasar esas fechas que ya están en la rejilla a "fechas reales" para que luego no me de conflicto de que no coinciden los tipos. Me aclaro, es decir introducir fechas directamente sin tener que usar ninguna función para convertirlas a formato de fecha.
Un saludo, amigo.
2

2 respuestas

Respuesta
1
Como dije anteriormente, el problema es que estás asignando a una variable de tipo Date (fecha) un string que puede no ser un Date.
En este caso el porgrma dará un error como si asignases a una variable nmérica un valor de tipo string.
Para controlarlo, usa el if que escribí en la anterior respuesta if isdate(string) then ..
La cosa quearía así :
if isdate(rejilla.text) then
fecha = DateValue(rejilla.Text)
else
''Aquí debe ir lo que quieres hacer si el texto entrado no es una fecha válida. Como por ejemplo salir de la función.
End if
Con esta modificación ya no te debería dar el error de la fecha.
Si hay alguna otra pregunta ya sabes.
Magne
He intentado lo que me dices, pero nada...
Si te enviara el formulario por e-mail con el código, serías tan amable de echarle un vistazo para ver porque no me funciona...
Gracias y un saludo
Gracias, pero creo que eso es lo que tengo en el código... Si fueras tan amable de echarle un vistazo.. Un saludo y gracias.
Dim i As Integer
Dim ventana As String
Dim nombre As String
Dim fecha1 As String
Dim fecha As Date
Dim fecha_actual As Date
Dim edad As Long
Dim edadmayor As Long
mediamayor = 0
media = 0
nota1 = 0
nota2 = 0
nombre = ""
fecha_actual = Date
For i = 1 To rejilla.Rows - 1
rejilla.Col = 2 'se posiciona en la columna de fechas
rejilla.Row = i 'se lee fila a fila gracias al bucle for
fecha = DateValue(rejilla.Text) ' se introduce la f/ en fecha
edad = DateDiff("yyyy", fecha, fecha_actual) 'calculamos la edad
edadmayor = edad ' asignamos la edad a edadmayor
If edadmayor < edad Then
'en el momento que una edad sea superior a la ya calculada
'es asignada como nueva edad
edadmayor = edad
rejilla.Col = 1 'se posiciona el columna 1 que es la q tiene
'los nombres
nombre = rejilla.Text 'asigna a nombre el valor de la celda
rejilla.Col = 2 'se posiciona en columna 2 que tiene las fechas
fecha1 = rejilla.Text ' toma el valor de la fecha y la almacena
End If
Next i
ventana = MsgBox("Alumno con mayor nota media es: " & nombre & " con un promedio de " _
& mediamayor & " y nacio el " & fecha & " ", vbInformation, "Resultado")
End Sub
Pues claro, ningún problema, pero mejor que el formulario, haz un zip con todo el proyecto para que pueda ejecutarlo sin problemas.
Y también me incluyes la serie de pasos que tengo que hacer para llegar al error (poner tal cosa en tal sitio, apretar tal btón, etc )
Hasta pronto
Magne
A ver, para comprobar si un string se podría convertir a fecha ( aunque después no lo hagas, solo es para discriminar si podría ser una fecha correcta ), tienes que usar la función isDate(String).
Esta función te devuelve un booleano según si String podría ser una fecha válida o no.
Para realizar la comprobación, incluye la función en un if :
if isDate(string) then
.
.
else
.
.
end if
Si quisieras convertir el string a una variable de tipo Date, usar la función CDate(string).
Esta función dará un error si el string a convertir no es apto para ser convertido ( valga la redundancia).
Espero que la explicación te sirva de ayuda. Si te queda alguna duda, no dudes en preguntar.
Magne
Ningún problema, pero dime tu dirección de correo para mandarte todo el proyecto...
Gracias y un saludo
Respuesta
1
Bueno tienes varias formas de hacerlo, el campo de la base de datos debe de ser tipo fecha.
Luego en el form, te conviene utilizar MaskedBoxes en vez de Textboxes, estas te permiten hacer mascaras del tipo ##/##/#### y con un formato de dd/mm/yyyy
entonces al pasarlas a la rejilla ya las va a pasar con formato de fecha, si vos quieres pasarlas natural y luego convertirlas te conviene utilizar el comando Format(strFecha, "dd/mm/yyyy")
Eso es todo. Un abrazo.-
Gracias por tu ayuda, este es el código que tengo, ¿te importaría echarle un vistazo?, me da un error de conversión de tipos... Un cordial saludo
Dim i As Integer
Dim ventana As String
Dim nombre As String
Dim fecha1 As String
Dim fecha As Date
Dim fecha_actual As Date
Dim edad As Long
Dim edadmayor As Long
mediamayor = 0
media = 0
nota1 = 0
nota2 = 0
nombre = ""
fecha_actual = Date
For i = 1 To rejilla.Rows - 1
rejilla.Col = 2 'se posiciona en la columna de fechas
rejilla.Row = i 'se lee fila a fila gracias al bucle for
fecha = DateValue(rejilla.Text) ' se introduce la f/ en fecha
edad = DateDiff("yyyy", fecha, fecha_actual) 'calculamos la edad
edadmayor = edad ' asignamos la edad a edadmayor
If edadmayor < edad Then
'en el momento que una edad sea superior a la ya calculada
'es asignada como nueva edad
edadmayor = edad
rejilla.Col = 1 'se posiciona el columna 1 que es la q tiene
'los nombres
nombre = rejilla.Text 'asigna a nombre el valor de la celda
rejilla.Col = 2 'se posiciona en columna 2 que tiene las fechas
fecha1 = rejilla.Text ' toma el valor de la fecha y la almacena
End If
Next i
ventana = MsgBox("Alumno con mayor nota media es: " & nombre & " con un promedio de " _
& mediamayor & " y nacio el " & fecha & " ", vbInformation, "Resultado")
End Sub
La linea donde da el problema es:
fecha = DateValue(rejilla.Text) ' se introduce la f/ en fecha
Gracias
Decime en que linea te esta tirando el error así te lo digo al instante, porque actualmente no tengo instalado el VB en mi PC para poder probarlo =(

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas