vorrei imparare questa quisquilia.
Questa macro:
- Codice: Seleziona tutto
Sub AggPROD()
Dim LastB As Long
Application.ScreenUpdating = False
With ThisWorkbook
.Unprotect Password:="pippo"
With .Sheets("PRODUZIONE") '<<<
.Unprotect Password:="pippo"
LastB = .Cells(.Rows.Count, "B").End(xlUp).Row
'Copia formule:
.Range("M2:P2").Copy .Range(.Range("M3"), .Range("M" & LastB))
'Copia valori:
.Range(.Range("M3"), .Range("P" & LastB)).Copy
.Range("M3").PasteSpecial xlPasteValues
Application.CutCopyMode = False
.Protect Password:="pippo"
End With
.Protect Password:="pippo"
End With
Application.ScreenUpdating = True
ThisWorkbook.Save
MsgBox "Aggiornamento effettuato"
End Sub
viene lanciata in due momenti diversi. La prima volta ad orario prefissati:
- Codice: Seleziona tutto
Private Sub Workbook_Open()
Application.OnTime TimeValue("06:20"), "AggPROD"
Application.OnTime TimeValue("14:20"), "AggPROD"
Application.OnTime TimeValue("22:20"), "AggPROD"
End Sub
La seconda volta prima di chiudere il file:
- Codice: Seleziona tutto
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call AggPROD
ThisWorkbook.Close
End Sub
Ma in questo ultimo caso vorrei che non si attivasse l'ultima riga dello script:
- Codice: Seleziona tutto
MsgBox "Aggiornamento effettuato"
Ovviamente anche con le mie basse conoscenze, sono conscio che mi basterebbe creare un nuovo script (es. aggPROD2") senza quest'ultima riga. Ma mi piacerebbe comunque capire ed imparare un pezzettino di qualcosa di nuovo.
Riassumendo vorrei che durante l'esecuzione della macro si tenesse conto del momento di avvio della stessa ( da script "timer "attivato all'apertura del file o da "Workbook_BeforeClose").
Sperando di essere stato chiaro, vi ringrazio anticipatamente.