Ayuda con Macro Control asistencia

Soy tholecram, necesito que ayudes con el programa control de horario, el cual modifica las I y O (entradas y salidas) de acuerdo a un horario establecido como rango. Esto ya fue visto en la pregunta anterior que te realice y que fue cerrada. Ahora te adjunto el Catalogo de horarios que me indicaste, el cual contiene los ID, DIA, Entrada1, salida1, entrada2, salida 2 (que son los horarios). Con esto se podrá generar una sola planilla con las I y O para cada ID según el horario que tenga en el catalogo.

Te adjunto el excel con el catalogo de horarios y otro mas con el macro que ya tenias realizado, el cual agregaba i y O en la columna C.

Catalogo:

https://dl.dropbox.com/u/31683777/Catalogo%20de%20horarios.xlsx

Planilla prueba dam:

https://dl.dropbox.com/u/31683777/Planilla%20Prueba%20dam2.xls

1

1 respuesta

Respuesta
1

Puedes completar los horario con el rango de horario para entrar y salir, por ejemplo para la entrada los que entran a las 9, su hora de entrada es de 8:30 a 9:00, te anexo un ejemplo, en la hoja "horarios", pero completa los de más.

https://www.dropbox.com/s/0jy7za5ldk5hik1/Planilla%20Prueba%20dam3.xls

Lo necesito para terminar la macro

Saludos. Dam

Hola dam te dejo el archivo con el horario completo. Le agregue unas columnas para definir el rango para que pueda ser entrada o salida (se me había olvidado eso)

https://www.dropbox.com/s/6n4y8xxlo9v5uck/Planilla%20Prueba%20dam4.xls

Ya no entendí para qué es la columna intermedia que pusiste con color rojo, me puedes dar unos ejemplos de cómo quieres el resultado, y yo propuse el catálogo de horarios, je je.

Saludos. Dam

Hola dam, solo le coloque otro color para que a la vista no se vea tan enredado.

te acuerdas que en el macro anterior que hiciste solo teníamos los rangos del horario para que se considerara entre esas horas como I y O?, bueno, ahora incluí en la planilla horarios, los rangos de horas para que se calcule como I O y ademas esta el horario que tiene cada uno (esa es la fila roja) ejemplo:

en 1 ini en1 en1fin

8:30 9:00 9:30

8:30 9:00 9:30

La fila que esta con negrita ( en este caso la roja de la planilla horarios) es la que corresponde al horario de cada empleado, las en1ini, en1fin, sa1ini, sa1fin (rangos primera jornada) en2ini, en2fin, sa2ini, sa2fin (rangos de la segunda jornada)

Pero el color que tienen las celdas es solo para que a la vista se entienda o sea mas claro. ja ja.

saludos avisame si tienes alguna otra duda.

Entonces si un ID tiene registro a las 9:20, entonces le pongo I

Y si otro ID tiene registro 9:31, ¿le pongo Fuera de horario?

Por último en ese mismo ejemplo, las 9:¿00 para qué serviría en la macro?

Te envío el archivo con el rango de horarios tomados del catálogo de horarios

Prueba y me comentas

https://www.dropbox.com/s/mg5xc5n2fxi3dz8/Planilla%20Prueba%20dam4.xls

Saludos. Dam

Con el horario de color rojo, pretendo calcular los minutos en horas extras y atraso. Ejemplo:

entrada a las 9:15

Horario entrada 9:00

ID X = 15 minutos de atraso.

Por ahora no lo necesito pero prefiero tener el horario en la celda para cuando lo necesite, asi que seria un poco mas fácil ya que no hay que modificar nada en la tabla horarios.

Una cosa, en el archivo hoja1 hay un id (888), ese no esta registrado dentro de la tabla horarios pero en la hoja IO lo toma como entrada su horario. porque pasa eso? si el id no esta registrado lo ideal seria que indique que algo como eso ("Id no definido en el horario")

otra cosa que necesito dam, es aplicar este macro a una hoja excel aparte, osea el archivo con los registros de horario me los entrega un programa de reloj control. Necesitaria que el archivo excel con el macro contenga el horario y el macro, y esto se aplique a a otro archivo excel que tiene los id y horarios. Ojala se entienda.

1. Te paso la macro con la corrección del id no definido en el horario

Sub controlasis()
'calcula control de asistencia
'Por.dam
cuenta4 = 0
cuenta2 = 0
j = 2
'columnas de salida
s1 = "C"
s2 = "D"
s3 = "E"
s4 = "F"
Set h1 = Sheets("Hoja1")
Set h2 = Sheets("IO")
Set h3 = Sheets("Id incompleto")
Set h4 = Sheets("horarios")
h2.Cells.Clear
h3.Cells.Clear
h1.Select
'Range(s1 & ":" & s4).Clear
    h1.Columns("A:B").Select
    Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, _
        Key2:=Range("B2"), Order2:=xlAscending, _
        Header:=xlGuess, OrderCustom:=1, _
        MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal, DataOption2:=xlSortNormal
id_ant = h1.Range("A2")
fe_ant = Left(h1.Range("B2"), 10)
'Pone I/O
For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
    hora = Mid(h1.Cells(i, "B"), 12, 2)
    minu = Mid(h1.Cells(i, "B"), 15, 2)
    horario = TimeSerial(hora, minu, 0)
    idencontrado = 0
    For m = 2 To h4.Range("A" & Rows.Count).End(xlUp).Row
        gt1 = h1.Cells(i, "A")
        gt2 = Weekday(Left(h1.Cells(i, "B"), 10), 1)
        If h4.Cells(m, "A") = h1.Cells(i, "A") And _
           h4.Cells(m, "B") = Weekday(Left(h1.Cells(i, "B"), 10), 1) Then
            in1 = h4.Cells(m, "D")
            in2 = h4.Cells(m, "F")
            me1 = h4.Cells(m, "G")
            me2 = h4.Cells(m, "I")
            me3 = h4.Cells(m, "J")
            me4 = h4.Cells(m, "L")
            fi1 = h4.Cells(m, "M")
            fi2 = h4.Cells(m, "O")
            idencontrado = 1
        End If
    Next
    h2.Cells(i, "A") = h1.Cells(i, "A")
    h2.Cells(i, "B") = h1.Cells(i, "B")
    If idencontrado = 1 Then
        Select Case Weekday(Left(h1.Cells(i, "B"), 10), 1)
        Case 1 'Domingo
        Case 2, 3, 4, 5, 6, 7 'Lun, mar, mie, jue, vie, sab
            Select Case horario
                Case in1 To in2
                    h2.Cells(i, s1) = "I"
                Case me1 To me2
                    h2.Cells(i, s1) = "O"
                Case me3 To me4
                    h2.Cells(i, s1) = "I"
                Case fi1 To fi2
                    h2.Cells(i, s1) = "O"
                Case Else
                    h2.Cells(i, s1) = "Fuera de horario"
            End Select
        End Select
    Else
        h2.Cells(i, s1) = "Id no definido en el horario"
    End If
Next
'Calcula la asistencia
For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row + 1
    If id_ant = h1.Cells(i, "A") And _
       fe_ant = Left(h1.Cells(i, "B"), 10) Then
       Select Case Weekday(fe_ant, 1)
            Case 1 'Domingo
            Case 2, 3, 4, 5, 6 'Lun, mar, mie, jue, vie
                cuenta4 = cuenta4 + 1
            Case 7 'Sabado
                cuenta2 = cuenta2 + 1
        End Select
    Else
       Select Case Weekday(fe_ant, 1)
            Case 1 'Domingo
            Case 2, 3, 4, 5, 6 'Lun, mar, mie, jue, vie
                If cuenta4 <> 4 Then
                    'ejecutar dia_laboral_incompleto()
                    h3.Cells(j, s2) = id_ant
                    h3.Cells(j, s3) = fe_ant
                    h3.Cells(j, s4) = "Id incompleto"
                    j = j + 1
                End If
            Case 7 'Sabado
                If cuenta2 <> 2 Then
                    'ejecutar dia_sabado_incompleto()
                    h3.Cells(j, s2) = id_ant
                    h3.Cells(j, s3) = fe_ant
                    h3.Cells(j, s4) = "Id incompleto"
                    j = j + 1
                End If
        End Select
        id_ant = h1.Cells(i, "A")
        fe_ant = Left(h1.Cells(i, "B"), 10)
        cuenta4 = 1
        cuenta2 = 1
    End If
Next
MsgBox "proceso terminado", vbInformation
Range("A1").Select
End Sub

2. Para aplicar los cambios a la macro para que funcione con 2 archivos . podrías finalizar esta pregunta y crear una nueva
Saludos. Dam

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas