Ich freue mich über eine Lösung.
Viola
für den zweit-einfachsten Fall:
Sub Test5b()
Dim oDcm As Document
Dim oInl As InlineShape
Dim oShp As Shape
Set oDcm = ActiveDocument
For Each oInl In oDcm.InlineShapes
oInl.Width = 100
oInl.Height = 100
Next
For Each oShp In ActiveDocument.shapes
oShp.Width = 100
oShp.Height = 100
Next
End Sub
Da gibt es aber viele Möglichkeiten für Komplikationen.
--
Gruß
Helmut Weber, MVP WordVBA
Vista Small Business, Office XP
das führt schon mal viel weiter. Problem ist: jedes Bild soll genau 2,5 cm
breit sein, die Höhe wird skaliert. Zusätzlich soll die Position jeweils 2 cm
von Seite horizontal und -0,2 cm vom Absatz sein.
Es reicht, wenn jedes Bild einzeln bearbeitet werden kann. Es kommt aus dem
Zwischenspeicher und soll den Textfluss "Vor dem Tex" erhalten.
So ist es genauer beschrieben. Mir ist bei Deinem Makro die Größenangabe
nicht klar. Wie setzt sie sich zusammen?
Danke für diese hilfreiche Post.
Viola
Sub Makro6()
Selection.Paste
Selection.MoveLeft _
Unit:=wdCharacter, _
Count:=1, _
Extend:=wdExtend
Selection.InlineShapes(1).ConvertToShape
With Selection.ShapeRange(1)
.Width = CentimetersToPoints(2.5)
.LockAspectRatio = msoTrue
.left = CentimetersToPoints(2)
.ZOrder 4
End With
End Sub
Nur für den Abstand vom Absatz
fällt mir nichts ein, zumindest nichts einfaches,
denn der Absatz hat eigentlich
gar keine feste Position.
--
Gruss
Helmut Weber, MVP WordVBA
Word 2002, Windows XP
ganz toll, was Du da tust, doch ich habe sofort eine Fehlermeldung: Das
angeforderte Element ist nicht in der Sammlung vorhanden.
Dein Makro leuchtet mir vollständig ein und ich verstehe es auch.
Wie kommt es zu diesem Fehler?
Ausgangssituation: Im Zwischenspeicher ist eine Grafik, die an einem
bestimmten Absatz eingefügt wird. Daher auch der Abstand zu diesem Absatz.
Einfach nach der Position des Cursors.
Es wäre toll, Du würdest hier noch einmal reinschauen und vielleicht diese
Arbeit zum Funktionieren bringen.
Herzlichen Dank
Viola
ich habe ein bißchen zu früh gefragt:
Ich hoffe, dass ich mit dem Teil:
With Selection.ShapeRange(1)
> .Width = CentimetersToPoints(2.5)
> .LockAspectRatio = msoTrue
> .left = CentimetersToPoints(2)
> .ZOrder 4
> End With
schon alles anfangen kann. Das hat zumindest so funktioniert, dass das
eingefügt Bild verkleinert wird und an die richtige Position kommt.
Herzlichen Dank, ich denke damit kann ich alles anfangen. Ggf. melde ich
mich dann noch einmal.
Viola
wenn der Cursor in der letzten Zeile eines Absatzes steht
und das Bild unterhalb des Absatzes positioniert werden soll:
' ----------------------------------------------------------------
Sub Makro6aa()
Dim y As Single
y = Selection.Information(wdVerticalPositionRelativeToPage)
Selection.Paste
Selection.MoveLeft _
Unit:=wdCharacter, _
Count:=1, _
Extend:=wdExtend
Selection.InlineShapes(1).ConvertToShape
With Selection.ShapeRange(1)
.Width = CentimetersToPoints(2.5)
.LockAspectRatio = msoTrue
.left = CentimetersToPoints(2)
.Top = y + CentimetersToPoints(0.5)
' statt "0.5" besten Wert durch
' Probieren ermitteln
.ZOrder 4
End With
End Sub
Eine Positionierung vom Absatz von -0,2 cm verstehe ich nicht.
toll - dass Du weiteres tust. Inzwischen klärt sich für mich das Makro auch,
weil ich die Breite endlich hinbekomme - dank Deiner Hilfe!
Nun die konkretere Vorstellung - auch dank der Word-Datei, die ich gerade
erhalten habe. Es kommt ggf. noch schlimmer: die Grafik steht in einem
Textfeld. Es ist ein zweispaltiges Layout, mit einem Seitenrand von 6,5 cm
links. Auf dem linken Seitenrand liegt dann ein Textfeld. Dennoch - ich denke
das "With" müsste schon für das Makro reichen. Es werden nämlich in einem
Artikel mehrere Grafiken eingefügt. Da Word den Grafiken eine Nummer beim
Einfügen über Makro gibt, dürfte das Ganze über eine automatische Einfügung
schwieriger werden.
Der Arbeitsvorgang ist folgender:
Ein Bild aus dem Internet wird kopiert und dann am entsprechenden Absatz
eingefügt. Ich stelle mir vor, dass das Bild durch Voreinstellung im
Textfluss "Vor dem Text" eingefügt wird. Danach ein Tastendruck für das Makro.
Eigentlich müsste das "With" aus Deinem vorletzen Entwurf reichen. Es gab
nur ein Problem, dem ich heute nachmittag auf die Spur kommen möchte: Word
formatierte mal munter 2 cm von "Spalte" und dann wieder wie gewünscht 2 cm
von "Seite" horizontal. Ich glaube das hängt von der Position der eingefügten
Grafik ab. Genau das möchte ich heute nachmittag ergründen und eben das
gesamte in einen machbaren Workflow umgestalten. Genau dies kann sich
allerdings auflösen wenn die Grafik in das Textfeld auf dem linken Seitenrand
eingefügt wird.
Der Abstand "-0,2 cm unterhalb von Absatz" bezieht sich auf die Verankerung
der Grafik im Absatz. Wenn Du das erweiterte Layout für eine Grafik öffnest
findest Du diesen Eintrag für vertikalen Abstand. Damit steht das Bild etwas
unterhalb der ersten Zeile des Absatzes - wie ich dies verstehe.
Heute nachmittag habe ich wieder Zeit und Gelegenheit daran zu arbeiten. Ich
melde mich wieder. Jedenfalls Tausend Dank!
Viola
ich glaube, dass das Einfügen in einen normalen Text und
in ein Textfeld zwei ganz unterschiedlich Dinge sind.
Erstmal erweitert um den Abstand vom Absatz,
das Einfügen in normalen Text:
' ---------------------------
Sub InsertImage()
Selection.Paste
Selection.MoveLeft _
Unit:=wdCharacter, _
Count:=1, _
Extend:=wdExtend
Selection.InlineShapes(1).ConvertToShape
With Selection.ShapeRange(1)
.Width = CentimetersToPoints(2.5)
.LockAspectRatio = msoTrue
.Left = CentimetersToPoints(2)
.RelativeVerticalPosition = wdRelativeVerticalPositionParagraph
.Top = CentimetersToPoints(0.2)
.ZOrder 4
End With
End Sub
' ------------------------------------------------------
Einfügen mit Paste fügt immer erst ein Inlineshape ein.
Soll die Grafik positioniert werden, muss das Inlineshape
in ein Shape umgewandelt werden. Auch haben nur Shapes
eine ZOrder-Eigenschaft, wie "Vor den Text".
Gleich ein Shape einzufügen, scheint mir unmöglich.
Dummerweise ist ein Umwandeln von Inlineshape in Shape
in einem Textfeld nicht möglich, nach meinen Experimenten.
Man bräuchte also zwei verschiedene Makros oder ein Makro, das
feststellt, ob der Cursor in einem Textfeld steht oder nicht,
und entsprechend verzweigt.
Das kann man herausfinden durch dies:
MsgBox Selection.StoryType
Ergebnis = 5 Textfeld (wdTextFrameStory)
Ergebnis = 1 Haupttexct (wdMainTextStory)
>Ich stelle mir vor, dass das Bild durch Voreinstellung im
>Textfluss "Vor dem Text" eingefügt wird.
Geht nicht, siehe oben.
Nach bestem, wenn auch beschränktem, Wissen.
Mein Rat, nichts glauben, sondern alles nachprüfen.
Helmut Weber wrote:
> Dummerweise ist ein Umwandeln von Inlineshape in Shape
> in einem Textfeld nicht möglich, nach meinen Experimenten.
> Man bräuchte also zwei verschiedene Makros oder ein Makro, das
> feststellt, ob der Cursor in einem Textfeld steht oder nicht,
> und entsprechend verzweigt. [..]
man müsste sich hier auch fragen, was für eine Funktion das Textfeld
überhaupt hat. Wenn da ausser der Grafik nichts drin steht, dann ist es
flüssiger als flüssig.
Gruss
Robert
--
/"\ ASCII Ribbon Campaign | MSFT |
\ / | MVP | Scientific Reports
X Against HTML | for | with Word?
/ \ in e-mail & news | Word | http://www.masteringword.eu/
Das Problem ist etwas geringer, weil der Arbeitsvorgang "Bild im Internet
kopieren und in Word einfügen" eher unproblematisch ist. Es gibt in den Word
Optionen bei "Bearbeiten" die Möglichkeit den Textfluss voreinzustellen.
Insoweit muss dies gar nicht im Makro stehen.
Das Textfeld scheint das Makro gar nicht so sehr zu stören. Um den Abstand
"2 cm von Seite" zu erhalten muss ich es anscheinend zweimal ausführen.
Ich bleibe dran und hoffe es bald weitergeben zu können.
Wie gesagt: Der Ablauf: Grafikbreite 2,5 cm und Position: 2 cm von Seite und
-0,2 cm von Absatz - hier nehme ich Markierung - wird vermutlich erst einmal
mindestens reichen.
Übrigens - ich nehme manchmal z. B. für Beschriftungsformatvorlagen die
genau unter einem Bild stehen bleiben sollen - auch mit Textfluss - einfach
einen Positionsrahmen. MIt dem klappt mehr als mit dem Textfeld oder einer
Tabelle. Doch das spielt hier keine Rolle, nur wegen der angesprochenen
Problematik.
Vielleicht nutzt es Euch an irgendeiner Stelle.
Danke noch mals.
Viola
>Es gibt in den Word
>Optionen bei "Bearbeiten" die Möglichkeit den Textfluss voreinzustellen.
wieder was gelernt. :-)
Die Grafik wird wunschgemäß in den Textfluss umgewandelt (Die Voreinstellung
war tatsächlich nicht konstant).
Selection.InlineShapes(1).ConvertToShape
Danach verliert das Makro die Grafik weil sie nicht markiert bleibt. Deshalb
funktioniert die Veränderung der Größe deshalb nicht.
Beim Aufzeichnen vergibt Word diesen einmaligen Namen, der im Makro nichts
nutzt. Ganz allgemein die Grafik im Textfluss "Vor dem Text" in nächster Nähe
des Cursors zu markieren funktioniert nicht. In zwei Teilen geht es und ist
auf jeden Fall eine große Arbeitserleichterung. Doch gibt es diese
Markierung? Warum verliert das Makro die Grafik wenn es den Textfluss
umgewandelt hat?
Danke für eine Antwort!!!!
With Selection.ShapeRange(1)
Viola Vockrodt-Scholz wrote:
[..]
> Übrigens - ich nehme manchmal z. B. für Beschriftungsformatvorlagen die
> genau unter einem Bild stehen bleiben sollen - auch mit Textfluss - einfach
> einen Positionsrahmen. MIt dem klappt mehr als mit dem Textfeld oder einer
> Tabelle. Doch das spielt hier keine Rolle, nur wegen der angesprochenen
> Problematik.
in längeren Dokumenten füge ich Bilder nur noch Inline ein, und dann
stehen sie ja im Fliesstext. Ergo kannst Du dem Absatz bzw. der
verwendeten Formatvorlage die Absatz-Eigenschaft mitgeben, dass er immer
am nachfolgenden Absatz "kleben" bleibt.
Danke für Dein Interesse!
"Robert M. Franz (RMF)" wrote:
Viola Vockrodt-Scholz wrote:
> Danke für Dein Interesse. Doch handelt es sich nicht um so große Bilder, dass
> ein Absatz reichen würde.
ein Inline-Objekt wird von Word so behandelt, als ob es ein einzelner
Buchstabe (in normalerweise sehr grossem Schriftgrad :-)) ist. Wenn Du
so ein Bild in einen eigenen Absatz steckst und dem Absatz nicht die
Zeilenhöhe "genau x pt" sonder "mindestens x pt" (oder: "einfach", etc.)
gibst, dann passt sich die Absatzhöhe an die höhe der Abbildung an.
> Wenn Du Bilder mit Textfluss beschriften möchtest,
> dann hast Du die Formatvorlage "Beschriftung". Bilder werden hierfür auch
> noch unter den Abbildungen beschriftet. Diese Formatvorlage klebt nicht.
Wenn Du die Inline-Grafik in einem eigenen Absatz hast, dann belege
diesen Absatz mit einer dedizierten Formatvorlage ("Abbildung", z.B.).
Diese FV sollte mindestens die weiter oben erwähnte
Zeilenhöhen-Einstellung haben sowie die Layout-Eigenschaft, dass sie am
nachfolgenden Absatz kleben bleibt. Im EN-Word heisst diese Einstellung
(im zweiten Tab unter Format | Absatz) "keep with next", erst im DE-Word
2007 hat sie die korrekte Übersetzung "Nicht vom nächsten Absatz
trennen" mitbekommen.
> In
> wissenschaftlichen Texten sind Beschriftungen wichtig. Zusätzlich nutzt der
> Positionsrahmen bei Textfluss um kleinere Bilder oder Tabellen als
> Abbildungen hervorragend.
Klar, wenn Du Text um Bilder herumfliessen lassen möchtest -- aber dann
leistet der Positionsrahmen eigentlich fast nicht mehr genug, sondern Du
musst dann schon ein Textfeld nehmen.
Wenn Du keinen Textfluss um das Duo aus Abbildung und Beschriftung
brauchst, dann benötigst Du weder Positionsrahmen noch Textfeld noch
sonstwas -- einfach zwei Formatvorlagen, je eine für die Grafik und für
die Beschriftung (siehe oben).
Genau das ist das Problem: in einem Textfeld kann Word Formatvorlagen nicht
so verarbeiten, dass daraus ein Abbildungsverzeichnis erstellt werden kann.
Das ist lange erprobt! ... Habe gerade Word 2007 mit dem Textfeld getestet.
Das kann das jetzt tatsächlich!! Vorher war dies nicht möglich!
Gruß
Viola
"Robert M. Franz (RMF)" wrote:
Viola Vockrodt-Scholz wrote:
> ... dann musst Du schon ein Textfeld nehmen. ...
>
> Genau das ist das Problem: in einem Textfeld kann Word Formatvorlagen nicht
> so verarbeiten, dass daraus ein Abbildungsverzeichnis erstellt werden kann.
> Das ist lange erprobt! ... Habe gerade Word 2007 mit dem Textfeld getestet.
> Das kann das jetzt tatsächlich!! Vorher war dies nicht möglich!
ja, es hat (vermutlich) eine Menge an Community-Feedback benötigt, damit
die Verzeichnisse jetzt auch Textfeld-Inhalte "sehen" können. :-)
Aber auch in 2007 würde ich in aller Regel auf Positionsrahmen und
Textfeld verzichten, sofern die Abbildungen eh gross und somit in die
Nähe der Breite eines normalen Fliesstext-Absatzes kommen.
Zusammenhalten kann man sie mit der Beschriftung eben über normale
Absatz-Eigenschaften bereits.
Wirklich interessant dieser Austausch.
Viola
"Robert M. Franz (RMF)" wrote: