Códigos para automatizar una macro, ejecutarla automáticamente con unas condiciones

Hola bueno gracias por leer esta pregunta.
nesecito que me ayuden con algunos codigos o que me corrijan o me digan si me falta algo o en donde se necesite para automatizar una macro es decir hacer k la macro se ejecute con un pra de condiciones sin tener que precionar el el acceso directo (Ctrl+w), con las referncias de dos celdas de con las funciones diasem y hora para que la macro se ejecute al ser el dia de la semana 7 y la hora del dia las 4:00p.m.kiero k sea algo haci como esta funcion [=si(y(ahora=7,hora=16),ejecutar la macro,nada hasta k sea el tiempo especifico)bueno lo k llevo es esto:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
ActiveSheet.Range("L6").Calculate
If Range("L6") = 1 Then
Sheets("Inventario").Select
Range("B3:B350").Select
Selection.Copy
Range("C3:C350").Select
Range("C350").Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Hoja1").Select
Range("C3:C700").Select
Application.CutCopyMode = False
Selection.Copy
Range("D3:D700").Select
Range("D700").Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("E3:J700").Select
Range("E700").Activate
Application.CutCopyMode = False
Selection.ClearContents
Sheets("Lunes").Select
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
Range("A3:B200").Select
Selection.ClearContents
Range("E3:F200").Select
Selection.ClearContents
ActiveSheet.Next.Select
Range("A3:B200").Select
Selection.ClearContents
Range("E3:F200").Select
Selection.ClearContents
Sheets("Miercoles").Select
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 1
Range("A3:B200").Select
Selection.ClearContents
Range("E3:F200").Select
Selection.ClearContents
Sheets("Jueves").Select
ActiveWindow.ScrollColumn = 1
Range("A3:B200").Select
Selection.ClearContents
Range("E3:F200").Select
Selection.ClearContents
Sheets("Viernes").Select
Range("A3:B200").Select
Selection.ClearContents
Range("E3:F200").Select
Selection.ClearContents
Sheets("Sabado").Select
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
Range("A3:B200").Select
Selection.ClearContents
Range("E3:F200").Select
Selection.ClearContents
Range("B5").Select
End If
End Sub

1 Respuesta

Respuesta
1
Pero por lo que entiendo la idea es que se esté evaluando constantemente la hora para que la macro se ejecute en la hora exacta. Si es así, aunque puede hacerse, no te lo recomiendo puesto que esto significa que el archivo debe permanecer abierto todo el tiempo y se estará ejecutando una macro de manera permanente lo que consumirá recursos de tu equipo. Además, si necesitas trabajar en otro archivo de excel, este funcionará mucho más lentamente.
Dime si aún te interesa hacerlo así.
De otro lado, como lo estás haciendo con el evento change, puede ser factible siempre que en el archivo se estén ingresando datos de manera constante, así podrías cada que se ingrese un dato evaluar estas dos condiciones y ver si puede ejecutarse la macro (si no se ha hecho ya).
Muchísimas gracia por responderme y pues te pido que me ayudes. Estoy haciendo un libro para un negocio de ropa y ya lo voy a acabar, en este libro tengo una hoja por día esepto en domingo que no abren; en el libro se incluye "credito"en la cual se le meten los abonos de cada día de la semana esepto el donimgo, bueno lo que necesito es que la macro copie los valores de unas celdas y borrar los datos de la semana (en todo el libro)haci como borrón y cuenta nueva; y por eso quiero automatizar la macro par que funcione con una condición IF con referencia de una celda que tiene una función SI y tengo un change que es:
change:
Sub Worksheet_Change(ByVal Target As Range)
If Range("L6") = 1 Then Call Macro1
End Sub

Cuando se da la condición se ejecuta la macro muchísimas veces y con el método abreviado se ejecuta normalmente solo una vez.Si pudieras ayudarme a que la macro se ejecute solo una vez te lo agradecería muchísimo.
Yo creo que lo podrías manejar de la siguiente manera. Si el archivo será abierto todos los días entonces puedes evaluar durante el inicio cuál es el día actual, de ser lunes entonces todos los datos de la semana pasada se pasarán. Se puede tener una bandera en alguna celda que te muestre si el archivo se ha abierto más de una vez, pues es posible que siendo lunes se abra el archivo dos veces entonces se borre la información que se ha grabado desde la primera apertura.
Revisa si puedes manejarlo de esa forma. Por lo que me preguntas pienso que necesitabas ayuda más en el concepto que en la macro, pues ve que ya la tienes lista.
Gracias contestar bN pues lo que pasa es que si llama la macro pero se ejecuta muchas veces quiero ver si podrías ayudarme a ver si hay una forma de hacer que la macro se ejecute solo una vez.haci como un código de visual basic para hacer que la detenga.
Creo que el problema es cuando se cumple la condición al no tener algo para que se detenga se sicla y hace que se ejecute a lo loco.
Puedes tener una bandera en alguna parte de tu libro, por ejemplo en una celda colocas OK al inicio de la macro, y colocas una condición para que si el valor de esta celda es OK entonces no corra.
If Sheets("Bandera").Range("A1").Value = "OK" Then
      Exit Sub
Else
      Sheets("Bandera").Range("A1").Value = "OK"

End If
¿Algo así podría servirte?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas