Textfelder (Shapes) in Word-Dokumenten lassen sich über den Dialog Format – Textfeld – Register: Textfeld – Zu Positionsrahmen umwandeln leicht in Positionsrahmen (Frames) umwandeln und als solche weiterverwenden. Der umgekehrte Weg, einen Positionsrahmen (Frame) in ein Textfeld (Shape) umzuwandeln, ist in Word bislang nicht vorhanden.
Dafür kann man die folgende Prozedur verwenden, die alle im Dokument vorhandenen Positionsrahmen in Textfelder umwandelt. Die in den Positionsrahmen enthaltenen Texte werden dabei über die Zwischenablage in die Textfelder übertragen. Die Prozedur überträgt »genau« oder »mindestens« festgelegte Maße der Positionsrahmen. Steht die Höhe oder die Breite des Positionsrahmen allerdings auf »Automatisch«, kann kein Maß ausgelesen werden. In dem Fall wird das Maß geändert und muss nach dem Umwandeln wieder angepasst werden.
Sub PosRahmenInTextfeldUmwandeln()
' © Schreibbüro Nora Richter 2008-2010
' wandelt alle Positionsrahmen eines Dokuments in Textfelder um
Dim myFrame As Word.Frame
Dim myTF As Word.Shape
Dim lLeft As Long, lwidth As Long, ltop As Long, lheight As Long
Dim bRahmen As Boolean
Dim lRahmen As Long
Dim rng As Word.Range
Dim lngAbsatz As Long
For Each myFrame In ActiveDocument.Frames
bRahmen = False
Set rng = ActiveDocument.Range(Start:=ActiveDocument.Range.Start, _
End:=myFrame.Range.Start)
lngAbsatz = rng.Paragraphs.Count
If myFrame.HeightRule = wdFrameAuto Then
myFrame.HeightRule = wdFrameExact
End If
If myFrame.WidthRule = wdFrameAuto Then
myFrame.WidthRule = wdFrameExact
End If
With myFrame
lLeft = .HorizontalPosition
ltop = .VerticalPosition
lwidth = .Width
Debug.Print lwidth
If lwidth = -1 Then
lwidth = CentimetersToPoints(300)
End If
lheight = .Height
If lheight = -1 Then
lheight = CentimetersToPoints(300)
End If
If .Borders.Enable Then
bRahmen = True
lRahmen = .Borders.OutsideLineStyle
.Borders.Enable = False
End If
.Range.FormattedText.Copy
.Range.Delete
.Delete
End With
Set myTF = ActiveDocument.Shapes.AddTextbox(msoTextOrientationHorizontal, _
lLeft, ltop, lwidth, lheight, ActiveDocument.Paragraphs(lngAbsatz).Range)
With myTF.TextFrame
.TextRange.Collapse
.TextRange.PasteSpecial
.MarginLeft = 0#
.MarginRight = 0#
.MarginTop = 0#
.MarginBottom = 0#
End With
If bRahmen Then
myTF.Line.DashStyle = lRahmen
Else
myTF.Line.Visible = msoFalse
End If
Set myTF = Nothing
Next myFrame
End Sub
So ordnen Sie dem Makro eine Schaltfläche auf einer Symbolleiste oder einen Shortcut zu: → Tutorial: VBA-Code für Makro einbringen und verwenden.