Fehlermeldung in VB-Script

Guten Tag,

vielleicht weiß ja jemand Hilfe. In einem Forum fand ich folgendes Script (Makro löscht anderes Makro):

With ActiveWorkbook.VBProject
.VBComponents.Remove .VBComponents(„sollweg“)
End With

Doch es reagiert immer mit dieser Fehlermeldung:
Laufzeitfehler 9
Index außerhalb des gültigen Bereichs

Das zu löschende Makro „sollweg“ existiert in dieser Excelmappe.

Für einen guten Rat wäre sehr dankbar

Ludwig

With ActiveWorkbook.VBProject
.VBComponents.Remove .VBComponents(„sollweg“)
End With
Doch es reagiert immer mit dieser Fehlermeldung:
Laufzeitfehler 9
Index außerhalb des gültigen Bereichs

Das zu löschende Makro „sollweg“ existiert in dieser
Excelmappe.

Hi Ludwig,
wenn „sollweg“ ein Modul ist daß du über Einfügen Modul erzeugt hast, dann umbenannt, so klappt der Code problemlos.
Getestet auf XL2002.
Gruß
Reinhard

Hallo Reinhard,

kann es sein, dass ‚Einfügen - Modul‘ nicht dasselbe ist wie das Aufzeichnen eines neuen Makros?

PS. Hast du meine Mails nicht erhalten?

Gruß und Dank
Ludwig

Hallo Ludwig,

kann es sein, dass ‚Einfügen - Modul‘ nicht dasselbe ist wie
das Aufzeichnen eines neuen Makros?

Möglich ist in Excel alles, aber ich glaube das nicht. Ließe sich ja leicht austesteten die 3 Varianten Aufgezeichnetes makro, Eigefügtes makro, umbenanntes makro in beiden Fällen, an deinem Code zu testen.

PS. Hast du meine Mails nicht erhalten?

Doch, aber ich habe manchmal viel um die Ohren, dann bleibt manches liegen z.B. eine Rückantwort.
Aus technischen Gründen meinerseits müssen dir drei Dateien auf eine Diskette passen, allein deine eine mit 10 MB passt da nicht ganz rein.
Mit kleinen Beispieltabellen meine ich kleine Beispieltabellen.
Gruß
Reinhard

Gruß und Dank
Ludwig

Hallo Reinhard,

an deinem Code zu testen.

Hab ich ja mehrmals gemacht, und erhielt immer die besagte Fehlermeldung.

Mit kleinen Beispieltabellen meine ich kleine
Beispieltabellen.

Ich schick dir zwei, die natürlich mit dem Original dann gar nichts mehr zu tun haben, außer halt dass man „Makro-soll-Makro-löschen“ damit ausprobieren kann. OK?

Gruß und Dank
Ludwig

Hallo ihe Beide
Ich habe (Excel 2003) genau dasselbe Problem und kann es bisher auf keine Weise loesen. Das vorgegebene Beispiel ist bestimmt korrekt, da ich ganz aehnliche in Buechern gefunden habe. Aber niemand kann bis jetzt sagen, wo der Fehler liegt. Falls ihr das mit eurem „Direktkontakt“ loesen koennt, waere ich - und wohl auch andere - sehr daran interessiert.
Danke im Voraus
/Erich

.VBProject.VBComponents.Remove = Laufzeitfehler 9

Ich habe (Excel 2003) genau dasselbe Problem und kann es
bisher auf keine Weise loesen. Das vorgegebene Beispiel ist
bestimmt korrekt, da ich ganz aehnliche in Buechern gefunden
habe. Aber niemand kann bis jetzt sagen, wo der Fehler liegt.
Falls ihr das mit eurem „Direktkontakt“ loesen koennt, waere
ich - und wohl auch andere - sehr daran interessiert.

Hallo Erich,

Sub tt()
With ActiveWorkbook.VBProject
 .VBComponents.Remove .VBComponents("sollweg")
End With
End Sub

habe ich eben in einer neuen leeren Datei in XL2002 (2003 habe ich zuhause) getestet, läuft problemlos.
Bei dir nicht?
Anders gefragt, passiert das bei allen Dateien oder nur bei manchen.

Kann es sein daß, warum auch immer die versteckte personl.xls das aktive Workbook ist und dort es dannn kein Modul „sollweg“ gibt was dann zum Fehler führt?
Ah, Idee, könnte man ja im Code durch Msgbox activeworkbook.name abchecken.
Gruß
Reinhard

Gruß
Reinhard

Hallo Ludwig, hallo Reinhard,

Ich habe (Excel 2003) genau dasselbe Problem und kann es
bisher auf keine Weise loesen. Das vorgegebene Beispiel ist
bestimmt korrekt, da ich ganz aehnliche in Buechern gefunden
habe. Aber niemand kann bis jetzt sagen, wo der Fehler liegt.
Falls ihr das mit eurem „Direktkontakt“ loesen koennt, waere
ich - und wohl auch andere - sehr daran interessiert.

Hallo Erich,

Sub tt()
With ActiveWorkbook.VBProject
.VBComponents.Remove .VBComponents(„sollweg“)
End With
End Sub

habe ich eben in einer neuen leeren Datei in XL2002 (2003 habe
ich zuhause) getestet, läuft problemlos.
Bei dir nicht?
Anders gefragt, passiert das bei allen Dateien oder nur bei
manchen.

Das Löschen eines vollständigen Moduls mit Namen „loesch_mich“
in der gleichen Mappe (löscht sich selbst) funktioniert mit:

Sub Modulloeschen()
With Application.VBE.ActiveVBProject
.VBComponents.Remove .VBComponents("loesch\_mich")
End With
End Sub

oder in einer anderen Mappe, z.Bsp der Datei „test.xls“
funktioniert mit:

Sub ein\_bestimmtes\_modul\_loeschen()
With Workbooks("test.xls").VBProject
.VBComponents.Remove .VBComponents("loesch\_mich")
End With
End Sub

wenn in Excel unter ->Extras, Makro, Sicherheit…,
Reiter->vertrauenswürdige Quellen die Option Zugriff auf
VB Projekte vertrauen
aktiviert wurde :wink:
Gruß
Marion

wenn in Excel unter ->Extras, Makro, Sicherheit…,
Reiter->vertrauenswürdige Quellen die Option Zugriff auf
VB Projekte vertrauen
aktiviert wurde :wink:

Hallo Marion,
ja, das stimmt, aber wenn da das Häkchen weg ist, kommt Fehler 1004,
Methode VB-Projekt für das Workbook ist fehlgeschlagen o.ä.
Lieben Gruß
Reinhard

ja, stimmt aber im Angangsposting steht folgendes:

vielleicht weiß ja jemand Hilfe. In einem Forum fand ich folgendes :Script (Makro löscht anderes Makro):

With ActiveWorkbook.VBProject
.VBComponents.Remove .VBComponents(„sollweg“)
End With

Doch es reagiert immer mit dieser Fehlermeldung:
Laufzeitfehler 9
Index außerhalb des gültigen Bereichs

Das zu löschende Makro „sollweg“ existiert in dieser Excelmappe.

Dieser Fehler tritt auf, wenn es kein Modul (nicht Makro) mit diesem Namen gibt.

Ich denke, dass Ludwig in einem Modul mit mir unbekannten Namen ein Makro (er sschreibt: script) mit dem Namen "sollweg hat. Wenn das so ist, taucht genau dieser Fehler

Laufzeitfehler '9': Index außerhalb des gültigen Bereichs

auf
Gruß
Marion

‚lichtaufgeh‘
Hallo Marion
Du hast den schwachen Punkt genau getroffen und kannst bestimmt auch weiter helfen!
Ich habe angenommen, es handle sich darum, ein bestimmtes MAKRO zu loeschen; das gibt dann genau die Fehlermeldung, die sowohl der Autor als ich bekamen!
Jetzt sind wir sehend geworden, dabei enststehen jedoch gleich die naechsten Fragen:

  1. Kann ich ein einzelnes Makro loeschen? Wie? (Irgendwie erinnere ich mich, dass das „zeilenweise“ erfolgen muss ?!?)
  2. Kann ich alle Module nach einem bestimmten Makro absuchen?

Aargs
Lesen sollte man können :frowning:

Hallo Marion,
klar, ich hatte den Denkfehler ein Modul „sollweg“ zu löschen und nicht ein Makro sollweg() in irgendeinme Modul zu löschen.
Von daher meine Antworten.
Aber Ludwigs Antworten bestärkten mich darin daß es darum ging/geht ein Modul zu löschen.
Auf die Idee daß er ein Makro sollweg meint kam ich irgendwie nicht und weiß aber auch grad nicht ob er doch ein Modul meint.

@Erich, zu deinen beiden Fragen ein Ja.

Lieben Gruß
Reinhard

Hallo, ihr mehr-als-ich-Wissenden,

offenbar hab ich ungewollt Verwirrung gestiftet: Modul/Makro/Script. Zerknirscht gestehe ich ein, dass ich in bester Absicht immer dasselbe damit meinte:

Ich will ein betimmtes Makro per Makro verschwinden lassen. Wie, ist mir eigentlich egal. Reinhard weiß schon, was ich meine, aber für die anderen:

Es gibt eine Exceldatei „Obermappe.xls“. Diese soll ein Makro enthalten (Name z.B. „hau_das_makro_sollweg_weg“), das in einer anderen Exceldatei namens „Untermappe.xls“ dort ein bestimmtes Makro namens „sollweg“ löschen soll.

Wenn ich das gebacken kriege, mit eurer lieben Hilfe, dann, ja dann wär ich direkt ein glücklicher Mensch.

Dank und Gruß
Ludwig

und vergeesen zu sagen:
Danke und beste Gruesse
Erich

Hallo Ludwig,

leider bin ich noch nicht so fit in vba

aber ich habe aufgrund eures Hinweises zum Zeilenweisen Löschen ein wenig probiert.

Ich will ein betimmtes Makro per Makro verschwinden lassen.

Wie, ist mir eigentlich egal. Reinhard weiß schon, was ich
meine, aber für die anderen:

Es gibt eine Exceldatei „Obermappe.xls“. Diese soll ein Makro
enthalten (Name z.B. „hau_das_makro_sollweg_weg“), das in
einer anderen Exceldatei namens „Untermappe.xls“ dort ein
bestimmtes Makro namens „sollweg“ löschen soll.

Wenn ich das gebacken kriege, mit eurer lieben Hilfe, dann, ja
dann wär ich direkt ein glücklicher Mensch.

Ich weiß nicht, ob es euch wirklich weiter hilft. Mit der folgenden Prozedure kann man in einem Modul (hier Modul2) in der Mappe „test.xls“ die Zeilen 1 bis 10 löschen, wo bei 1 die Startzeile ist und die 10 die Anzahl der zu löschenden Zeilen. Man muss also wissen, in welchen Zeilen steht der zu korrigierende Code.

Sub code\_loeschen()
With Workbooks("test.xls").VBProject
.VBComponents("Modul2").CodeModule.DeleteLines 1, 10
End With
End Sub

funktioniert

Allerdings wäre ich sehr skeptisch, vielleicht ist in einem der 28 Module einmal eine Zeile mehr im code - was dann?

Ich würde bei der Lösung des Problems vielleicht auch über andere Wege nachdenken. Wenn tatsächlich alle Module in den einzelnen Programmversionen den gleichen Aufbau und Inhalt haben, … vielleicht wäre ein gangbarer Weg, ein Modul stellvertretend so zu bearbeiten, wie du es dir vorstellst, dann aus allen Versionen das zu korrigierende Modul zu entfernen (wir wissen jetzt wie das funktioniert) und anschließend das überarbeitete Modul in alle Versionen einzufügen

Gruß
Marion

Hallo Marion,

das ist lieb von dir, dass du dich meldest. Ich hatte schon die Besorgnis, ich würde gar nichts mehr hören zum Thema.

In Kurzfassung, worum es geht:
a) Es sind 28 gleichartige Excelmappen (Englisch-Vokabeln).
b) Von jeder einzelnen gibt eine Lehrerversion (mit Makros)
und eine Schülerversion, die ganz ohne Makros auskommen könnte.
c) Wenn ich an der Excelmappe (die ziemlich viel „kann“) etwas ändere,
mache ich diese Änderung immer in der Nr. 1 dieser 28.
d) Anschließend wird diese Änderung durch ein ganzes System von
Nakros und „Untermakros“ auf die übrigen 2x27 übertragen. Dabei müssen die individuellen Daten (Englischvokabeln: Wortpaar, Beispielsatzpaar, Lautschrift, ergänzende Hinweise) natürlich immer erhalten und von der Vorgänger-Excel-Mappe in die upgedatete hinübergerettet werden.

Im Laufe dieser ganzen Kettenraktion von Makros will ich künftig eines mit einbeziehen, das in der Schülerversion entweder alle Makros löscht oder aber wenigstens das eine, das ein Passwort enthält.

Und dies muss natürlich jedesmal wieder erneut funktionieren, wenn ich was geändert habe. Sonst wäre es ja ein halbwegs vertretbarer Aufwand, „mal schnell“ 28 Makros manuell zu löschen. Aber morgen und übermorgen wieder? Aus der upgedateten Lehrerversion wird also 28 mal jeweils wieder aufs neue auch eine upgedatete Schülerversion abgeleitet. Und jedesmal könnten aus jener die Makros (per Makro) entfernt werden.

Damit die ganze Makro-Kettenraktion abläuft, gibt es eine extra Datei, die nur dazu da ist, die Makros nacheinander aufzurufen. Und in diese „Shell“ hinein würde ich das seit langem gesuchte Makro einbauen: Wunsch: Ein Makro in Excelmappe A löscht ein Makro in Excelmappe B ohne Fehlermeldung …

Kannst du mir jetzt vielleicht noch besser weiterhelfen? Das wäre sehr lieb.

Danke und Gruß
Ludwig

d) Anschließend wird diese Änderung durch ein ganzes System
von
Nakros und „Untermakros“ auf die übrigen 2x27 übertragen.
Dabei müssen die individuellen Daten (Englischvokabeln:
Wortpaar, Beispielsatzpaar, Lautschrift, ergänzende Hinweise)
natürlich immer erhalten und von der Vorgänger-Excel-Mappe in
die upgedatete hinübergerettet werden.

Hallo Ludwig,
okay, wie man Makroprozeduren aufgrund ihres Namens in beliebigen Dateien/Mappen löscht, das löse ich, hab halt das noch nicht gemacht.
Oder wie man sie einfügt, alles lösbar, das kriege ich hin.
Hatte noch keine Zeit/Lust dafür. Sorry.
Jetzt verstehe ich da nicht was da „gerettet“ werden soll.
Das ist irgendwie was Neues in Bezug auf die Ausgangsfrage.
Und grundsätzlich hänge ich noch immer am Verstehensproblem, warum du in 28 Dateien Makros hereinschreiben willst, die dann ggfs. ausführen lassen willst und sie dann löschen willst.
Geht doch auch mit einem „OberMakro“ in der „Oberdatei“

Gruß
Reinhard *grübelnd*

Im Laufe dieser ganzen Kettenraktion von Makros will ich
künftig eines mit einbeziehen, das in der Schülerversion
entweder alle Makros löscht oder aber wenigstens das eine, das
ein Passwort enthält.

Und dies muss natürlich jedesmal wieder erneut funktionieren,
wenn ich was geändert habe. Sonst wäre es ja ein halbwegs
vertretbarer Aufwand, „mal schnell“ 28 Makros manuell zu
löschen. Aber morgen und übermorgen wieder? Aus der
upgedateten Lehrerversion wird also 28 mal jeweils wieder aufs
neue auch eine upgedatete Schülerversion abgeleitet. Und
jedesmal könnten aus jener die Makros (per Makro) entfernt
werden.

Damit die ganze Makro-Kettenraktion abläuft, gibt es eine
extra Datei, die nur dazu da ist, die Makros nacheinander
aufzurufen. Und in diese „Shell“ hinein würde ich das seit
langem gesuchte Makro einbauen: Wunsch: Ein Makro in
Excelmappe A löscht ein Makro in Excelmappe B ohne
Fehlermeldung …

Kannst du mir jetzt vielleicht noch besser weiterhelfen? Das
wäre sehr lieb.

Danke und Gruß
Ludwig

Hall Reinhard,

okay, wie man Makroprozeduren aufgrund ihres Namens in
beliebigen Dateien/Mappen löscht, das löse ich, hab halt das
noch nicht gemacht.
Oder wie man sie einfügt, alles lösbar, das kriege ich hin.
Hatte noch keine Zeit/Lust dafür. Sorry.

Dann wart ich eben noch 'n bisschen …

Jetzt verstehe ich da nicht was da „gerettet“ werden soll.
Das ist irgendwie was Neues in Bezug auf die Ausgangsfrage.

a) Was „gerettet“ bzw. erhalten werden muss, sind die ganzen Vokabeln.
b) Das hat aber mit „unserem“ Problem nichts zu tun. Kannst du also vergessen.

Und grundsätzlich hänge ich noch immer am Verstehensproblem,
warum du in 28 Dateien Makros hereinschreiben willst, die dann
ggfs. ausführen lassen willst und sie dann löschen willst.

Es gibt, wie ich Marion schrieb, 28 Lehrerversionen und 28 Schülerversionen. Die Lehrerversionen sind jeweils die Basis für die Schülerversionen. Dh. heißt, diverse Makros in der Lehrerversionen erstellen daraus jeweils die zugehörige Schülerversion. Drum müssen die makros in der L-Version drin sein. Und drum könnne sie aus der (daraus erstellten) S-Version entfernt werden.

Geht doch auch mit einem „OberMakro“ in der „Oberdatei“

Ja, lieber Reinhard, natürlich, und das schrieb ich ja auch immer wieder in w-w-w und in meine Mails rein.

Ist’s jetzt besser verständlich ausgedrückt? Ich hoffe und wünsche es, bevor wir mit diesem Dialog in w-w-w unten rausrutschen.

Gruß
Ludwig

Juhu - gelöst
Ein netter Mensch in einem Forum hatte die Lösung - und die funktioniert!

Public Sub LoescheModule()
With Workbooks(„DeineVorlage.xls“)
With .VBProject.VBComponents
.Remove .Item(„Modul3“)
.Remove .Item(„Modul4“)
End With
End With
End Sub

Danke für alle Hilfsangebote,
Ludwig

Hallo Ludwig,

Ein netter Mensch in einem Forum hatte die Lösung - und die
funktioniert!

Public Sub LoescheModule()
With Workbooks(„DeineVorlage.xls“)
With .VBProject.VBComponents
.Remove .Item(„Modul3“)
.Remove .Item(„Modul4“)
End With
End With
End Sub

Danke für alle Hilfsangebote,

gern, aber diese Lösung hatten wir doch schon *glaub*
oder gibt einen Unterschied zu

oder in einer anderen Mappe, z.Bsp der Datei „test.xls“
funktioniert mit:

Sub ein_bestimmtes_modul_loeschen()
With Workbooks(„test.xls“).VBProject
.VBComponents.Remove .VBComponents(„loesch_mich“)
End With
End Sub

(aus meinem Post vom 20.07.07). Beide löschen ein vollständiges Modul. Aber dann nach neuer Verständigung dachte ich, es geht darum eine Prozedur in einem Modul zu löschen *irritiert*.

Aber vielleicht gibt es außer der ein klein wenig anderen Ausdrucksweise doch einen gravierenden Unterschied. Da ich noch nicht so fit bin, würd ich mich riesig freuen, wenn du oder jemand anders mir erklären könnte, warum das eine geht und das andere nicht. Der Name des Moduls („loesch_mich“ oder „Modul3“ bzw. „Modul4“) ist doch nur beispielhaft und sollte ja nicht der Grund sein.

Lieben Gruß
Marion