Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Grafikgröße mit einem Makro ändern

2,289 views
Skip to first unread message

Vockrodt-Scholz@discussions.microsoft.com Viola Vockrodt-Scholz

unread,
Sep 2, 2008, 11:03:08 AM9/2/08
to
Für ein Layout mit ca. 20 Grafiken sollen die Grafiken alle auf die gleiche
Größe gebracht werden. Die Makrofunktion lässt eine Größenänderung von
Grafiken in Word nicht zu.
Wie kann ich dies dennoch lösen? In VBA gibt vielleicht doch eine
Möglichkeit über die picture-Eigenschaften?

Ich freue mich über eine Lösung.

Viola

Helmut Weber

unread,
Sep 2, 2008, 11:36:14 AM9/2/08
to
Hallo 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

Viola Vockrodt-Scholz

unread,
Sep 3, 2008, 8:02:01 AM9/3/08
to
Danke Helmut,

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

Helmut Weber

unread,
Sep 4, 2008, 5:33:32 AM9/4/08
to
Hallo 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

Viola Vockrodt-Scholz

unread,
Sep 9, 2008, 5:40:00 AM9/9/08
to
Hallo Helmut,

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

Viola Vockrodt-Scholz

unread,
Sep 9, 2008, 5:44:00 AM9/9/08
to

Hallo, Helmut,

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

Helmut Weber

unread,
Sep 11, 2008, 8:02:51 AM9/11/08
to
Hallo 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.

Viola Vockrodt-Scholz

unread,
Sep 12, 2008, 1:03:00 AM9/12/08
to
Hallo Helmut,

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

Helmut Weber

unread,
Sep 12, 2008, 7:27:08 AM9/12/08
to
Hallo 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.

Robert M. Franz (RMF)

unread,
Sep 12, 2008, 7:50:19 AM9/12/08
to
Hallo allerseits

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/

Viola Vockrodt-Scholz

unread,
Sep 12, 2008, 9:06:13 AM9/12/08
to
Hi und herzlichen Dank!

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

Helmut Weber

unread,
Sep 12, 2008, 9:23:40 AM9/12/08
to
Hallo Viola,

>Es gibt in den Word
>Optionen bei "Bearbeiten" die Möglichkeit den Textfluss voreinzustellen.

wieder was gelernt. :-)

Viola Vockrodt-Scholz

unread,
Sep 12, 2008, 9:30:14 AM9/12/08
to
Das Makro läuft jetzt in zwei Teilen.
Der Fehler liegt an dieser Stelle:

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)

Robert M. Franz (RMF)

unread,
Sep 12, 2008, 9:47:41 AM9/12/08
to
Hallo Viola

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.

Viola Vockrodt-Scholz

unread,
Sep 13, 2008, 4:13:01 AM9/13/08
to
Danke für Dein Interesse. Doch handelt es sich nicht um so große Bilder, dass
ein Absatz reichen würde. 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. In
wissenschaftlichen Texten sind Beschriftungen wichtig. Zusätzlich nutzt der
Positionsrahmen bei Textfluss um kleinere Bilder oder Tabellen als
Abbildungen hervorragend.

Danke für Dein Interesse!

"Robert M. Franz (RMF)" wrote:

Robert M. Franz (RMF)

unread,
Sep 13, 2008, 11:48:27 AM9/13/08
to
Hallo Viola

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).

Viola Vockrodt-Scholz

unread,
Sep 14, 2008, 10:48:01 AM9/14/08
to
... 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!

Gruß
Viola

"Robert M. Franz (RMF)" wrote:

Robert M. Franz (RMF)

unread,
Sep 14, 2008, 2:06:20 PM9/14/08
to
Hallo Viola

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.

Viola Vockrodt-Scholz

unread,
Sep 15, 2008, 1:07:00 AM9/15/08
to
Danke für den Tip. Klar - das ist natürlich praktisch und einfach bei großen
Grafiken in der gesamten Textbreite.

Wirklich interessant dieser Austausch.

Viola

"Robert M. Franz (RMF)" wrote:

0 new messages