Schreibbüro Richter

Positionsrahmen in Textfelder umwandeln oder entfernen

Textfelder (Shapes) in Word-Dokumenten ließen sich bis Word 2007 ü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 auch in Word 2016 bislang nicht vorhanden.

Alle Positionsrahmen in Textfelder umwandeln

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  
            

Alle Positionsrahmen aus dem Dokument entfernen

Positionsrahmen trifft man noch in Dokumenten an, die nach dem Einscannen von OCR-Software eingelesen wurden. Einige Konvertierungsprogramme fügen zahlreiche Positionsrahmen an allen möglichen und unmöglichen Stellen in das Dokument ein, die an sich für die Weiterverarbeitung des eingescannten Textes nicht benötigt werden, häufig auch kontraproduktiv sind. Dann kann man zum Rundumschlag auszuholen und zunächst alle Positionsrahmen aus dem Dokument entfernen. Der Text darin geht dabei nicht verloren, er bleibt an der Stelle, an der vorher der Positionsrahmen stand, erhalten, jetzt aber als normaler Text, so dass er vernünftig bearbeitet werden kann.

Dafür lässt sich das folgende kurze Makro verwenden:


Sub PositionsrahmenEntfernen()
' © Schreibbüro Nora Richter 2023 
' entfernt im Rundumschlag alle Positionsrahmen

    Dim myFrame As Word.Frame

    For Each myFrame In ActiveDocument.Frames
        myFrame.Delete
    Next

End Sub

So ordnen Sie einem Makro eine Schaltfläche auf einer Symbolleiste oder einen Shortcut zu: VBA-Code für Makro einbringen und verwenden.