Error 13 No coinciden los tipos en campo de fecha que queda vacío

Hice un UseForm de Visual, usé unos textbox para que usuario digite unas fechas, estos datos y otros más se guardan en una tabla. A los campos de fecha les di este formato:

Private Sub TextBox_FechaRegistro_Change()
TextBox_FechaRegistro.Value = Date

Select Case Len(TextBox_FechaRegistro.Value)
Case 2
TextBox_FechaRegistro.Value = TextBox_FechaRegistro.Value & "/"
Case 5
TextBox_FechaRegistro.Value = TextBox_FechaRegistro.Value & "/201"

End Select
End Sub

Y en la macro de "Registrar datos" (de los que se captaron del useform) usé este código:

ActiveSheet.Cells(4, 2) = CDate(TextBox_FechaRegistro)

Este useform lo hice en una computadora con versión de Office más descatualizada, lo abro en una versión reciente y cuando el campo de fecha queda vacío (que realmente puede pasar, no es obligatorio llenarlo) me da este error 13 no coinciden los tipos.

¿Qué puedo hacer?

Respuesta
1

Simplemente, añade una condición antes de llenar el contenido de la celda con el valor...

If IsNull(TextBox_FechaRegistro) then
  ActiveSheet.Cells(4, 2).ClearContents
Else
  ActiveSheet.Cells(4, 2) = CDate(TextBox_FechaRegistro)
End If

De esa manera, si el campo de fecha está vacío, el contenido de la celda también quedará vacío.

Salu2.

Se me ocurre, ya puestos, que podrías comprobar no solo si el valor está vació, si no que sea una fecha válida;

If IsDate(TextBox_FechaRegistro) then
  ActiveSheet.Cells(4, 2) = CDate(TextBox_FechaRegistro)
Else
  ActiveSheet.Cells(4, 2).ClearContents  
End If

Salu2.

Puse los dos códigos antes y después de depositar los datos en la celda destino y me da el mismo error...se te ocurre algo más que pueda hacer?

Solo hace falta que pongas uno de ellos, el primero solamente comprueba que el valor no esté vacío, el segundo comprueba si la fecha es válida (un valor vacío también es una fecha inválida, por lo que solo te haría falta el segundo en teoría), y por supuesto, debes sustituir la linea que tu ya tenias:

ActiveSheet.Cells(4, 2) = CDate(TextBox_FechaRegistro)

 por las que yo te he propuesto:

If IsDate(TextBox_FechaRegistro) then
  ActiveSheet.Cells(4, 2) = CDate(TextBox_FechaRegistro)
Else
  ActiveSheet.Cells(4, 2).ClearContents  
End If

En la misma posición, ni antes ni después (las líneas que te he propuesto ya incluyen la línea que tu tenías y es ejecutada si la fecha no está vacía y es correcta).

Salu2.

Otra razón por la que puede dar el error 13 es que la celda donde intentas poner una fecha no esté definida como fecha (yo he dado por hecho que estaba definida como fecha).

Salu2.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas