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.