Eliminación de macros desde dentro de una macro (Microsoft Excel)
Gene pidió una forma de eliminar macros desde dentro de una macro. Tiene una hoja de trabajo grande que usa macros para armar un orden de compra.
Como último paso, la macro elimina los datos originales que ya no son necesarios para la orden de compra finalizada. Este libro de trabajo reducido se guarda con un nuevo nombre. Gene necesita la macro, justo antes de guardar, para eliminar una macro que está almacenada en el controlador de eventos SelectionChange.
Hay un par de formas de manejar esto. Una forma es evitar tener que borrar todos juntos. En su lugar, haga que su macro cree un nuevo libro de trabajo y luego transfiera, a ese libro de trabajo, una copia de los datos que necesita. Luego, puede dividir y cortar los datos en el nuevo libro de trabajo y guardarlo como su orden de compra. Las macros del libro de trabajo existente nunca se copian en el nuevo libro de trabajo durante el proceso, por lo que no debe preocuparse por eliminarlas.
Copiar todas las hojas de trabajo del libro actual en un libro nuevo es muy fácil de hacer. La siguiente macro muestra cómo se hace:
Sub CopyThisWorkbook() Dim CopiedWB As String CopiedWB = "Copy of " & ActiveWorkbook.Name Sheets.Copy ActiveWorkbook.SaveAs Filename:=CopiedWB, _ FileFormat:=xlNormal End Sub
El método Copiar, cuando se aplica a la colección Hojas, copia todas las hojas del libro activo en un libro nuevo y activa el libro nuevo. El comando final guarda el nuevo libro de trabajo con un nuevo nombre.
Por supuesto, si necesita que algunas de sus macros estén en el nuevo libro de trabajo, pero no todas (como el controlador de eventos SelectionChange), probablemente sea mejor eliminar lo que no necesita y simplemente guardar en un nuevo nombre. La siguiente macro de ejemplo muestra cómo eliminar el controlador de eventos SelectionChange del código de la hoja de cálculo para 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
Una vez completada la macro, el libro de trabajo podría guardarse y la macro deseada no estará en el archivo guardado. Esta macro está adaptada de la información proporcionada en el sitio web de Chip Pearson, al que debe consultar si necesita información adicional sobre esta técnica:
http://www.cpearson.com/excel/vbe.aspx
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (3073) se aplica a Microsoft Excel 97, 2000, 2002 y 2003.