Gene fragte nach einer Möglichkeit, Makros aus einem Makro zu löschen. Er hat ein großes Arbeitsblatt, das Makros verwendet, um eine purchase order zusammenzustellen.

Im letzten Schritt löscht das Makro die Originaldaten, die für die fertige Bestellung nicht mehr benötigt werden. Diese reduzierte Arbeitsmappe wird dann unter einem neuen Namen gespeichert. Gene benötigt das Makro unmittelbar vor dem Speichern, um ein Makro zu löschen, das im SelectionChange-Ereignishandler gespeichert ist.

Es gibt verschiedene Möglichkeiten, wie dies gehandhabt werden kann. Eine Möglichkeit besteht darin, zu vermeiden, dass alle Löschvorgänge zusammen ausgeführt werden müssen. Lassen Sie Ihr Makro stattdessen eine neue Arbeitsmappe erstellen und dann eine Kopie der benötigten Daten in diese Arbeitsmappe übertragen. Sie können dann die Daten in der neuen Arbeitsmappe in Scheiben schneiden und in Würfel schneiden und als Bestellung speichern. Die Makros in der vorhandenen Arbeitsmappe werden während des Vorgangs nie in die neue Arbeitsmappe kopiert, sodass Sie sich keine Gedanken über das Löschen machen müssen.

Das Kopieren aller Arbeitsblätter in der aktuellen Arbeitsmappe in eine neue Arbeitsmappe ist sehr einfach. Das folgende Makro zeigt, wie es gemacht wird:

Sub CopyThisWorkbook()

Dim CopiedWB As String

CopiedWB = "Copy of " & ActiveWorkbook.Name

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

Wenn die Kopiermethode auf die Sheets-Auflistung angewendet wird, werden alle Arbeitsblätter in der aktiven Arbeitsmappe in eine neue Arbeitsmappe kopiert und die neue Arbeitsmappe aktiviert. Der letzte Befehl speichert die neue Arbeitsmappe unter einem neuen Namen.

Wenn Sie einige Ihrer Makros in der neuen Arbeitsmappe benötigen, aber nicht alle (z. B. den SelectionChange-Ereignishandler), sollten Sie wahrscheinlich das löschen, was Sie nicht benötigen, und einfach unter einer neuen speichern Name. Das folgende Beispielmakro zeigt, wie der SelectionChange-Ereignishandler aus dem Arbeitsblattcode für Sheet1 gelöscht wird.

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

Nach Abschluss des Makros kann die Arbeitsmappe gespeichert werden, und das gewünschte Makro befindet sich nicht in der gespeicherten Datei. Dieses Makro basiert auf Informationen auf der Website von Chip Pearson, auf die Sie verweisen sollten, wenn Sie zusätzliche Informationen zu dieser Technik benötigen:

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

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (3073) gilt für Microsoft Excel 97, 2000, 2002 und 2003.