bn2023
Goto Top

VBA-Makro in Word funktioniert nicht

Guten Tag,

ich habe ein VBA-Makro in Word geschrieben (Office 365).
Darin will ich einfach nur 1,5 Zeilen in einem Text markieren und dann löschen lassen.
Ich habe schon viele Makros erstellt, aber dieses funktioniert nicht.

So habe ich es gemacht:
Ich habe in Word also "Makro aufzeichnen" gewählt, dann diese 1,5 Zeilen Text markiert und dann per Entf.-Taste gelöscht. Dann die Makro-Aufzeichnung beendet.

Ergebnis ist das hier:
Sub txt()
'  
' txt Makro  
'  
'  
    Selection.Delete Unit:=wdCharacter, Count:=1
End Sub

Kann mir jemand von Euch weiterhelfen?

Grüße,
BN

Content-Key: 71366169766

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

Printed on: April 27, 2024 at 23:04 o'clock

Member: godlie
godlie Oct 06, 2023 at 10:57:46 (UTC)
Goto Top
Hallo,

wo ist jetzt dein Problem? In der Anwendung des Markos oder in der Ausführung?

grüße
Member: BN2023
BN2023 Oct 06, 2023 at 11:01:33 (UTC)
Goto Top
Danke für die schnelle Antwort.

Nun... wenn ich dieses Makro nun ausführe, passiert einfach nichts!
Der Text steht weiterhin dort.

Grüße,
BN
Member: godlie
godlie Oct 06, 2023 at 11:05:10 (UTC)
Goto Top
Der Text muss ausgewählt werden, damit etwas ersetzt wird, dass Makro wird nur auf den ausgewählten Text angewendet
Member: kpunkt
kpunkt Oct 06, 2023 at 11:11:04 (UTC)
Goto Top
Da steht "Selection.Delete"
Was wurde denn ausgewählt?
Member: BN2023
BN2023 Oct 06, 2023 at 11:18:17 (UTC)
Goto Top
Hmmm... vielleicht mache ich ja auch einen Denkfehler.
Ich hatte bei Erstellung des Makros ja den Text markiert und dann gelöscht.
Nun dachte ich, dass sich das Makro quasi diesen Text auch merkt.

Ansonsten könnte ich es ja mit "Selection.Find.Replacement.ClearFormatting" machen.
Aber der Inhalt dieser 1,5 Zeilen Text ändert sich immer wieder in jedem neuen Dokument. Er steht halt immer nur an der gleichen Stelle und soll halt gelöscht werden.

Wie kann ich das denn ansonsten umsetzen... bzw. geht das überhaupt?

Grüße,
BN
Member: BN2023
BN2023 Oct 06, 2023 at 11:22:34 (UTC)
Goto Top
Ich gebe mal ein Beispiel:

Im Worddokument steht...


Die Überweisung erfolgt ab Mitte November auf das Konto:
Max Mustermann:
- Sonderzuwendung, 60,00 € auf DE123123456456789 bei der SPARKASSE FULDA


Und gelöscht werden soll alles nach dem Doppelpunkt nach "Konto" bis einschließlich des Wortes "auf" for der IBAN.

Vielleicht wird es jetzt besser verständlich face-wink

Grüße,
BN
Member: kpunkt
kpunkt Oct 06, 2023 at 11:26:08 (UTC)
Goto Top
Was genau verstehst du übrigens unter "1,5 Zeilen Text"?
Tipp Makrorekorder:
Selection.Find.Execute FindText:="Text", ReplaceWith:="", Forward:=True, Wrap:=wdFindContinue, Replace:=wdReplaceAll  
Mitglied: 7907292512
Solution 7907292512 Oct 06, 2023 updated at 13:27:53 (UTC)
Goto Top
Mit Replace so
ActiveDocument.Content.Find.Execute FindText:=":*auf", Forward:=True, ReplaceWith:="", Replace:=wdReplaceOne, MatchWildcards:=True  
Oder zu Fuß so
Dim rngSearch As Range, intStart As Integer, intEnd As Integer
Set rngSearch = ActiveDocument.Content
rngSearch.Find.Execute FindText:="Konto:", Forward:=True  
If rngSearch.Find.Found Then
    intStart = rngSearch.End - 1
    Set rngSearch = ActiveDocument.Content
    rngSearch.Find.Execute FindText:="auf DE"  
    If rngSearch.Find.Found Then
        intEnd = rngSearch.Start + 4
        ActiveDocument.Range(intStart, intEnd).Delete
    End If
End If
🖖
Gruß sid.
Member: BN2023
BN2023 Oct 09, 2023 updated at 08:26:30 (UTC)
Goto Top
Danke Dir @7907292512 für den Code.

Er funktioniert zu 98% auch...
Nur wird bei der Umsetzung

1) der Doppelpunkt hinter "Konto" mit entfernt
2) vor dem DE von der IBAN wird eine zusätzliche Leerstelle eingefügt.

Sieht jetzt so aus:
Die Überweisung erfolgt ab Mitte November auf das Konto
 DE123123456456789 bei der SPARKASSE FULDA

Hast Du noch einen Tipp, wie ich das anpassen kann?

Danke und Grüße,
BN
Mitglied: 7907292512
7907292512 Oct 09, 2023 updated at 08:45:46 (UTC)
Goto Top
Ja code einmal lesen und verstehen und Start und Endindex anpassen 😁
intStart = rngSearch.End - 1
wird zu
intStart = rngSearch.End

Nr. 2 ist deine Hausaufgabe aber genauso schnell erledigt😁. Tipp: Variable "intEnd"
Member: BN2023
BN2023 Oct 09, 2023 updated at 09:31:25 (UTC)
Goto Top
Hallo @7907292512 und danke für die Tipps.

Ich habe es jetzt bei der Variable "intEnd" versucht mit:
+ 5
+ 3
+ 2
+ 4 - 1

...aber Alles ist noch keine Lösung für die eine Leerstelle vor "DE........."

Bräuchte vielleicht noch nen kleinen Tipp face-wink

Grüße,
BN
Mitglied: 7907292512
7907292512 Oct 09, 2023 updated at 09:54:46 (UTC)
Goto Top
Ausprobieren ist nicht Sinn der Übung, sondern das Verständnis des Codes ... sobald du ihn verstehst weist du auch genau was zu tun ist face-wink. Also nicht dumm in der Gegend rum probieren sondern die grauen Zellen in Wallung bringen.

Mein Testergebnis mitdem was du uns hier "leider ohne Codetags" geliefert hast:

screenshot

mit
Sub RemoveText()
    Dim rngSearch As Range, intStart As Integer, intEnd As Integer
    Set rngSearch = ActiveDocument.Content
    rngSearch.Find.Execute FindText:="Konto:", Forward:=True  
    If rngSearch.Find.Found Then
        intStart = rngSearch.End
        Set rngSearch = ActiveDocument.Content
        rngSearch.Find.Execute FindText:="auf DE"  
        If rngSearch.Find.Found Then
            intEnd = rngSearch.Start + 3
            ActiveDocument.Range(intStart, intEnd).Delete
        End If
    End If
End Sub

Works as designed!

I'm out. 🖖
Member: BN2023
BN2023 Oct 09, 2023 at 09:46:23 (UTC)
Goto Top
Danke Dir... aber ich muss zu meiner Entschuldigung sagen, dass ich mich mit Code so überhaupt nicht auskenne. Daher wußte ich auch nicht wirklich, was ich sonst noch probieren sollte.

Das mit + 3 hatte ich ja auch schon versucht...
Es soll halt so sein, dass hinter "Konto:" in die nächste Zeile umgebrochen wird.
Diese soll dann direkt vorne mit "DE" beginnen.

Ich teste jetzt nochmal mit Deinem kompletten Code, den Du eben gepostet hast.

Danke bis dahin.

Grüße,
BN
Mitglied: 7907292512
7907292512 Oct 09, 2023 updated at 09:51:41 (UTC)
Goto Top
Zitat von @BN2023:
Es soll halt so sein, dass hinter "Konto:" in die nächste Zeile umgebrochen wird.
Diese soll dann direkt vorne mit "DE" beginnen.
Das stand bisher nirgendwo...
Ich zitiere:
Und gelöscht werden soll alles nach dem Doppelpunkt nach "Konto" bis einschließlich des Wortes "auf" for der IBAN.
Lässt sich aber leicht einfügen.
https://learn.microsoft.com/de-de/office/vba/api/word.range.insertafter
Member: BN2023
BN2023 Oct 09, 2023 at 09:50:43 (UTC)
Goto Top
UPDATE:
Das Leerzeichen ist leider noch immer vor dem "DE" in der neuen Zeile.
Umgebrochen wird die Zeile jedoch!!

Grüße,
BN
Mitglied: 7907292512
7907292512 Oct 09, 2023 at 09:52:51 (UTC)
Goto Top
Tja es gilt das was ich oben schon geschrieben habe wir haben hier nur das was du uns lieferst

Mein Testergebnis mitdem was du uns hier "leider ohne Codetags" geliefert hast:
Mitglied: 7907292512
Solution 7907292512 Oct 09, 2023 updated at 09:56:16 (UTC)
Goto Top
Sub RemoveText()
    Dim rngSearch As Range, intStart As Integer, intEnd As Integer
    Set rngSearch = ActiveDocument.Content
    rngSearch.Find.Execute FindText:="Konto:", Forward:=True  
    If rngSearch.Find.Found Then
        intStart = rngSearch.End + 1
        Set rngSearch = ActiveDocument.Content
        rngSearch.Find.Execute FindText:="auf DE"  
        If rngSearch.Find.Found Then
            intEnd = rngSearch.Start + 3
            ActiveDocument.Range(intStart, intEnd).Delete
        End If
    End If
End Sub

Vorher:

screenshot

Nachher:

screenshot
Member: BN2023
BN2023 Oct 09, 2023 updated at 09:57:17 (UTC)
Goto Top
...ok, danke, werde ich gleich mal testen.

Grüße,
BN
Mitglied: 7907292512
7907292512 Oct 09, 2023 updated at 09:57:51 (UTC)
Goto Top
s. Mein Ergebnis im letzten Kommentar!

Im Moment ist das der vollständige Code:
Du verstehst nicht, ich meine nicht den Code sondern den Original Text in Codetags wegen Sonderzeichen etc.!
Member: BN2023
BN2023 Oct 09, 2023 updated at 10:00:52 (UTC)
Goto Top
yessssssssss, das hat funktioniert face-wink

Danke Dir.
Es lag also nur an dem + 1 hinter dem "rngSearch.End". Also eine Leerstelle, die am Anfang der neuen Zeile gelöscht werden soll? Verstehe ich das so richtig?

Grüße,
BN


"Original Text in Codetags" hätte ich jetzt auch nicht wirklich gewußt, was Du damit meinst. Aber funktioniert ja jetzt!! face-smile
Mitglied: 7907292512
7907292512 Oct 09, 2023 updated at 10:03:01 (UTC)
Goto Top
Also eine Leerstelle, die am Anfang der neuen Zeile gelöscht werden soll? Verstehe ich das so richtig?
Nein, Zeilenumbrüche zählen auch als Zeichen., somit wird der Zeilenumbruch nicht gelöscht und bleibt erhalten.
Member: BN2023
BN2023 Oct 09, 2023 at 10:01:19 (UTC)
Goto Top
ah ok, das verstehe ich.

Grüße,
BN
Mitglied: 7907292512
7907292512 Oct 09, 2023 updated at 10:08:38 (UTC)
Goto Top
"Original Text in Codetags" hätte ich jetzt auch nicht wirklich gewußt, was Du damit meinst.

Damit meinte ich den Teil hier, da beim pasten als normaler Forums-Text eventuelle Sonderzeichen (Tabs, etc.)verloren gehen, wenn man ihn dagegen in Code-Tags einbettet bleiben diese erhalten. Das ist essentiell wenn man auf sämtliche Zeichen im Original als Programmierer angewiesen ist.
Die Überweisung erfolgt ab Mitte November auf das Konto:
Max Mustermann:
- Sonderzuwendung, 60,00 € auf DE123123456456789 bei der SPARKASSE FULDA
Member: BN2023
BN2023 Oct 09, 2023 at 10:08:34 (UTC)
Goto Top
OK und danke für den weiteren Hinweis.
Werde ich in Zukunft bei ähnlichen Fragen so machen!

Danke für die Hilfe und Grüße,
BN