Formulario para entrada y salida de personal
Estoy creando un Formulario que permita buscar los datos de unos usuarios y registrar la fecha y hora de entrada (Mediante un botón) y la hora de Salida (Con otro Botón). El problema ahora es que el código al encontrar dos o más registros de entrada de una persona, les pone la misma hora de Salida. Mi pregunta es: ¿Es posible que el código identifique o compare la Fecha y Hora de entrada y así mismo ponga la salida?
Ejemplo: En este momento está así, si alguien entra el 01/07/2019 a las 8:00 am y sale a las 12:00 pm el Código pone esa hora de salida. Si esa persona entra nuevamente a las 2:00 pm y Sale a las 6:00pm, El código modifica las dos entradas y le pone 6:00 pm.
Para mi es muy complicado esta opción que me piden. Si se puede agradezco la ayuda. Adjunto el codigo que tengo.
'Evento Exit para buscar el Dato
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'si la celda se limpia o queda vacía el proceso continúa
If TextBox1 = "" Then Exit Sub 'Si el Campo esta vacio termina la accion
Dim Nombre As String
Dim Rango As Range
Set Rango = Sheets(1).Range("A1:AZ4000") 'Se define la BD
On Error GoTo Error: 'Si no se encuentra el dato en la BD
Indice = Application.WorksheetFunction.Match(Val(TextBox1.Text), Rango.Columns(1), 0) 'Busca el Dato
Me.Label1.Caption = Rango.Cells(Indice, 2) 'Encuentra y muestra el Nombre
Me.Label2.Caption = Rango.Cells(Indice, 13) 'Encuentra y muestra el Programa
Me.Label3.Caption = Rango.Cells(Indice, 28) 'Encuentra y muestra el Tipo de Documento
Me.Label4.Caption = Rango.Cells(Indice, 29) 'Encuentra y muestra el Documento
Exit Sub 'Se detiene si hay error
Error:
MsgBox "Vuelva a Escanear el Carnet.", , "SIN COINCIDENCIAS"
Cancel = True
TextBox1 = Empty
TextBox1.SetFocus
End Sub
'Evento para guardar las entradas
Private Sub CommandButton1_Click() 'Boton Entrada
Dim hora As String
Dim fecha As String
hora = Format(Time, "hh:mm:ss")
fecha = Format(Date, "dd/mm/yyyy")
Sheets(2).Activate
ActiveSheet.Cells(2, 1).Select
If Trim(TextBox1.Text) = "" Then 'Verifica que el Campo no este vacio
MsgBox "Vuelva a Escanear el Carnet.", , "SIN COINCIDENCIAS"
TextBox1.SetFocus
Else
Selection.EntireRow.Insert 'Inserta una fila en la tabla
'Agrega los datos que se encontraron
ActiveSheet.Cells(2, 1) = fecha
ActiveSheet.Cells(2, 2) = UserForm1.Label1.Caption
ActiveSheet.Cells(2, 3) = UserForm1.Label2.Caption
ActiveSheet.Cells(2, 4) = UserForm1.Label3.Caption
ActiveSheet.Cells(2, 5) = UserForm1.Label4.Caption
ActiveSheet.Cells(2, 7) = ComboBox1.Value
ActiveSheet.Cells(2, 8) = TextBox2.Value
ActiveSheet.Cells(2, 9) = hora
'Acciones para Limpiar las Etiquetas
End If
End Sub
'Evento para guardar las Salidas
Private Sub CommandButton2_Click()
'x Elsamatilde
Dim hora As String
hora = Format(Time, "hh:mm:ss")
Dim busco
Dim ini As Integer, filx As Integer
'se solicita el dato a buscar
codi = TextBox1.Text
'si se cancela finaliza el evento.
If IsEmpty(codi) Or codi = "" Then Exit Sub
'se busca el primer registro del código solicitado. a partir de allí se recorre un rango.
Set busco = Range("E2:E" & Range("E1000").End(xlUp).Row).Find(codi, LookIn:=xlValues, lookat:=xlWhole)
'si encuentra el dato, comienza el bucle hasta el fin de rango
If Not busco Is Nothing Then
'guardo la fila del 1er dato encontrado
ini = busco.Row
'Inica el bucle: se agrega texto
Do
Range("J" & busco.Row).Value = hora
Set busco = Range("E2:E" & Range("E1000").End(xlUp).Row).FindNext(busco)
'se repite el bucle hasta llegar al fin de rango o se vuelva a la 1er fila
Loop While Not busco Is Nothing And busco.Row <> ini
'Acciones para Limpiar las Etiquetas
Else
MsgBox "Este Usuario No ha Ingresado", , "SIN COINCIDENCIAS"
End If
End Sub