Avisar vencimiento de contrato de empleado con 2 meses de anterioridad tan pronto se abra el libro

Hola!

Para ubicarte nuevamente en el libro que estoy trabajando: tengo una serie de datos de empleados de la empresa:

Cedula

Apellidos

Nombres

Tipo Contrato

Fecha Inicial

Fecha de Vencimiento

...entre otros

Necesito que apenas abra el libro me avise a cuáles empleados se les vence el contrato en menos de dos meses y a cada uno me diga cuántos días de vencimiento le quedan.

Quedo pendiente! Gracias por tu ayuda!!!

1 Respuesta

Respuesta
1

Supongamos que cada empleado tiene un fila.

Los apelllidos están en la columna C, el nombre en la D y la columna de la fecha de vencimiento del contrato es la G

Y supondremos que la primera fila es el encabezado.

Esta macro la debes copiar en el objeto que se llama ThisWorkbook, arriba a la derecha tendrás el proyecto o proyectos y allí aparecen las hojas, formularios, módulos y el ThisWorkbook.

Private Sub Workbook_Open()
Dim FilaFinal, i, Contador, Alerta, Meses As Integer
Dim Texto As String
Dim FechaHoy As Date
Texto = "Empleados cuyo contrato vence antes de dos meses:" & vbCrLf & vbCrLf
FechaHoy = Date
Contador = 0
With Worksheets("Datos Empleados")
   FilaFinal = .Range("G" & Rows.Count).End(xlUp).Row
   For i = 2 To FilaFinal
      Meses = DateDiff("m", FechaHoy, .Cells(i, "G"))
      If Meses < 2 Or (Meses = 2 And Day(Date) > Day(.Cells(i, "G"))) Then
         Contador = Contador + 1
         Texto = Texto & .Cells(i, "D") & " " & .Cells(i, "C") & " " & _
                 DateDiff("d", FechaHoy, .Cells(i, "G")) & " días" & vbCrLf
      End If
   Next
End With
If Contador > 0 Then
   Worksheets("Datos Empleados").Activate
   Alerta = MsgBox(Texto, vbInformation + vbOKOnly, "HAY CONTRATOS QUE VENCEN PRONTO")
Else
   MsgBox ("Ningún contrato vence en menos de dos meses.")
End If
End Sub

La función Date te da la fecha de hoy

La función DateDiff("m", FechaHoy, .Cells(i, "G")) te da los meses entre hoy y el vencimiento

La función Day(fecha) te da el número de día del mes de la fecha

Y eso es todo.

Hola!

Primero gracias por tu tiempo y tu ayuda!!

Te cuento que funciona pero tiene dos problemitas:

1. Me está mostrando los contratos que ya finalizaron, es decir que están vencidos y no debería mostrarlos únicamente los que están por vencer... saca datos como "X PERSONA vence el contrato en -150 días".

2. Hay algunos empleados que no tienen fecha de vencimiento, en lugar de esa fecha en esa casilla hay un "N/A" ya que son empleados con contrato por labor que no tiene fecha de vencimiento fija y los que tienen contrato indefinido en esa columna no tienen fecha si no "INDEFINIDO". ahí me saca un error dice que en la línea:

Meses = DateDiff("m", FechaHoy, .Cells(i, "G"))

Probé colocándole una fecha cualquiera y ahí si lo dejó correr.

No sé si eso se pueda arreglar...

Quedo pendiente y nuevamente mil gracias!!!

Mándame el libro y así me aseguraré que lo hago bien. No sabia que hubiera personas con contratos vencidos, para evitarlo habrá que hacer que los meses intermedios sean mayor o igual que cero y cuando sean cero que el dia actual se menor que el de vencimiento. Y el problema de los trabajadores que no tienen fecha de vencimiento también se puede arreglar.

Pero necesito el libro para hacerlo sin que se escape ningún detalle.

Mádamelo a [email protected]

Pon como asunto el título de la pregunta.

De acuerdo con el libro que me has mandado la macro es esta:

Private Sub Workbook_Open()
Dim FilaFinal, i, Contador, Alerta, Meses, DiasDeMesfaltan, DiaMesHoy As Integer
Dim Texto As String
Dim FechaHoy As Date
Texto = "Empleados cuyo contrato vence antes de dos meses:" & vbCrLf & vbCrLf
FechaHoy = Date
DiaMesHoy = Day(FechaHoy)
Contador = 0
With Worksheets("CONTROL HV")
   FilaFinal = .Range("AZ" & Rows.Count).End(xlUp).Row
   For i = 15 To FilaFinal
      If IsDate(.Cells(i, "AZ")) Then
         Meses = DateDiff("m", FechaHoy, .Cells(i, "AZ"))
         DiasDeMesfaltan = Day(.Cells(i, "AZ")) - DiaMesHoy
         If (Meses = 0 And DiasDeMesfaltan >= 0) Or Meses = 1 Or (Meses = 2 And DiasDeMesfaltan < 0) Then
            Contador = Contador + 1
            Texto = Texto & .Cells(i, "B") & " " & .Cells(i, "C") & " " & .Cells(i, "D") & " " & _
                    DateDiff("d", FechaHoy, .Cells(i, "AZ")) & " días" & vbCrLf
         End If
      End If
   Next
End With
If Contador > 0 Then
   Worksheets("CONTROL HV").Activate
   Alerta = MsgBox(Texto, vbInformation + vbOKOnly, "HAY CONTRATOS QUE VENCEN PRONTO")
Else
   MsgBox ("Ningún contrato vence en menos de dos meses.")
End If
End Sub

Nótese que he aplicado la expresión menos de dos meses que decías, por ejemplo, si fecha de hoy es 28/08/2013 y el vencimiento es 28/10/2013 no saldrá hoy todavía, saldrá mañana. Si el vencimiento es hoy mismo tambiénn sale diciendo 0 días pero si fue ayer ya no sale. Se ha mejorado la medición de los días y meses y no hacer cuentas cuando no hay una fecha en vencimiento.

Y eso es todo, ahora mismo te mando el libro con la macro incorporada.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas