VBA Makro: Wort in Klammern setzen

Hallo,
in einem Wordtext sollen etliche Worte über ein Makro in Doppelklammern gesetzt werden. Ich habe ein kleines Makro erstellt:

Sub Makro1()

’ Makro_Doppelklammer
’ Makro aufgezeichnet am 01.09.2008 von www.digital-learnware.de

Selection.MoveLeft Unit:=wdWord, Count:=1
Selection.TypeText Text:="("
Selection.MoveRight Unit:=wdWord, Count:=1
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.TypeText Text:=")"
End Sub

Da beim Sprung nach rechts ein Leerfeld eingeschlossen wird, springe ich anschließend ein Feld zurück.
Aber das Problem steckt im Detail:

  • Ist das Wort am Zeilenende (also OHNE nachfolgendes Leerfeld) darf ich nicht zurückspringen.
  • Ein weiteres Problem ist aufgetaucht, wenn das „Wort“ nur aus einem Zeichen besteht und vor Makroaufruf der Cursor mal vor, mal hinter dem Zeichen gesetzt wird oder wenn das Zeichen das einzige Zeichen in der Zeile ist.
    Wie kann ich das Makro ändern, so dass Leerfelder erkannt und nicht berücksichtigt werden?

Viele Grüße aus Mainz
Hans-Jürgen

Sub Klammern()
If Selection.End - Selection.Start = 0 Then Exit Sub
Selection.InsertBefore Chr$(40)
If Selection.Characters.Last.Text = " " Then _
Selection.MoveEnd wdCharacter, -1
Selection.InsertAfter Chr$(41)
Selection.Collapse wdCollapseEnd

End Sub

Versuche es mal damit.

Gruß Lisa

in einem Wordtext sollen etliche Worte über ein Makro in
Doppelklammern gesetzt werden. Ich habe ein kleines Makro
erstellt:

Hi Hans-Jürgen,

so vielleicht:

Sub Ersetz1()
With ActiveDocument.Sections(1)
 .Range = Replace(.Range, "abc", "(abc)", , , vbTextCompare)
End With
End Sub

Gruß
Reinhard

Hallo Lisa, hallo Reinhard,

da habe ich mich wohl schlecht ausgedrückt. Der Anwender entscheidet, welche Worte er in Klammern setzen will. Diese kenne ich zur Zeit der Makroerstellung nicht. Sie stehen auch noch nicht in Klammern.

Beispiel:
Originaltext: Peter ist 4 Jahre alt und kann schwimmen
Möglichkeit1: (Peter) ist 4 Jahre alt und kann schwimmen
Möglichkeit2: Peter ist (4) Jahre alt und kann schwimmen
Möglichkeit3: Peter ist 4 (Jahre) alt und kann (schwimmen)
usw.

Bei der Ziffer 4 weiß ich aber nicht, ob der Anwender den Cursor vor oder hinter der 4 positioniert hat, wenn er das Makro aufruft.
Es kann, wie gesagt, auch sein, dass die 4 als einziges Zeichen in einer Zeile steht.

Viele Grüße
meiner Einer

Nachfrage

Originaltext: Peter ist 4 Jahre alt und kann schwimmen
Möglichkeit1: (Peter) ist 4 Jahre alt und kann schwimmen
Möglichkeit2: Peter ist (4) Jahre alt und kann schwimmen
Möglichkeit3: Peter ist 4 (Jahre) alt und kann (schwimmen)

Hallo,

angenommen, hinter schwimmen wäre ein Punkt, wie soll das dann aussehen:

(schwimmen). oder (schwimmen.)

Gruß
Reinhard

Sub Makrotest()
Selection.Expand Unit:=wdWord
Selection.InsertBefore Chr$(40)
If Selection.Characters.Last.Text = " " Then _
Selection.MoveEnd wdCharacter, -1
Selection.InsertAfter Chr$(41)
Selection.Collapse wdCollapseEnd
End Sub

probiere es mal so
Gruß Lisa

Gibts das „Replace“ nicht erst in den neueren Word-Versionen?

LG

Gibts das „Replace“ nicht erst in den neueren Word-Versionen?

LG

Hallo Tobias,

weiß ich grad nicht, ab Word 2000 gibt es das.

Gruß
Reinhard

Hallo Reinhard,
deine Überlegung ist sehr folgerichtig. Da aber der Anwender den Text erstellt, weiß das Makro auch nicht, was der Punkt bedeutet:

  • ein Teil eines Wortes (V2.0 ./. 1.23 usw.) oder
  • das Satzendezeichen
    Deshalb möchte ich bei Sonderzeichen keine wordabweichende Regelung setzen.
    Soweit ich es beurteilen kann, sieht Word beim Springen Sonderzeichen als neues Wort an.
    Lisas Code arbeitet zu 99,9% zufriedenstellend. Damit kann ich leben. Ich werde ihn übernehmen.

Hallo Lisa,
ich konnte nur einen Fall finden, wo die Klammern falsch gesetzt werden: Wenn das Wort aus einem Zeichen besteht und als einziges in eine Zeile steht und der Cursor hinter das Zeichen gesetzt ist, bevor das Makro aufgerufen wird.
Aber, wie gesagt, es ist unwahrscheinlich, dass der Anwender ein einzelnes Zeichen in einer Zeile schreibt, so dass dein Code DIE LÖSUNG ist.
Vielen vielen Dank.

el Mainzo

möglich, wissen aber auch nicht was der Eröffner für eine Version hat :smile:

Lg

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]