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:
Kann mir jemand von Euch weiterhelfen?
Grüße,
BN
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 71366169766
Url: https://administrator.de/contentid/71366169766
Ausgedruckt am: 18.11.2024 um 23:11 Uhr
24 Kommentare
Neuester Kommentar
Mit Replace so
Oder zu Fuß so
🖖
Gruß sid.
ActiveDocument.Content.Find.Execute FindText:=":*auf", Forward:=True, ReplaceWith:="", Replace:=wdReplaceOne, MatchWildcards:=True
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.
Ja code einmal lesen und verstehen und Start und Endindex anpassen 😁
wird zu
Nr. 2 ist deine Hausaufgabe aber genauso schnell erledigt😁. Tipp: Variable "intEnd"
intStart = rngSearch.End - 1
intStart = rngSearch.End
Nr. 2 ist deine Hausaufgabe aber genauso schnell erledigt😁. Tipp: Variable "intEnd"
Ausprobieren ist nicht Sinn der Übung, sondern das Verständnis des Codes ... sobald du ihn verstehst weist du auch genau was zu tun ist . 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:
mit
Works as designed!
I'm out. 🖖
Mein Testergebnis mitdem was du uns hier "leider ohne Codetags" geliefert hast:
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. 🖖
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...Es soll halt so sein, dass hinter "Konto:" in die nächste Zeile umgebrochen wird.
Diese soll dann direkt vorne mit "DE" beginnen.
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
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:
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:
Nachher:
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.!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."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