Discussion:
Laufzeitfehler beim umwandeln von Positionsrahmen - Textfeld
(zu alt für eine Antwort)
Martin Zürcher
2010-05-20 13:22:07 UTC
Permalink
Hallo,

Ich möchte das Script http://www.schreibbuero-richter.de/vba/posrahmen.html
von © Schreibbüro Nora Richter 2008 unter Word 2003 verwenden.

Leider gibt mir das Teil ein "Laufzeitfehler '-2147024809 (80070057)':
Der angegeben Wert ist ausserhalb des zulässigen Bereichs" aus.

Beim debuggen wird danach die Zeile "Set myTF =
ActiveDocument.Shapes.AddTextbox(msoTextOrientationHorizontal, _
lLeft, ltop, lwidth, lheight)" gelb markiert.

Weis jemand wie ich dieses Problem lösen oder umgehen kann?

Gruss Martin
Martin Zürcher
2010-05-20 14:23:19 UTC
Permalink
Hallo,

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
Lisa [Nora Richter]
2010-05-24 21:11:01 UTC
Permalink
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ürcher
Hallo,
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
.
Lisa [Nora Richter]
2010-05-24 21:49:01 UTC
Permalink
Hallo Martin,

noch ein Nachtrag. Man sieht den Code hier sehr schlecht. Ich habe eine
geänderte Version auch hier hochgeladen:

http://www.schreibbuero-richter.de/vba/posrahmen.html
--
Gruß
Lisa
Martin Zürcher
2010-05-25 10:21:19 UTC
Permalink
Hallo Lisa

Besten Dank für die Hilfe, ich habe den Code
http://www.schreibbuero-richter.de/vba/posrahmen.html übernommen, der
Laufzeitfehler ist verschwunden und die Textfelder werden nicht mehr
auf die erste Seite verschoben.

Dass die Textfelder in der "Spalte" anstelle der "Seite" platziert und
die Formatierung zurück auf (Standart) gesetzt werden, ist für mich
kein Problem. Ich kann dies mit Ctrl+Shift+C bzw. Ctrl+Shift+V von
einem Textfeld zum anderen kopieren.

Gruss Martin

Loading...