Como ingresar fechas en un formulario vba

Cree un formulario vba en excel que me funciona bien si no fuera porque en varios campos debo ingresar fechas de acuerdo a como se van completando ciertas tareas, pero cuando las pega en excel no las ingresa como fechas creo que ya que con esos datos tengo que llevar ciertos controles y los mismo no funcionan cuando ingreso los datos del formulario, quise ingresar la opción CDate, pero si dejo alguna dato donde ingrese esa opción me ingresa el siguiente error se ha producido el error 13 en tiempo de ejecución no coinciden los tipos

 

1 respuesta

Respuesta
1

Esta sería una rutina de ejemplo para un textbox1. Si es fecha se convierte el textbox en fecha, sino se lo guarda tal como está.

Private Sub CommandButton2_Click()
If IsDate(TextBox1) Then
ActiveCell = CDate(TextBox1)
Else
ActiveCell = TextBox1
End If
End Sub

PD) Todo lo que necesitas conocer de controles y formularios lo encontrarás en mis manuales de Forms.

Ok eso seria para un textbox, que pasaría si hay varios textbox en el formulario

Cada textbox va a una celda ... entonces hay que controlar cada textbox que sea fecha.

Si en caso de que no sea fecha (x error de tipeo) se quiere dejar la celda vacía, podes reducir el código así:

If IsDate(TextBox1) Then Cells(fila,col) = CDate(TextBox1)

If IsDate(TextBox2) Then Cells(fila,col + 1) = CDate(TextBox2)

Y así en cada col o celda irás colocando los textbox.

Esto responde a tu consulta, acerca de cómo volcar los controles fecha a las celdas.

Hay otros controles que podes realizar en cada textbox previamente y así te aseguras de que se ingresen fechas. (Este método no sirve si de pronto no es obligatoria una fecha)

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(TextBox1) Then Cancel = True
End Sub

Esta rutina, que debes repetir para cada Textbox, impide que puedas avanzar si el campo no es fecha.

Muchas gracias por tus respuestas tan rápidas y perdón se te hago muchas preguntas es que como soy nuevo hay cosas que todavía no entiendo. ahora veamos si entendí de acuerdo a lo que entendí, este debería ser el código

Private Sub Cmb_Ingresar_Click()
If Is Date(Tx_FIngreso) Then Cells(Fila,Col)=CDate(Tx_FIngreso)
If Is Date(Tx_FFormIn) Then Cells(Fila,Col+1)=CDate(Tx_FFormIn)
If Is Date(Tx_FFormFi) Then Cells(Fila,Col+1)=CDate(Tx_FormFi)
If Is Date(Tx_FRevisionIn) Then Cells(Fila,Col+1)=CDate(Tx_RevisionIn)
If Is Date(Tx_FRevisionIn) Then Cells(Fila,Col+1)=CDate(Tx_RevisionFi)
    Dim PosicionEnComboBox, fila, UltimaFila
    If CbB_Codigo.Text = "" Then Exit Sub
    'Si solo hay un elementeo en el Combo Funcionario, esto quiere decir que se
    'esta ingresando un nuevo funcionario.
    If CbB_Codigo.ListCount = 0 Then
        'Se esta ingresando un nuevo funcionario
        UltimaFila = Range("C65536").End(xlUp).Row + 1
        Range("C" & UltimaFila) = CbB_Codigo.Text
        Range("A" & UltimaFila) = Tx_Medio
        Range("B" & UltimaFila) = Tx_Documento.Text
        Range("D" & UltimaFila) = Tx_FIngreso
        Range("E" & UltimaFila) = Tx_FFormIn
        Range("F" & UltimaFila) = Tx_FFormFi
        Range("G" & UltimaFila) = Tx_FRevisionIn
        Range("H" & UltimaFila) = Tx_FRevisionFi

o tengo que modificar algo, muchas gracias por su paciencia y de antemano muchas gracias por su ayuda

No, no es así. Las líneas van en el mismo lugar donde movés el resto de los datos.

Private Sub Cmb_Ingresar_Click()
 Dim PosicionEnComboBox, fila, UltimaFila
 If CbB_Codigo.Text = "" Then Exit Sub
'Si solo hay un elementeo en el Combo Funcionario, esto quiere decir que se
 'esta ingresando un nuevo funcionario.
 If CbB_Codigo.ListCount = 0 Then
 'Se esta ingresando un nuevo funcionario
 UltimaFila = Range("C65536").End(xlUp).Row + 1
 Range("C" & UltimaFila) = CbB_Codigo.Text
 Range("A" & UltimaFila) = Tx_Medio
 Range("B" & UltimaFila) = Tx_Documento.Text
If Is Date(Tx_FIngreso) Then Range("D" & UltimaFila)=CDate(Tx_FIngreso)
If Is Date(Tx_FFormIn) Then Range("E" & UltimaFila)=CDate(Tx_FFormIn)
If Is Date(Tx_FFormFi) Then Range("F" & UltimaFila)=CDate(Tx_FormFi)
If Is Date(Tx_FRevisionIn) Then Range("G" & UltimaFila)=CDate(Tx_RevisionIn)
If Is Date(Tx_FRevisionIn) Then Range("H" & UltimaFila)=CDate(Tx_RevisionFi)

Muchas gracias por su ayuda es lo que andaba buscando, pero tengo un inquietud cuando uno deja un campo en blanco que es lo que ingresa el formulario en la hoja de excel que cuando uno utiliza un formula de excel en la cual intervenga una celda en blanco que se ingreso de excel muestra el siguiente error la formula #¡VALOR!, es una inquietud nada mas que me gustaría saber.

Pero te agradezco la ayuda brindada porque es puramente lo que andaba buscando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas