Positionsrahmen in Textfelder umwandeln oder entfernen
Textfelder (Shapes) in Word-Dokumenten ließen sich bis Word 2007 ü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 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.