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 in cui questo compito può essere affrontato. Innanzitutto, potresti scrivere una macro che funzioni solo prima di una data specifica, nel modo seguente:

Sub MyMacro()



ExpirationDate = #6/1/2013#     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 giugno 2013, verrà eseguito il corpo principale della macro. Se è il 1 ° giugno 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 >= #6/1/2013# 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 giugno 2013, 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 alla successiva apertura della 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 (3123) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: