Gene ha chiesto un modo per eliminare le macro dall’interno di una macro. Ha un grande foglio di lavoro che utilizza le macro per creare un purchase order.

Come ultimo passaggio, la macro elimina i dati originali che non sono più necessari per l’ordine di acquisto finito. Questa cartella di lavoro ridotta viene quindi salvata con un nuovo nome. Gene necessita della macro, subito prima del salvataggio, per eliminare una macro archiviata nel gestore di eventi SelectionChange.

Ci sono un paio di modi in cui questo potrebbe essere gestito. Un modo è evitare di dover fare l’eliminazione tutti insieme. Invece, fai in modo che la tua macro crei una nuova cartella di lavoro e quindi trasferisca, in quella cartella di lavoro, una copia dei dati necessari. È quindi possibile suddividere i dati nella nuova cartella di lavoro e salvarli come ordine di acquisto. Le macro nella cartella di lavoro esistente non vengono mai copiate nella nuova cartella di lavoro durante il processo, quindi non devi preoccuparti di eliminarle.

Copiare tutti i fogli di lavoro nella cartella di lavoro corrente in una nuova cartella di lavoro è molto semplice. La seguente macro mostra come si fa:

Sub CopyThisWorkbook()

Dim CopiedWB As String

CopiedWB = "Copy of " & ActiveWorkbook.Name

Sheets.Copy     ActiveWorkbook.SaveAs Filename:=CopiedWB, _       FileFormat:=xlNormal End Sub

Il metodo Copia, quando applicato alla raccolta Fogli, copia tutti i fogli di lavoro nella cartella di lavoro attiva in una nuova cartella di lavoro e rende attiva la nuova cartella di lavoro. Il comando finale salva la nuova cartella di lavoro con un nuovo nome.

Ovviamente, se hai bisogno che alcune delle tue macro si trovino nella nuova cartella di lavoro, ma non tutte (come il gestore di eventi SelectionChange), allora probabilmente è meglio eliminare ciò che non ti serve e semplicemente salvare con un nuovo nome. La macro di esempio seguente mostra come eliminare il gestore di eventi SelectionChange dal codice del foglio di lavoro per Sheet1.

Sub DeleteProcedure()

Dim VBCodeMod As CodeModule     Dim StartLine As Long     Dim HowManyLines As Long

Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("Sheet1").CodeModule     With VBCodeMod         StartLine = .ProcStartLine("Worksheet_SelectionChange", _           vbext_pk_Proc)

HowManyLines = .ProcCountLines("Worksheet_SelectionChange", _           vbext_pk_Proc)

.DeleteLines StartLine, HowManyLines     End With End Sub

Dopo che la macro è stata completata, la cartella di lavoro potrebbe essere salvata e la macro desiderata non sarà nel file salvato. Questa macro è adattata dalle informazioni fornite sul sito Web di Chip Pearson, a cui dovresti fare riferimento se hai bisogno di ulteriori informazioni su questa tecnica:

http://www.cpearson.com/excel/vbe.aspx

_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 (3073) si applica a Microsoft Excel 97, 2000, 2002 e 2003.