Macro de Msgbox para campeón

Me gustaría hacer una Macro automática (que no tenga que ejecutarla) para que cuando el líder de una de las ligas que tengo en Excel, saque más de 3 puntos al segundo, aparezca un aviso en msgbox en pantalla. Algo así:

Sub CAMPEON()
Dim Primero As Integer
Dim Segundo As Integer
Primero = Range("A1").Value
Segundo = Range("A2").Value
If Primero - Segundo > 3 Then MsgBox "CAMPEON DE LIGA: " & Range("B1").Value
End Sub

Mi problema es que se tiene que ejecutar automáticamente desde que abro el libro y hasta que se cumpla la condición. 

¿Alguien me ayuda a completar el código?

1 respuesta

Respuesta
1

Podés colocar tu macro (o las instrucciones) en el evento Calculate del objeto Hoja donde harás este control.

Adjunto imagen.

Estoy interpretando que las celdas A1 y A2 tienen fórmulas (que capturan datos de las celdas amarillas). Si los datos se 'ingresan manualmente' en celdas A1 y A2 el evento sería Change. Confirmame si se trata de esta situación para enviarte la macro ajustada.

Gracias por la respuesta Elsa!

Pues las celdas A1 y A2, son un copiar-pegar manual de los datos de otra celda. Así que son datos manuales, no hay ninguna fórmula en ellas. 

Añado otra duda: ¿cómo podría ampliar mi macro para que no solo se refiriera a una jornada, si no a varias? Es decir que la comprobación de Range("A1").value frente a Range("A2").value pudiera repetirse para otras 'jornadas'. 

No sé a qué te refieres con 'jornadas'. Si se trata de otros rangos va de ejemplo en la macro siguiente, que se coloca en el objeto HOJA en lugar de la anterior. Se controlan los rangos A1:A2 y A4:A5. El nombre del equipo lo coloqué de ejemplo en B1 y B4.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Primero As Integer
Dim Segundo As Integer
If Not Intersect(Target, Range("A1:A2")) Is Nothing Then   '1ER  RANGO - resultado en B1
    Primero = Range("A1").Value
    Segundo = Range("A2").Value
    If Primero - Segundo > 3 Then MsgBox "CAMPEON DE LIGA: " & Range("B1").Value
ElseIf Not Intersect(Target, Range("A4:A5")) Is Nothing Then   '2DO RANGO -  resultado en B4
    Primero = Range("A4").Value
    Segundo = Range("A5").Value
    If Primero - Segundo > 3 Then MsgBox "CAMPEON DE LIGA: " & Range("B4").Value
'repetir otros rangos si hiciera falta
End If
End Sub

Queda entendido que como se trata de un evento 'Change' o sea cambio se ejecutará cada vez que pegas algo en esas celdas. Así quizás te aparezca el mensaje luego de pegar un valor A1 cuando aún falta pegar el valor en A2.

Sdos!

Casi casi ya lo tengo, pero me surge un problema que no sé cómo arreglar. 

Yo tengo en un mismo libro varias hojas (worksheets).

Quiero que me muestre el msgbox SOLO para la worksheet en la que estoy siempre que se cumpla la condición que le digo (porque he probado con worksheet.activate pero tendría que estar cambiando de hoja para que me saliera el msbgox). 

Con esta otra forma, casi lo he conseguido usando worksheet.calculate en cada una de las hojas. Pero el problema que me sale ahora es que me salen los msgbox de todas las sheets del libro. Y yo solo quiero que me salga el de la hoja en la que me encuentro. 

Private Sub worksheet_calculate()
'declaro variables para saber los puntos del Primero y Segundo en la clasificación
Dim Primero As Integer
Dim Segundo As Integer
'Le digo que los puntos del Primero en esa clasificación están en AP3 y los del Segundo en AP4.
Primero = Range("AP3").Value
Segundo = Range("AP4").Value
'Le digo que si los puntos del Primero menos los del Segundo en la clasificación es >9 en la pre-antepenúltima jornada de la liga (quedarían 9 ptos. por jugar),
'y esa jornada ya se ha completado (viendo si su última celda del rango es distinta de ""), que entonces vaya a la clasificación y
'coja el nombre del equipo que va Primero (celda AO3) y lo muestre en el msgbox
If Primero - Segundo > 9 And Range("Ab125").Value <> "" Then MsgBox "CAMPEON DE LIGA: " & Range("AO3").Value, vbInformation
'Le digo que si los puntos del Primero menos los del Segundo en la clasificación es >6 en la antepenúltima jornada de la liga (quedarían 6 ptos. por jugar),
'y esa jornada ya se ha completado (viendo si su última celda del rango es distinta de ""), que entonces vaya a la clasificación y
'coja el nombre del equipo que va Primero (celda AO3) y lo muestre en el msgbox
If Primero - Segundo > 6 And Range("Ab135").Value <> "" Then MsgBox "CAMPEON DE LIGA: " & Range("AO3").Value, vbInformation
End Sub

Con este macro, me funciona como yo quiero la comprobación del primero y segundo, el problema es que me muestra los msgbox del resto de hojas. ¿Cómo puedo arreglar la macro para que haga lo mismo PERO SOLO en la hoja en la que esté y no en todas las hojas del libro?

Porque he pegado el código en cada hoja, pero aun así me lo aplica a todas aunque no estén activas en ese momento.

Espero haberme explicado... :)

No puedo usar worksheet_change porque en esas hojas ya lo uso para otra cosa 

Para empezar se puede utilizar un mismo evento Change para varias condiciones... pero ya es la 3ra vez que me cambias las condiciones de la consulta original.

Así que por favor valora lo entregado hasta aquí que responde a tus 2 primeras solicitudes y deja otra consulta para la nueva situación que me planteas ahora y con mucho gusto seguiré el tema.

En el cuerpo del mensaje indica que es 'Para Elsa' asi continuamos con el tema.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas