hallo phil
If Selection.Range.InRange(Box.TextFrame.TextRange)
Sowas in der Art hatte ich auch schon, nur leider überprüfte
der Code nur den Text in dem Textfeld. Es kann aber vorkommen,
dass in mehreren (oder allen) Textfeldern das selbe steht. Man
müsste das Textfeld also anhand seines Namen oder Index
identifizieren. Leider wird scheinbar nichts in der Richtung
in ‚Selection‘ übergeben.
???
ich verstehe dein problem nicht ganz. ursprünglich hast du geschrieben, dass du automatisiert feststellen willst, in welcher textbox der cursor gerade steht. mein makro geht zuerst alle shapes im dokument durch. wenn es eine textbox ist, prüft es ob der aktuelle cursor in der textbox drinnen ist. wenn auch das der fall ist, hast du eine eindeutige referenz auf die textbox in der variable „Box“. für das beispiel habe ich mal nur den namen der textbox ausgegeben - du kannst aber auch alles andere damit machen. welcher text in der textbox drinnensteht, ist völlig irrelevant: die ranges in word-objekten geben nur textpositionen an, die textinhalte werden indirekt über die positionen ermittelt. mein makro funktioniert also zuverlässig, auch wenn in allen 20 textboxen haargenau der selbe inhalt drinnen ist.
hier mal das makro nochmal als funktion, damit das klarer wird:
Function getActiveTextbox() As Shape
Dim Box As Shape
Set getActiveTextbox = Nothing
For Each Box In ActiveDocument.Shapes
If Box.Type = msoTextBox Then
If Selection.Range.InRange(Box.TextFrame.TextRange) Then
Set getActiveTextbox = Box
End If
End If
Next
End Function
diese funktion liefert nun eine eindeutige referenz auf genau die eine textbox zurück.
dass dann dein programm möglicherweise mit der textbox nichts mehr anfangen kann, weil die boxen alle gleich sind und du sie nicht unterscheiden kannst, ist ein anderes problem. aber das hättest du auf jeden fall - auch wenn word eine entsprechende funktion anbieten würde.
ist nun alles klar oder habe ich was falsch verstanden?
lg
erwin