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?
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
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.
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:
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
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.