Hallo Martin,
ja, die Beobachtung trifft zu. Wenn die Höhe des Positionsrahmens auf
"Automatisch" steht, kann die Höhe nicht ausgelesen werden. VBA liest dann
den Wert "-1" aus, was die Fehlermeldung auslöst.
Als Workaround könnte man die Höhe (und falls die Breite auf automatisch
steht, auch die Breite) auf Genau setzen. Damit ändert sich allerdings die
Breite und die Höhe. Den Standort könnte man halbwegs festmachen.
Probier mal bitte diese Variante:
Sub PosRahmenInTextfeldUmwandeln()
' © Schreibbüro Nora Richter 2008
' 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
If myFrame.HeightRule = wdFrameAuto Then
myFrame.HeightRule = wdFrameExact
End If
If myFrame.WidthRule = wdFrameAuto Then
myFrame.WidthRule = wdFrameExact
End If
Set rng = ActiveDocument.Range(Start:=ActiveDocument.Range.Start, _
End:=myFrame.Range.Start)
lngAbsatz = rng.Paragraphs.Count
With myFrame
lLeft = .HorizontalPosition
ltop = .VerticalPosition
lwidth = .Width
lheight = .Height
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
Dann muss man allerdings die Maße der Textfelder hinterher noch anpassen.
Man könnte auch eine fest vorgegebene Höhe verwenden, wenn man denn wüsste,
welche. Wenn Du etwa eine Zahl vorgibst, könnte man die stattdessen in der
Zeile:
Set myTF =
ActiveDocument.Shapes.AddTextbox(msoTextOrientationHorizontal, _
lLeft, ltop, lwidth, lheight,
ActiveDocument.Paragraphs(lngAbsatz).Range)
angeben bei lheight angeben.
Gruß
Lisa (Nora Richter)
_____
http://www.schreibbuero-richter.de/vba.html
Post by Martin ZürcherHallo,
wie ich in der Zwischenzeit bemerkt habe, muss die Breite und Höhe des
Positionsrahmen auf genau definiert sein, bei mir steht die Höhe auf
"automatisch" :-(
Zudem darf wohl die Option "Mit Text verschieben" nicht angewählt
sein, das hat zur Folge, dass nach dem Umwandeln die Rahmen irgendwo
im Dokument platziert werden :-((
Gruss Martin
.