Worksheet_Deactivate // Worksheet_Activate duplica el procedimiento

Tengo en una hoja puesta que cuando se activa o desactiva una hoja me recorre una macro.

Esa macro me salta un mensaje si el saldo es inferior

Al activar la hoja si hay un saldo negativo me salta el mensaje, pero cuando cambio la hoja me salta los dos mensajes iguales.

Entiendo que al utilizar el mismo módulo, me lo duplica. Es decir, al desactivar la hoja me salta el mensaje del módulo y me se vuelve activar la hoja en el cual está el saldo negativo. A la vez me salta el otro procedimiento de activar la hoja (duplicando el mensaje)

¿Cómo podría hacer para que no me lo duplique?

Al entrar o al salir de la hoja si hay saldo negativo

- Salta mensaje

-Activa la hoja donde está el saldo negativo

La solución sería que no se volviese a activar la hoja, pero lo que quiero es que no pueda salir el usuario hasta que arregle ese saldo negativo.

Queda muy mal como está ahora porque salta dos veces el mensaje

1 respuesta

Respuesta
2

Te dejo un ejemplo explicado en el código:

Dim hojax As String
Private Sub Worksheet_Activate()
hojax = ActiveSheet.Name      'para poder seleccionarla nuevamente
If [A1] = "" Then MsgBox "Celda vacía"    'ajustar la condición
End Sub
Private Sub Worksheet_Deactivate()
If Sheets(hojax).[A1] = "" Then      'indica la condición de la hoja activa
    MsgBox "Celda vacía"
    Application.EnableEvents = False   'cancela el siguiente evento Activate
    Sheets(hojax).Activate
    Application.EnableEvents = True    'vuelve a activar el evento
End If
End Sub

Utilicé una variable para poder usar las mismas macros en diferentes hojas. Si este control se hace en una sola hoja, se puede mencionar directamente la Hoja que corresponda, sin declarar ninguna variable.

Como al 'desactivarse', la hoja activa pasa a ser otra, hay que volverla a activar ... y por eso inhabilito momentáneamente los eventos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas