37414
Goto Top

2 fast gleiche VBA-Makros - eines funktioniert, das andere bringt eine Fehlermeldung

Hallo,

ich habe heute 2 fast gleiche VBA-Makros für Word 2016 erstellt.
Mit dem Makro "Kind" soll der Text "Ihr Kind / Ihre Kinder" ersetzt werden durch "Ihr Kind".
Mit dem Makro "Kinder" soll der Text "Ihr Kind / Ihre Kinder" ersetzt werden durch "Ihre Kinder".

Soweit... so gut...

Dann habe ich die beiden Makros in Word über "Menüband anpassen / Makros" in eine neue Gruppe unter START eingefügt (wie mehrere andere Makros auch schon).
Dort habe ich beide Makros dann umbenannt in "Kind" und "Kinder" und ihnen ein Icon verpaßt.

In meinem Word erscheinen die beiden Icons mit den beiden Makros jetzt im Reiter START.

Nun zum Problem:
Führe ich das Makro "Kinder" über das entsprechende Icon im Word-Menü aus, funktioniert alles einwandfrei. Mehrere Einträge werden korrekt ersetzt.
Führe ich jedoch das Makro "Kind" vom Word-Menü aus aus, erhalte ich eine Fehlermeldung (siehe Screenshot):

xxx

Seltsamer Weise funktioniert dieses Makro "Kind" aber problemlos, wenn ich es über das Word-Menü "Ansicht / Makros" manuell ausführe.

Hier mal der Code der beiden Makros:

Sub Kind()
'  
' Kind Makro  
' Der Eintrag "Ihr Kind / Ihre Kinder" wird ersetzt durch "Ihr Kind"  
'  
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "Ihr Kind / Ihre Kinder"  
        .Replacement.Text = "Ihr Kind"  
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

---------------------------

Sub Kinder()
'  
' Kinder Makro  
' Der Eintrag "Ihr Kind / Ihre Kinder" wird ersetzt durch "Ihre Kinder"  
'  
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "Ihr Kind / Ihre Kinder"  
        .Replacement.Text = "Ihre Kinder"  
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Habt Ihr eine Idee, woran das Problem beim ausführen über die Menüband-Registerkarten im Word-Menü liegen könnte?
Wie gesagt... grds. funktionieren beide Makros.

Danke und Gruß,
imebro

Content-Key: 510605

Url: https://administrator.de/contentid/510605

Printed on: April 26, 2024 at 12:04 o'clock

Member: godlie
godlie Oct 31, 2019 at 14:03:51 (UTC)
Goto Top
Hallo,

ich glaube das du deine Selection verlierst wenn du es über das Menü ausführst, bzw. kann es sein das du nichts Selektiert hast wenn du es über das Menü aurufst?
Mitglied: 37414
37414 Oct 31, 2019 at 14:10:15 (UTC)
Goto Top
Hallo und danke für die schnelle Antwort.

Nein... denn, wie ja oben schon geschrieben, funktioniert ja eines der beiden Makros auch, wenn ich es über das Icon in der Word-Menüleiste ausführe.

Und das Makro, welches über das Icon in der Word-Menüleiste die Fehlermeldung bringt, läßt sich auch problemlos ausführen, wenn ich es manuell starte (also über "Ansicht / Makros / ausführen").

Gruß,
imebro
Mitglied: 141575
141575 Oct 31, 2019 updated at 14:52:54 (UTC)
Goto Top
Benenne das Makro um, Kind ist ein reservierter Modulname.

screenshot
Mitglied: 37414
37414 Oct 31, 2019 at 14:53:14 (UTC)
Goto Top
OK... aber wieso funktioniert das Makro "Kind" denn dann, wenn ich es manuell ausführe (also über "Ansicht / Makros / ausführen")?

Werde es aber mal mit einem anderen Namen versuchen.

LG
imebro
Mitglied: 141575
141575 Oct 31, 2019 updated at 14:57:04 (UTC)
Goto Top
Zitat von @37414:

OK... aber wieso funktioniert das Makro "Kind" denn dann, wenn ich es manuell ausführe (also über "Ansicht / Makros / ausführen")?
MS Feature, wie so oft, je nach Kontext leitet Word da wohl von einer Klasse ab oder nicht. Wenn du den Namen brauchst, erstelle eine neue Klasse darin kannst du mit Namen schalten und walten wie du willst...
Mitglied: 37414
37414 Oct 31, 2019 at 17:17:39 (UTC)
Goto Top
Danke Dir @141575

Aber... wie erstelle ich eine neue Klasse darin? Bin nicht so der VBA-Spezialist. Ab und zu mal ein Makro, das ist es schon was ich so mache face-wink

Gruß,
imebro
Mitglied: 141575
Solution 141575 Oct 31, 2019 updated at 17:24:42 (UTC)
Goto Top
Zitat von @37414:
Aber... wie erstelle ich eine neue Klasse darin? Bin nicht so der VBA-Spezialist. Ab und zu mal ein Makro, das ist es schon was ich so mache face-wink
Brauchst du hier ja nicht zwingend, und wäre für dich auch Overkill, da du hier ja frei in der Wahl bist gebe den Sub's andere Namen und feddich!

Dir hier jetzt OO Programmierung von Grund auf beizubringen würde echt zu weit führen, das kannst du dir auf einschlägigen Seiten aneignen. face-wink
https://excelmacromastery.com/vba-class-modules/
Mitglied: 37414
37414 Oct 31, 2019 at 18:07:01 (UTC)
Goto Top
Danke Dir / Euch.

Werde dann am Montag beide Scripts einfach entsprechend anders benennen und gut iss.
In den Word-Optionen bei "Menüband anpassen" kann ich doch dann die Namen wie gehabt wieder vergeben. Es reicht doch, wenn ich die Namen IM Script ändere... oder?

Danke und Gruß,
imebro
Mitglied: 141575
141575 Oct 31, 2019 updated at 18:10:33 (UTC)
Goto Top
Zitat von @37414:
In den Word-Optionen bei "Menüband anpassen" kann ich doch dann die Namen wie gehabt wieder vergeben. Es reicht doch, wenn ich die Namen IM Script ändere... oder?
Wenn du den Namen der Prozedur im Code änderst musst du auch den Symbolleisten-Eintrag anpassen, denn der verweist ja noch auf die Prozedur mit dem alten Namen. Die Bezeichnung in der Symbolleiste ist unabhängig davon, der Name des Makros auf das der Eintrag verweist jedoch nicht.
Mitglied: 37414
37414 Oct 31, 2019 at 18:12:34 (UTC)
Goto Top
OK, habe ich verstanden.
Danke nochmals

Gruß,
imebro