Aktuelle Seite:
/vba/makrosdel.htm
Letzte Änderung: 24.06.2006

Getestet unter Word97Getestet unter Word2000  
Print
Module löschen

Das Löschen von Forms, Modulen oder Klassen zur Laufzeit aus einer Vorlage geht erfolgt direkt über die Angabe des Namens. Befindet sich z.B. das Modul Modul1 in der Dokumentvorlage normal.dot, kann es mit folgendem Aufruf gelöscht werden:

1    Sub Modullöschen()
2    With NormalTemplate.VBProject.VBComponents
3            .Remove .Item("Modul1")
4    End With 
5    End Sub

Achtung:
Das Modul o.a. wird direkt und ohne Sicherheitsabfrage gelöscht. Es wird auch nicht, wie beim manuellen Löschen in der IDE, erst ein export angeboten!

Dieser direkte Aufruf beinhaltet aber auch ein Risiko: Wird das Makro ein zweites mal aufgerufen oder stimmt der Modul-Name nicht, wird die Fehlermeldung 9 ("Index außerhalb des gültigen Bereichs") ausgegeben, da das angegebene Modul nicht mehr in der Liste der Module vorhanden ist.
Um Fehler zu vermeiden, sollte daher vor dem Löschen zuerst geprüft werden, ob das Modul, die Form oder die Klasse in der Dokumentvorlage vorhanden ist. Dieses kann nur mit einer Prüfung aller enthaltenen Komponenten (VBComponents) erreicht werden. Dazu wird eine Laufvariable i verwendet, die über alle Komponenten läuft. Der zu entfernde (Modul-)Name wird in der Variablen sName eingetragen. Nur wenn der Name gefunden wird, wird das Modul entfernt und anschließend die Suche beendet, da der Name eineindeutig ist.

1    Sub Modullöschen2()
2    Dim i As Integer 
3    Dim sName As String 
4    For i = 1 To NormalTemplate.VBProject.VBComponents.Count
5    sName = NormalTemplate.VBProject.VBComponents.Item(i).Name
6    If sName = "Modul1" Then 
7        With NormalTemplate.VBProject.VBComponents
8            .Remove .Item(sName)
9        End With 
10       Exit For 
11   End If 
12   Next i
13   End Sub 

Um Module aus anderen Dokumentvorlagen zu entfernen, müssen diese zusätzlich in einer For ... Each Schleife durchlaufen werden. Sofern aber der Name in mehreren Vorlagen verwendet wurde, wird dieses mit obigem Makro nur beim ersten Auffinden gelöscht; u.U. wird dann das falsche Modul gelöscht.


 www.chf-online.de/vba/makrosdel.htm © 2001-11 Christian Freßdorf (Zaphod-Systems)