Positionsrahmen in Textfelder umwandeln

Textfelder (Shapes) in Word-Dokumenten lassen sich über den Dialog FormatTextfeld – Register: TextfeldZu 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.

Schreibbüro Richter, Georg-Schumann-Str. 8, 04105 Leipzig, Tel.: (03 41) 59 008 95