Hallo Reinhard,
gleich wieder zuerst danke für deine viele Mühe mit mir.
bei mir war es die Lösung. Zumindest die für die Fehlermeldung
beim Set VBE Befehl.
Bei mir auch. Nur kam dann die nächste Fehlermeldung, wie beschrieben.
Ich verstehe da nun nicht daß man da 28 gleichartige
Untermakros braucht.
Ich versuch’s zu erklären.
Es geht um englische Vokabeln, für jede Lektion ab Klasse 6 bis Klasse 10 je eine Excelmappe. Macht 28. Alle diese Excel-Arbeitsmappen müssen technisch immer identisch sein, nur die Vokabeln sind natürlich jeweils andere.
Änderungen an der Exceldatei mache immer an einer ganz bestimmten. Was ich dort ändere, wird per Makros auf die übrigen 27 übertragen. Dabei müssen die Vokabeln, insgesamt sind es über 10.000 Einträge, natürlich erhalten bleiben.
(Warum 10 000 Datensätze?
a) engl. Stichwort in internat. Lautschrift
b) engl. Stichwort
c) dt. Stichwort dazu
d) engl. Beispielsatz/Anwendungsbeispiel
e) dessen dt. Übersetzung
f) (ggf. Hinweise, Lernhilfen)
(a) bis (e) ist jeweils ein Datensatz mit bis zu 6 Einträgen.
Dies zusammen ergibt bei den 28 Dateien diese besagten über 10.000 Einträge. Die sind in Jahren gereift und unersetzbar.
Die eine Datei - nennen wir sie Mutterdatei - heißt
H3U1-voc.xls
(H=Hauptschule, 3= Band 3 = 7. Schuljahr, U = Unit=Lektion, 1 =Unit 1=erste Lektion)
Analog sind die übrigen 27 Dateien benamst.
Will ich nun an der Excel-Mappe-Struktur etwas ändern, so geschieht dies also immer und nur an H3U1-voc.xls. Diese Änderung wird alsdann durch ein System von Makros auf die übrigen 27 Dateien übertragen.
Zu diesem Zweck gibt e noch eine extra Datei, die nichts anderers tut, als die Ober-Makros zu enthalten und ablaufen zu lassen. Ober-Makros heißt: In Modulen programmierte Abläufe, die, weil Excel eine seltsame Dateigrößenbegrenzung für Makros hat, in kleinere Einzelschritte (Makros) zerlegt sind. Sie laufen modulartig eins nach dem anderen ab. Dazu starten sie eine Vokabeldatei nach der anderen, rufen dort bestimmte lokale Makros auf, speichern die bearbeitete Version und rufen dann die nächste Vokabeldatei auf. Bis alle 28 auf dem Stand von H3U1-voc.xls sind.
Nun ist die komplette Lehrerversion 28 mal fertig. Nun wird aus jeder von ihnen eine abgespeckte und entsprechend eingerichtete Schülerversion erstellt, ebenfalls 28 mal, und ebenfalls per Makros und (lokalen) Untermakros. „H3U1-vocTrainer.xls“ usw. dient dann zum Ausdrucken der Datensätze (machen die Kids selber in der Schule) und zum Lernen am Bildschirm als Vokabeltrainer - heiß begehrt.
Damit die einzelnen Makros laufen, musste ich lernen, dass da Spielregeln einzuhalten sind:
Ich will ja nicht 28 Dateien einzeln öffnen, mehrere Makros starten, und dann wieder schließen (mit Speichern unter), und dann die nächste.
Also gibt es die Oberdatei, die das Obermakro (in Stufen) ablaufen lässt. Diese dient also als Shell, das heißt, sie bleibt während der geamten Prozedur geöffnet. Nur so kann man per Makro andere Exceldateien öffnen, bearbeiten lassen, speichern und auch umbenennen.
Ich lasse jetzt weg, dass es noch komplexer abläuft, weil ich ja die ganzen Vokabeln erhalten muss, vorübergehend „parken“, dann die neue Version erst leer erstellen, dann die Vokabeldatensätze wieder hervorholen und in die neue Mappe einkopieren …
Wenn du noch mehr dazu erfahren willst, frag mich.
Das fragliche und noch fehlerbehaftete Makro „Makro_löschen“
sucht nach dem zu löschenden Makro
„Vokabeltrainer_vorbereiten“ und behauptet zuletzt in der
MsgBox, es finde das gesuchte Makro nicht, obwohl dieses
(also: „Vokabeltrainer_vorbereiten“) in der Liste der
verfügbaren Makros auftaucht und auch tatsächlich vorhanden
ist.
Wo steht „Vokabeltrainer_vorbereiten“, in der obergeordneten
Datei oder in jeweils den 28 anderen Dateien, in welchem Modul
dort.
„Vokabeltrainer_vorbereiten“ ist ein lokales Makro, das heißt, es ist in jeder der 28 Daten enthalten und ruft seinerseits wieder mehrere Unter-Untermakros auf. Da es, deinem Tipp zufolge, auch das per Unter-Unter-Makro eingefügte Kennwort zum Schutz einer Seite enthält, will ich dieses Makro „Vokabeltrainer_vorbereiten“ nach Gebrauch in der Vokabeltrainerversion überall automatisch löschen lassen.
So viel zum Grundsätzlichen.
Wie ist der Code von „Makro_löschen“, ist es exakt dieser:
Sub Makro_löschen()
Dim FoundFlag As Boolean
Dim Zeilen()
Makroname = „Löschmich“
Suchtext = "Sub " & Makroname & „()“
Set VBE = Application.VBE.ActiveCodePane.CodeModule
FoundFlag = False
With VBE
For x = 1 To .CountOfLines
'MsgBox .Lines(x, 1)
If UCase(.Lines(x, 1)) = UCase(Suchtext) Then
FoundFlag = True
If FoundFlag Then
Zähler = Zähler + 1
ReDim Preserve Zeilen(Zähler)
Zeilen(Zähler) = x
If .Lines(x, 1) = „End Sub“ Then
.DeleteLines Zeilen(1), UBound(Zeilen)
Exit For
End If
End If
Next x
If Not FoundFlag Then MsgBox „Makro " & Makroname & _
" nicht gefunden !“, vbCritical
End With
End Sub
Ich hatte das so einkopiert, wie du es mir geschickt hattest. Nur den Namen des zu löschenden Makros „Vokabeltrainer_vorbereiten“ statt „löschmich“ habe ich natürlich einkopiert.
Denn dieser funktioniert schon problemlos und löscht ein Makro
was „Löschmich“ heißt, allerdings nur wenn es im gleichen
Modul wie
„Makro_löschen“ steht.
Stimmt, manuell gestartet hat’s geklappt. Doch per Obermakro von der Shell aus aufgerufen aufgerufen: Fehlermeldung! Obwohl eine ganze Reihe anderer Makros auf genau dieselbe Art problemlos aufgerufen werden und bestens laufen.
Man muß das Makro also nur so umschreiben, daß es auf alle
Module, odr wenn der Modulnam efest sit auf dieseen, zugreift
und dort nach „Löschmich“ sucht und dann löscht.
Was mir (in der Schüler-Vokabeltrainer-Version) genauso oder noch mehr willkommen wäre: alle darin enthaltenen Makros zu löschen. Die Sch. brauchen sie nicht, der Koll. Administrator hat zudem eh alle Makromöglichkeiten verhindert (und weiß warum). Das heißt: Alle Makros komplett weg wär auch eine willkommene Möglichkeit, wenn es ginge.
Deinen Google-Tipp will ich auch noch beherzigen.
Und schon mal ganz herzlichen Dank für deine Hilfe und das Angebot.
Ludwig