Conseguir que una macro sólo se ejecute 1 vez cada vez que se cumplan las condiciones

Tengo una macro que copia los valores de unas celdas fijas en un listado cuando se cumplen unas condiciones que tengo redactadas en otras celdas mediante fórmulas. El problema es que cuando se cumplen las condiciones Excel ejecuta la macro un número ilimitado de veces y yo necesito que se ejecute una única vez. Os dejo la macro que tengo para copiar las celdas:

Sub Record_data()
'
' Record_data Macro
'
Sheets("History").Select
Sheets("History").Range("C3:I3").Select
Sheets("History").Range("C3:I3").Activate
Selection.Copy
Sheets("History").Range("C5:I5").Select
Sheets("History").Range("C5:I5").Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("History").Range("C5:I5").Select
Sheets("History").Range("C5:I5").Activate
Application.CutCopyMode = False
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End Sub

Y esto es lo que tengo para lanzar la macro anterior al cumplirse las celdas:

Private Sub Worksheet_Calculate()
If Range("A5") = 1 And Range("A7") = 1 And Range("A9") = 1 And Range("L2") = "SI" Then Call Record_data
End Sub

Las celdas A5, A7 y A9 van variando su valor según una cuenta atrás, de forma que las condiciones se cumplen cada dos minutos siempre que queden menos de 12 horas en la cuenta atrás.

La celda L2 es una opción que he puesto para decidir en cada momento si quiero que la macro que copia las celdas se ejecute o no.

Cualquier ayuda será de mucha ayuda.

1 respuesta

Respuesta
1

Esta puede ser una opción, la macro se ejecutará solamente una vez, cuando cambies la celda L2 a "SI" nuevamente se ejecutará una vez.

Private Sub Worksheet_Calculate()
If Range("A5") = 1 And Range("A7") = 1 And Range("A9") = 1 And Range("L2") = "SI" Then 
   Call Record_data
   Range("L2") = "NO"
End If
End Sub

Prueba y me comentas, si es necesario utilizar otra celda para que solamente se ejecute una vez.

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Buenas Dante Amor, lo primero muchas gracias por haber invertido tu tiempo en ayudarme.

Lo que me propones no me sirve, ya que mi idea es que la finalidad de la celda L2 sea mantener encendido el proceso de copia cada dos minutos sin que yo este delante del ordenador. No puedo cambiar el valor de L2 cada dos minutos. 

¿Se podría incluir alguna variable que alcance el valor 1 después de ejecutar la macro y el valor 0 cuando la celda A9 sea 0? De esta forma podríamos indicar la condición de que la variable sea 0 para que se ejecute la macro.

Ya había enviado una respuesta pero no se envío por alguna causa, la vuelvo a poner.

Tal vez quieras ejecutar la macro cada 2 minutos

Sub REPETIR()
  Call Recor_data
  if Range("L2") = "NO" then Exit sub
  Application.OnTime Now + TimeValue("00:02:00"), "REPETIR"
End Sub

Ejecuta la macro Repetir y la macro se va a estar ejecutando cada 2 minutos, y cuando ya no quieras que se ejecute, entonces en la celda L2 pones la palabra "NO"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas