Slette makroer innenfra en makro

December 24  by Eliza

Gene bedt om en måte å slette makroer innenfra en makro. Han har et stort regneark som bruker makroer for å sette sammen en innkjøpsordre. Som det siste trinn, sletter makro den opprinnelige data som ikke lenger er nødvendig for den ferdige innkjøpsordre. Dette avskrellede arbeidsbok blir lagret under et nytt navn. Gene trenger makro, like før lagring, for å slette en makro som er lagret i endre hendelsesbehandling.

Det er et par måter at dette kan håndteres. En måte er å unngå å måtte gjøre slettingen alle sammen. I stedet har makroen opprette en ny arbeidsbok og deretter overføre, til at arbeidsbok, en kopi av dataene du trenger. Deretter kan du dele opp dataene i den nye arbeidsboken og lagre det som din bestilling. Makroene i den eksisterende arbeidsbok blir aldri kopiert til den nye arbeidsboken under prosessen, slik at du ikke trenger å bekymre deg for å slette dem.

Kopiering alle regnearkene i den gjeldende arbeidsboken til en ny arbeidsbok er veldig enkelt å gjøre. Følgende makro viser hvordan det gjøres:

Sub CopyThisWorkbook ()
Dim CopiedWB As String

CopiedWB = "Kopi av" & ActiveWorkbook.Name

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

Kopi metoden, når den brukes til Sheets samling, kopierer alle regnearkene i den aktive arbeidsboken til en ny arbeidsbok og gjør den nye arbeidsboken aktiv. Den endelige kommandoen lagrer den nye arbeidsboken under et nytt navn.

Selvfølgelig, hvis du trenger noen av dine makroer for å være i den nye arbeidsboken, men ikke alle av dem (for eksempel endre hendelsesbehandling), så er du sannsynligvis best å slette det du ikke trenger, og bare lagre under et nytt navn. Følgende eksempel makro viser hvordan du sletter endre hendelseshåndterer fra regnearket kode for Ark1.

Sub DeleteProcedure ()
Dim VBCodeMod Som CodeModule
Dim startline så lenge
Dim HowManyLines As Long

Satt VBCodeMod = ThisWorkbook.VBProject.VBComponents ("Ark1"). CodeModule
Med VBCodeMod
Startlinjen = .ProcStartLine ("Worksheet_SelectionChange", _
vbext_pk_Proc)
HowManyLines = .ProcCountLines ("Worksheet_SelectionChange", _
vbext_pk_Proc)
.DeleteLines Startlinjen, HowManyLines
Avslutt med
End Sub

Etter at makro er fullført, kan arbeidsboken lagres, og ønsket makro vil ikke være i den lagrede filen. Denne makroen er tilpasset fra opplysninger gitt på Chip Pearson nettsted, som du bør referere hvis du trenger mer informasjon om denne teknikken:

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

ExcelTips er din kilde for kostnadseffektiv Microsoft Excel trening. Dette tipset (3073) gjelder for Microsoft Excel 97, 2000, 2002, og 2003.