VBA Access: Obtener fecha de cumpleaños y mostrar mensaje
Dado que tengo la fecha de nacimiento de una persona, al consultar datos de esta persona de diferentes maneras, necesito obtener un mensaje que me indique cuánto falta para su cumpleaños desde una semana de anticipación ("Faltan X días para el cumpleaños de Y" o bien "Hoy cumple X años").
Intenté armar la fecha de su próximo cumpleaños mediante Day y Month pero por algún motivo no me da correcta la fecha (por ejemplo, la fecha de cumpleaños es 18/11/2016 y me la arma como 30/12/2016).
Public Sub CUMPLEANOS() Dim DIANAC As Integer, MESNAC As Integer, CUMPLE As Date, FECHA As Date, vT As String, vFNac As Date, vNom As String On Error GoTo ERRH ' Establecela fecha de defunción vFNac = DLookup("[FNAC]", "[LECTOR]", "[DNI] = " & VCONSULTA & "") vNom = DLookup("[NOM]", "[LECTOR]", "[DNI] = " & VCONSULTA & "") vNom = vNom & " " & DLookup("[APE]", "[LECTOR]", "[DNI] = " & VCONSULTA & "") RETOMAR: ' Establece día y mes del cumpleaños DIANAC = Day(vFNac) MESNAC = Month(vFNac) ' Establece cumpleaños MsgBox "Día: " & DIANAC & vbLf & "Mes: " & MESNAC & vbLf & "FNac: " & vFNac CUMPLE = DateSerial(Year(Now()), MESNAC, DIANAC) FECHA = Format(Now(), "dd/mm/yyyy") MsgBox "Fecha: " & FECHA & vbLf & "Cumple: " & CUMPLE ' If CUMPLE = (FECHA + 7) Then ' vT = "en 1 semana" ' ElseIf CUMPLE = (FECHA + 2) Then ' vT = "pasado mañana" ' ElseIf CUMPLE = (FECHA + 1) Then ' vT = "mañana!" ' ElseIf CUMPLE <= (FECHA + 6) Then ' vT = "en " & (FECHA + 6) - Date & " días" ' ElseIf CUMPLE = FECHA Then ' MsgBox "¡" & vNom & " cumple " & Int((CUMPLE - vFNac) / 365) & " años del día de hoy!", 48, "Cumpleaños del Lector" '' ElseIf CUMPLE > FECHA Then '' vT = "este mes: el " & CUMPLE ' End If ' If FECHA < CUMPLE Then ' MsgBox "¡" & vNom & " cumple años " & vT & "!", 48, "Cumpleaños del Lector" ' End If '-------- FIN CONTROL DE CUMPLEAÑOS -------- EXITH: Exit Sub ERRH: If Err.Number = 2471 Then MsgBox "No se ha logrado obtener la fecha de cumpleaños del lector." & vbLf & _ "Error: " & Err.Number & ". " & Error$ & ".", 16, "Error " & Err.Number ElseIf Err.Number = 94 Or Err.Number = 0 Then vFNac = vFECHANACIMIENTO vNom = vNOMBRE & " " & vAPELLIDO GoTo RETOMAR Else ENTORNOERR = "Calculos.CUMPLEANOS" Mensajes.ERR_GENERAL_BY_N End If End Sub
El código que hice lo intento corregir al darme cuenta que no me da bien los datos, pero habrá parte comentada o MsgBox con el fin de controlar valores. No logro dar pie con bola.
Respuesta de Jacinto Trillo Jareño
2