Error 13 no coinciden los tipos al dejar campos vacíos de un useform de Visual Basic.

Al usar el UseForm Formulario de Registro, me está pasando que si no se llenan todos los campos de fecha da un error 13 no coindicen los tipos y se interrumpe la macro. Pero si pruebo llenando todos los campos, todo funciona perfecto. Por pruebas que he hecho al parecer sucede con los textbox de fecha.

Pero en realidad el usuario requiere poder dejar en blanco varios campos. Hay unos campos obligatorios, pero otros no.

¿Qué puedo hacer para que no me de este error?

Para Dante Amor

2 respuestas

Respuesta
1

Te anexo el código para las validaciones de las fechas.

Observa como en la validación de la FechaRegistro, si no captura una fecha válida, la macro se sale, eso vuelve al campo obligatorio.

En las validaciones de las otras fechas revisa una fecha válida y que sea diferente de vacío. Si la fecha está vacía, puede continuar, ya no tendrás el problema de "no coinciden los tipos"

Private Sub Button_Registrar_Click()
    Application.ScreenUpdating = False
'
    If MsgBox("Está seguro de grabar los datos?", vbOKCancel) = vbCancel Then
        Exit Sub
    End If
' Validaciones
    If TextBox_FechaRegistro = "" Or Not IsDate(TextBox_FechaRegistro) Then
        MsgBox "Fecha de registro vacía", vbExclamation, "Digitar fecha registro"
        TextBox_FechaRegistro.SetFocus
        Exit Sub
    End If
    If ComboBox1_PersonaRegistro.ListIndex = -1 Or ComboBox1_PersonaRegistro = "" Then
        MsgBox "Seleccionar persona registro", vbExclamarion, "Seleccionar persona registro"
        ComboBox1_PersonaRegistro.SetFocus
        Exit Sub
    End If
    wfec1 = ""  'Fecha1ercontacto
    wfec2 = ""  'FechaInicioReparacion
    wfec3 = ""  'FechaFinalizacion
    If IsDate(TextBox_Fecha1ercontacto) And TextBox_Fecha1ercontacto <> "" Then
        wfec1 = CDate(TextBox_Fecha1ercontacto)
    End If
    If IsDate(TextBox_FechaInicioReparacion) And TextBox_FechaInicioReparacion <> "" Then
        wfec2 = CDate(TextBox_FechaInicioReparacion)
    End If
    If IsDate(TextBox_FechaFinalizacion) And TextBox_FechaFinalizacion <> "" Then
        wfec3 = CDate(TextBox_FechaFinalizacion)
    End If
    '
'Registro
    Sheets("DATOS").Select
    Rows("4:4").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
    ActiveSheet.Cells(4, 1) = TextBox_NºCaso
    ActiveSheet.Cells(4, 2) = CDate(TextBox_FechaRegistro)
    ActiveSheet.Cells(4, 3) = ComboBox1_PersonaRegistro
    ActiveSheet.Cells(4, 4) = ComboBox2_Proyecto
    ActiveSheet.Cells(4, 5) = Label7
    ActiveSheet.Cells(4, 6) = ComboBox3_LugarEspecifico & " " & TextBox_LugarEspecifico
    ActiveSheet.Cells(4, 7) = TextBox_PersonaReclamo
    ActiveSheet.Cells(4, 8) = TextBox_DescripcionProblema
    ActiveSheet.Cells(4, 9) = ComboBox4_Estado
    ActiveSheet.Cells(4, 10) = wfec1            'Fecha1ercontacto
    ActiveSheet.Cells(4, 11) = ComboBox5_ClasifGeneral
    ActiveSheet.Cells(4, 12) = TextBox_CausaProblema
    ActiveSheet.Cells(4, 13) = wfec2            'FechaInicioReparacion
    ActiveSheet.Cells(4, 14) = TextBox_SolucionProblema
    ActiveSheet.Cells(4, 15) = ComboBox_ResponsableSolucion
    ActiveSheet.Cells(4, 16) = ComboBox_MetodoSolucion
    ActiveSheet.Cells(4, 17) = wfec3            'FechaFinalizacion
    Range("R5:Z5").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("R4").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    'ActiveWindow.SmallScroll Down:=-9
    Range("A1").Select
    Sheets("DATOS SIN FORMULAS").Select
    'ActiveWindow.ScrollRow = 1
    Range("A4:AA4").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents
    Range("A1").Select
    Sheets("DATOS").Select
    Range("A4:AA4").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("DATOS SIN FORMULAS").Select
    Range("A4").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
    Sheets("DATOS").Select
    Range("A1").Select
    Application.CutCopyMode = False
    Sheets("REGISTRO & ACTUALIZACIÓN").Select
    Range("A1").Select
    TextBox_NºCaso = Empty
    TextBox_FechaRegistro = Empty
    ComboBox1_PersonaRegistro = Empty
    ComboBox2_Proyecto = Empty
    ComboBox3_LugarEspecifico = Empty
    TextBox_PersonaReclamo = Empty
    TextBox_DescripcionProblema = Empty
    ComboBox4_Estado.RowSource = Empty
    TextBox_Fecha1ercontacto = Empty
    ComboBox5_ClasifGeneral = Empty
    TextBox_CausaProblema = Empty
    TextBox_FechaInicioReparacion = Empty
    TextBox_SolucionProblema = Empty
    ComboBox_ResponsableSolucion = Empty
    ComboBox_MetodoSolucion = Empty
    TextBox4_FechaFinalizacion = Empty
    Dim objeto As Object
    For Each objeto In Me.Controls
    If TypeName(objeto) = "Combobox" Then
        objeto.Value = ""
    End If
    Next objeto
    TextBox_NºCaso.SetFocus
    Application.ScreenUpdating = True
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Respuesta

Eso es porque has especificado un formato de fecha en el TextBox, y como no se rellena, retorna valores nulos que el formato no puede interpretar...

Quita el formato de fecha y pon un formato condicional, indicando que cuando la casilla no este vacía, ponga el formato fecha que tenías anteriormente...

¡Gracias! Pero no sé como construir el código para lo que me recomiendas, no sé si me podrías dar una mano en eso...

Saludos.

No tienes que construir ningún código... Lo que tienes que hacer es muy simple.- Sigue estos pasos:

1º- Quita el formato que le hayas especificado al TextBox donde te da el error.
2º- Vete a la casilla donde vayas a colocar el campo de fecha del formulario y le das al botón "Formato Condicional", eliges la opción "Nueva Regla" y dentro de las opciones que te sugiere, elige la última que pone "Utilizar una formula que determine las celdas para aplicar Formato".
En esta casilla, le pones algo como esto: C3<>"" (Reemplaza C3 por la casilla que tu quieres y asegurate que ponga C3 y no $C$3 -Si ha puesto el signo del dolar, quítalo porque sino hará referencia a una sola casilla y no podrás copiar la fórmula en el punto 3)
Y luego, en botón FORMATO, crea un formato de fecha para ese campo.
3º- Copia esta casilla y pégala en todas las demás, indicando que "Solo copie el formato"

-Y Voilá! Con esto debe funcionar perfecto, ya que el formato lo pones sólo si la casilla tiene datos, y no te interpretará los nulos como fechas.

Saludos y no olvides puntuar mis respuestas para poder cerrar la pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas