MS Excel 2003: macro para advertir cuando la grabación caducará en 31 días

Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.

MS Excel 2003: macro para advertir cuando la grabación caducará en 31 días

Este tutorial de Excel muestra cómo escribir una macro para advertirle (con capturas de pantalla e instrucciones paso a paso) cuando vencen los registros en 31 días en Excel 2003 y versiones anteriores.

Pregunta: Trabajamos con subcontratistas que tienen certificados de seguro que vencen en diferentes fechas. Almacenamos estos certificados y fechas de vencimiento en Microsoft Excel 2003/XP/2000/97.

¿Hay alguna forma en Excel de advertirme cuando un certificado específico está a punto de caducar?

R: Hay varios “eventos” disponibles en las hojas de cálculo de Excel donde puede colocar el código VBA. En su caso, queremos poner nuestro código en el evento “Workbook_Open”.

Veamos un ejemplo.

Descargue la hoja de cálculo de Excel (que se muestra a continuación)

En nuestra hoja de cálculo, tenemos una hoja llamada Hoja1. En la columna C, almacenamos la fecha de vencimiento de cada certificado de seguro.

Cuando se abre el archivo de Excel, el código VBA en el evento “Workbook_Open” se ejecuta automáticamente para verificar las primeras 200 filas en esta hoja de cálculo. Verifique cada fila para ver si el certificado caducará dentro de los próximos 31 días.

En nuestro ejemplo, abrimos el archivo el 1 de septiembre de 2003. En este caso obtendremos el siguiente mensaje de advertencia:

Esta macro generará un mensaje de advertencia para cada certificado que vencerá en los próximos 31 días.

Puede presionar Alt+F11 para ver el código VBA.

codigo macro

El código de la macro se ve así:

Private Sub Workbook_Open()

   Dim LRow As Integer
   Dim LResponse As Integer
   Dim LName As String
   Dim LDiff As Integer
   Dim LDays As Integer

   LRow = 2

   'Warning - Number of days to check for expiration
   LDays = 31

   'Check the first 200 rows in column C
   While LRow < 200

      'Only check for expired certificate if value in column C is not blank
      If Len(Sheets("Sheet1").Range("C" & LRow).Value) > 0 Then

         LDiff = DateDiff("d", Date, Sheets("Sheet1").Range("C" & LRow).Value)
         If (LDiff > 0) And (LDiff <= LDays) Then
            'Get subcontractor name
            LName = Sheets("Sheet1").Range("A" & LRow).Value
            LResponse = MsgBox("The insurance certificate for " & LName & " will expire in " & LDiff & " days.", vbCritical, "Warning")
         End If
      End If

      LRow = LRow + 1

   Wend

End Sub