Aktualisierung VBE
02.02.2004 12:48:36
Bernd
Durch eine Excel-VBA-Routine werden in einer anderen (offenen) Excel-Datei, die durch "Programmdatei" referenziert wird, mit
(1. Schleife)
For Each Blatt In Programmdatei.Sheets
hier bestimmte Aktionen durchführen
Next Blatt
bestimmte Aktionen ausgeführt. Dann werden Blätter, die einem bestimmten Kriterium entsprechen, durch folgende Anweisungen gelöscht:
(2. Schleife)
For Each Blatt In Programmdatei.Sheets
If Kriterium=TRUE _
Then
Blatt.Delete
End If
Next Blatt
Dies funktioniert problemlos.
Danach sollen Aktionen mit den VB-Komponenten des VB-Projekts von "Programmdatei" durchgeführt werden
(3. Schleife)
Set VBA_Projekt = Application.VBE.VBProjects(Programmdatei.VBProject.Name)
For Each Komponente In VBA_Projekt.VBComponents
hier bestimmte Aktionen ausführen
Next Komponente
Dies läuft auf misteriöse Fehler. Bei Analyse stellt man fest, daß im VBA-Editor auch nach dem Löschen der Blätter diese offenbar noch als VB-Komponenten existieren und angezeigt werden. Dadurch greift man in der 3. Schleife mit
For Each Komponente In VBA_Projekt.VBComponents
offenbar auf eigentlich nicht mehr exisierende Komponenten/Blätter? zu, was natürlich seltsame Fehler hervorrufen kann.
Verblüffenderweise funktioniert der Code jedoch völlig einwandfrei, wenn man ihn im Einzelschrittmodus ausführt. Dann wird nämlich (genau wie man auch erwarten sollte) nach jedem
Blatt.Delete
die entsprechende VB-Kompnente auch aus dem Projektfenster des VBA-Editors entfernt. Dieses "Phenomen" tritt aber überhaupt nur dann auf, wenn man vor der zweiten Schleife (z. B. in der 1. Schleife) auf die Blätter der Auflistung explizit zugegriffen hat (z. B. durch msgbox(Blatt.Name)). Die VB-Komponenten aller Blätter, auf die man nicht zugegriffen hat, werden auch ohne Einzelschrittmodus einwandfrei aus dem Projektfenster des VBA-Editors entfernt.