› Sviluppare funzionalita su Microsoft Office con VBA › eseguire vba ogni venerdì alle 6 del mattino
-
AutoreArticoli
-
buongiorno a tutti!
volevo creare una VBA che mi permetta di eseguirla ogni venerdì dalle ore 6, una volta sola al momento che si apre il file. Nel senso, la macro si deve attivare da quell'ora e a quel giorno al momento dell'apertura.
Praticamente quando si apre il file, cancellerà i dati presenti nelle colonne indicate nella macro. Poi una volta cancellate, non dovrà più cancellarle fino al venerdì successivo dalle ore 6.00.
ho provato a scrivere un codice, ma non funziona. vi allego il file.
spero che qualcuno possa aiutarmi.
saluti e a presto
Marco
Allegati:
You must be logged in to view attached files.Prova così per cancellare
ma poi se vuoi farlo solo una volta serve una variabile che registri che è già stato eliminato
`Sub controlla() If Weekday(Now) = 6 And Time > ("06:00:00") Then cancella End Sub`Il file lo apri tu o si deve aprire da solo ? nel secondo caso il vba non ti può aiutare, devi farlo dal sistema operativo.
Ciao Patel, lo aprirei io il file. Ma non sarei regolare. Potrei aprilo all orario impostato, come un giorno dopo. Dovrebbe ricordare che quel giorno deve cancellare quelle colonne. Ma solo una volta.
Grazie Oscar per la tua risposta. Cosi mi eliminerebbe sempre dopo le 6, ma non ricorderebbe che lo ha gia fatto.
Vi ringrazio per le vostre risposte.
Ciao Patel, lo aprirei io il file. Ma non sarei regolare. Potrei aprilo all orario impostato, come un giorno dopo. Dovrebbe ricordare che quel giorno deve cancellare quelle colonne. Ma solo una volta.
Se la vuoi eliminare anche il giorno dopo devi mettere >=6
Per eliminarlo una sola volta si può registrare la data di eliminazione in una cella libera , in modo che se trova la data di eliminazione non esegue la macro cancella
Poi da (Questa cartella di lavoro ) in automatico elimini la data il venerdì successivo
Vedi la modifica la data viene registrata nel foglio "FattBody" K2
La data viene eliminata il giorno successivo , ma prima del venerdi successivo non elimina più nulla
Nell'eliminazione della data devi mettere +1 come sotto altrimenti il giorno dopo elimina tutto
Private Sub Workbook_Open()
If Date + 1 > Foglio16.Range("K2") Then Foglio16.Range("K2") = ""
Call controlla
End SubAllegati:
You must be logged in to view attached files.Prova anche questa prova
Che poi nella prima prova è -1 che devi mettere non +1 , ho sbagliato io
Private Sub Workbook_Open()
If Date - 1 > Foglio16.Range("K2") Then Foglio16.Range("K2") = ""
Call controlla
End SubAllegati:
You must be logged in to view attached files.Ciao Oscar, ti ringrazio moltissimo per il tempo che mi hai dedicato a questo codice e a darmi una mano.
La data che inserisce nella cella K2, la mette in automatico la macro? o devo inserirla io? Lui metterà poi in automatico la data del venerdì, cancellando così solamente una volta e non tutte le volte giusto?
diventa tutto automatico.
saluti e grazie
Marco
Ciao Oscar, ti ringrazio moltissimo per il tempo che mi hai dedicato a questo codice e a darmi una mano.
La data che inserisce nella cella K2, la mette in automatico la macro? o devo inserirla io? Lui metterà poi in automatico la data del venerdì, cancellando così solamente una volta e non tutte le volte giusto?
diventa tutto automatico.
saluti e grazie
Marco
La data la mette in automatico quando si cancella al venerdì o il sabato , tu non devi fare nulla
Una volta cancellato mette la nuova data e non cancella più niente fino al venerdì successivo
Ciao a tutti
Sul mio PC (Domenica ore 22:15), MsgBox Weekday(Date) risponde 1=Lun
Con Weekday(Date, vbUseSystemDayOfWeek) risponde 7=DomConcordo con Oscar, bisogna scrivere una data da qualche parte=K2 . Forse (non sono certo) sarebbe meglio mettere la data della prossima esecuzione? Solo da provare...
Private Sub Workbook_Open() If Now > Sheets("FattBody").Range("K2") Then Call cancella Else DData = Sheets("FattBody").Range("K2") Application.OnTime DData, "cancella" End If End Sub '--------------- Public DData As Date Sub cancella() Sheets("FattBody").Columns("C:C").ClearContents Sheets("FattNeuro").Columns("C:C").ClearContents Sheets("FattSpinale").Columns("C:C").ClearContents If Weekday(Date, vbUseSystemDayOfWeek) = 1 Then DData = Date + 4 If Weekday(Date, vbUseSystemDayOfWeek) = 2 Then DData = Date + 3 If Weekday(Date, vbUseSystemDayOfWeek) = 3 Then DData = Date + 2 If Weekday(Date, vbUseSystemDayOfWeek) = 4 Then DData = Date + 1 If Weekday(Date, vbUseSystemDayOfWeek) = 5 Then DData = Date + 7 If Weekday(Date, vbUseSystemDayOfWeek) = 6 Then DData = Date + 6 If Weekday(Date, vbUseSystemDayOfWeek) = 7 Then DData = Date + 5 Sheets("FattBody").Range("K2") = DData + TimeValue("06:00:00") End SubSul mio PC (Domenica ore 22:15), MsgBox Weekday(Date) risponde 1=Lun Con Weekday(Date, vbUseSystemDayOfWeek) risponde 7=Dom
Ciao Raffaele
Certo anche il mio , ma non devi mettere Weekday(Date)
devi mettere Weekday(Now)
Che poi non capisco il perchè in realtà ci dovrebbe andare Weekday(Date)
Ciao Raffaele53/Oscar,
grazie mille per le vostre preziose risposte. quindi il codice di Raffaele53 dovrebbe essere così:
If Weekday(Now, vbUseSystemDayOfWeek) = 1 Then DData = Date + 4il "now" andrebbe solo nalla prima parte. Nel secondo +4 no. giusto? o anche Now + 4?
provo entrambi i codici e settimana prossima vi farò sapere se ha funzionato (ora devo aspettare fino a venerdì
).vi ringrazio molto e vi auguro una buona giornata!
Marco
Io lascerei >>>If Weekday(Date, vbUseSystemDayOfWeek)
Mi rimane un "dubbio"..., se nel caso il PC rimanesse accesso per più settimane?
Scusatemi mi è venuto in mente un'altro "dubbio"..., appena riesco Vi aggiorno
Personalmente proverei con Workbook_Open() + questa
Public DData As Date Sub cancella() Sheets("FattBody").Columns("C:C").ClearContents Sheets("FattNeuro").Columns("C:C").ClearContents Sheets("FattSpinale").Columns("C:C").ClearContents If Weekday(Date, vbUseSystemDayOfWeek) = 1 Then DData = Date + 4 If Weekday(Date, vbUseSystemDayOfWeek) = 2 Then DData = Date + 3 If Weekday(Date, vbUseSystemDayOfWeek) = 3 Then DData = Date + 2 If Weekday(Date, vbUseSystemDayOfWeek) = 4 Then DData = Date + 1 If Weekday(Date, vbUseSystemDayOfWeek) = 5 Then If Time < TimeValue("06:00:00") Then DData = Date + 0 Else DData = Date + 7 End If End If If Weekday(Date, vbUseSystemDayOfWeek) = 6 Then DData = Date + 6 If Weekday(Date, vbUseSystemDayOfWeek) = 7 Then DData = Date + 5 Sheets("FattBody").Range("K2") = DData + TimeValue("06:00:00") DData = Sheets("FattBody").Range("K2") Application.OnTime DData, "cancella" End Subciao a tutti,
ho potuto verificare il file venerdì e tutto ha funzionato alla perfezione. Ha registrato tutta la settimana, e venerdì ha azzerato cancellando i dati.
vi ringrazio molto dell'aiuto che mi avete date, e vi auguro una buona giornata!
a presto
Marco
-
AutoreArticoli
