Excel - Como detener y reanudar una macro usando botones

 
Vista:

Como detener y reanudar una macro usando botones

Publicado por Isaac (7 intervenciones) el 13/08/2018 21:52:09
Buenas tardes,

He realizado una macro que lanza un aviso cada vez que el numero de una celda es menor que 1000, para control de stocks. La macro esta en funcionamiento continuo, y necesito dos botones: uno para que la macro deje de funcionar, y otro para reanudar la macro. El codigo se ve asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Private Sub CommandButton1_Click()
 
Static bWarning As Boolean
bWarning = True
 
End Sub
 
Private Sub CommandButton2_Click()
 
Static bWarning As Boolean
bWarning = False
 
End Sub
 
Private Sub Worksheet_Change(ByVal Target As Range)
 
Set Target = Me.Range("G365")
Static bWarning As Boolean
 
If bWarning = False Then
If Target.Value < 1000 Then
 
MsgBox "Low Stock"
 
   End If
 
End If
 
End Sub



Soy bastante principiante en esto, asi que seguramente este mal definido, pero mi idea es sencilla: si bWarning es FALSE que la macro funcione, y si es TRUE que pare (para eso cada uno de los botones). El problema es que no funciona.

Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.154
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Como detener y reanudar una macro usando botones

Publicado por Antoni Masana (1459 intervenciones) el 16/08/2018 07:09:26
Hay varios fallos.

- Si la variable la declaras STATIC dentro de un procedimiento solo la conoce el procedimiento
- La tienes que declarar PRIVATE dentro del modulo para que solo la vean lo procedimientos de este modulo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private  bWarning As Boolean
 
Private Sub CommandButton1_Click()
    Static bWarning As Boolean
    bWarning = True
End Sub
 
Private Sub CommandButton2_Click()
    Static bWarning As Boolean
    bWarning = False
End Sub
 
Private Sub Worksheet_Change(ByVal Target As Range)
    Set Target = Me.Range("G365")
    Static bWarning As Boolean
    If bWarning = False Then
       If Target.Value < 1000 Then
          MsgBox "Low Stock"
       End If
    End If
End Sub

Deberías de hacer saltar el mensaje SOLO cuando se modifica las celdas que afectan al calculo de la celda G365 que es la que te interesa vigilar y no cuando se modifica cualquier otra celda

Otra opciòn es esta:

1
2
3
4
5
6
7
Private Sub Worksheet_Calculate()
    Static Ant_Stock As Long
    If Ant_Stock <> Range("G365") Then
       Ant_Stock = Range("G365")
       IF Range("G365") < 1000 Then MsgBox "Low Stock"
    End If
End Sub

Solo se ejecuta cuando ha finalizado el calculo de las formulas y en tu caso si se modifica el Stock avisa si la cantidad es menor.

Seguramente hay mas soluciones, pero si desactivas la alarma dejara de ser efectiva..

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como detener y reanudar una macro usando botones

Publicado por Isaac (7 intervenciones) el 16/08/2018 14:46:11
Gracias Antoni, funciono a la perfeccion!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Como detener y reanudar una macro usando botones

Publicado por Isaac (7 intervenciones) el 17/08/2018 19:28:33
Hola Antoni, estoy utilizando la macro que me corregiste, pero ahora tengo otro problema: quiero crear otra alarma para otra celda, digamos la G366 para cuando el valor de la misma es menor que 1000 (lo mismo pero para otra celda). Se que no se puede tener mas de un Worksheet_Change asi que no sabria como hacerlo.

Se te ocurre alguna idea?

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.154
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Como detener y reanudar una macro usando botones

Publicado por Antoni Masana (1459 intervenciones) el 18/08/2018 10:41:30
Yo me apunto a la solución del Calculate

1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Worksheet_Calculate()
    Static Celda_G365 As Long, Celda_G366 As Long
 
    If Celda_G365 <> Range("G365") Then
       Celda_G366 = Range("G365")
       IF Range("G365") < 1000 Then MsgBox "Low Stock"
    End If
 
    If Celda_G366 <> Range("G366") Then
       Celda_G366 = Range("G366")
       IF Range("G366") < 1000 Then MsgBox "Low Stock"
    End If
End Sub

Ahora bien si te gusta más la solución de los botones

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private  bWarning As Boolean
 
Private Sub CommandButton1_Click()
    bWarning = True
End Sub
 
Private Sub CommandButton2_Click()
    bWarning = False
End Sub
 
Private Sub Worksheet_Change(ByVal Target As Range)
    Set Target = Me.Range("G365")
    If bWarning = False Then
       If Target.Value < 1000 Then MsgBox "Low Stock"
    End If
 
    Set Target = Me.Range("G366")
    If bWarning = False Then
       If Target.Value < 1000 Then MsgBox "Low Stock"
    End If
End Sub

Otra forma de hacerlo con botones y más simple y que puede ir con la primera solución es esta:

1
2
3
4
5
6
7
Private Sub CommandButton1_Click()
    Application.calculation=xlCalculationManual
End Sub
 
Private Sub CommandButton2_Click()
     Application.calculation=xlCalculationAutomatic
End Sub

El Botón 1 para el calculo de las formulas y no se actualizan, el Botón 2 activa el calculo automático.

Saludos.
\\//
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Como detener y reanudar una macro usando botones

Publicado por Isaac (7 intervenciones) el 20/08/2018 15:45:47
Muchisimas gracias!

Funciono perfectamente.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar