Macro con eliminazione automatica (Microsoft Excel)
Patrick sta scrivendo una macro e desidera che la macro si elimini da sola dopo che è stata raggiunta una data di scadenza specifica. Ci sono un paio di modi per affrontare questo compito. Innanzitutto, potresti scrivere una macro che funzioni solo prima di una data specifica, nel modo seguente:
Sub MyMacro() ExpirationDate = #1/1/2020# If Now() < ExpirationDate Then 'Rest of macro goes here End if End Sub
L’idea è che se (in questo caso) la data corrente è precedente al 1 gennaio 2020, verrà eseguito il corpo principale della macro. Se è il 1 ° gennaio o successivo, la macro non verrà eseguita. Questo approccio, ovviamente, non elimina effettivamente la macro; controlla semplicemente che la macro venga eseguita prima di una certa data.
Per sbarazzarsi effettivamente del codice macro, è necessario adottare un approccio diverso:
Private Sub Workbook_Open() Dim VBComp As VBIDE.VBComponent Dim VBComps As VBIDE.VBComponents 'Delete if Past Date If Date >= #1/1/2020# Then Set VBComps = ActiveWorkbook.VBProject.VBComponents For Each VBComp In VBComps Select Case VBComp.Type Case vbext_ct_StdModule, vbext_ct_MSForm, _ vbext_ct_ClassModule VBComps.Remove VBComp Case Else With VBComp.CodeModule .DeleteLines 1, .CountOfLines End With End Select Next VBComp End If Set VBComps = Nothing Set VBComp = Nothing End Sub
Questo codice è stato adattato da una macro originariamente scritta da Chip Pearson, disponibile sul suo sito al seguente indirizzo:
http://www.cpearson.com/excel/vbe.aspx
Per far funzionare la macro, è necessario assicurarsi che sia presente un riferimento a Microsoft Visual Basic, Applications Extensibility. (Puoi farlo scegliendo, nell’editor VB, Strumenti | Riferimenti e quindi scegliendo Estendibilità Microsoft Visual Basic for Applications nei riferimenti disponibili.)
La macro viene eseguita all’apertura della cartella di lavoro e, se la data è maggiore o uguale al 1 gennaio 2020, ogni componente di VBProject viene eliminato. Ciò significa che la macro è molto potente, perché cancella tutto, non solo una singola procedura o modulo.
Ci sono un paio di cose da tenere a mente con questa macro, ovviamente.
Innanzitutto, se l’utente sceglie di non abilitare le macro all’apertura della cartella di lavoro, questo codice non verrà mai eseguito e la macro non verrà eliminata.
In secondo luogo, l’eliminazione delle macro in questo modo introduce ovviamente modifiche alla cartella di lavoro. Ciò significa che quando la cartella di lavoro viene chiusa, all’utente verrà chiesto se desidera salvare le modifiche. Se scelgono di non farlo, le eliminazioni non verranno salvate e la macro verrà eseguita nuovamente la prossima volta che viene aperta la cartella di lavoro.
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (12812) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per la vecchia interfaccia del menu di Excel qui: