Discussion:
Bilder über Makro gleiche Größe zuweisen
(zu alt für eine Antwort)
Maria Gödiker
2005-09-06 15:56:53 UTC
Permalink
Hallo NG

ich möchte über ein Makro mit Schaltfläche in der Symbolleiste erreichen,
dass ich alle Bilder eine bestimmte Höhe zuweisen kann.
Z. B. möchte ich das Bild markieren und dann erreichen dass die Breite genau
4 cm ist. Ich habe über Makro aufnehmen ein Makro erstellt, stockt es - der
Eintrag "Left" wird markiert.
Es erscheint die Fehlermeldung:

"Methode oder Datenobjekt nicht gefunden"

Mein Makro hat folgende Aussehen:

Selection.InlineShapes(1).Fill.Visible = msoFalse
Selection.InlineShapes(1).Fill.Solid
Selection.InlineShapes(1).Fill.Transparency = 0#
Selection.InlineShapes(1).Line.Weight = 0.75
Selection.InlineShapes(1).Line.Transparency = 0#
Selection.InlineShapes(1).Line.Visible = msoFalse
Selection.InlineShapes(1).LockAspectRatio = msoTrue
Selection.InlineShapes(1).Height = 127.55
Selection.InlineShapes(1).Width = 129.55
Selection.InlineShapes(1).PictureFormat.Brightness = 0.5
Selection.InlineShapes(1).PictureFormat.Contrast = 0.5
Selection.InlineShapes(1).PictureFormat.ColorType = msoPictureAutomatic
Selection.InlineShapes(1).PictureFormat.CropLeft = 0#
Selection.InlineShapes(1).PictureFormat.CropRight = 0#
Selection.InlineShapes(1).PictureFormat.CropTop = -0.15
Selection.InlineShapes(1).PictureFormat.CropBottom = -0.15
Selection.InlineShapes(1).Left = 0#
Selection.InlineShapes(1).Top = 0#

Leider habe ich zuwenig Ahnung mi VBA, wer kann mir hier helfen

Maria
Thomas Gahler
2005-09-07 05:13:10 UTC
Permalink
Hallo Maria
Post by Maria Gödiker
ich möchte über ein Makro mit Schaltfläche in der Symbolleiste erreichen,
dass ich alle Bilder eine bestimmte Höhe zuweisen kann.
Z. B. möchte ich das Bild markieren und dann erreichen dass die Breite genau
4 cm ist.
Willst du jetzt die Höhe oder die Breite setzen?


Nehme mal an, dass die Breite fix ist. Ist irgendwie logischer


Das nachstehende Makro passt das erste InlineShape (schwarze Ankerpunkte)
der markierung an. Also die Einfügemarke muss das InlineShape direkt
markieren oder mindestens innerhalb der Markierung haben...

Die breite ist in der Komnstante ganz am Anfang definiert.


Sub Demo()
Const BREITE As Single = 4

Dim oISP As Word.InlineShape
Dim sBreite As Single
Dim sHöhe As Single

Set oISP = Selection.InlineShapes(1)
With oISP
sBreite = PointsToCentimeters(.Width)
sHöhe = PointsToCentimeters(.Height)

.LockAspectRatio = True
.Height = CentimetersToPoints(BREITE * sHöhe / sBreite)
.Width = CentimetersToPoints(BREITE)
End With
End Sub



Alles klar?



--
Thomas Gahler
MVP für WordVBA

- Windows XP (SP1), Office XP (SP3)
unknown
2005-09-07 13:07:16 UTC
Permalink
Post by Thomas Gahler
Hallo Maria
Post by Maria Gödiker
ich möchte über ein Makro mit Schaltfläche in der Symbolleiste erreichen,
dass ich alle Bilder eine bestimmte Höhe zuweisen kann.
Z. B. möchte ich das Bild markieren und dann erreichen dass die Breite
genau
Post by Maria Gödiker
4 cm ist.
Willst du jetzt die Höhe oder die Breite setzen?
Nehme mal an, dass die Breite fix ist. Ist irgendwie logischer
Das nachstehende Makro passt das erste InlineShape (schwarze Ankerpunkte)
der markierung an. Also die Einfügemarke muss das InlineShape direkt
markieren oder mindestens innerhalb der Markierung haben...
Die breite ist in der Komnstante ganz am Anfang definiert.
Sub Demo()
Const BREITE As Single = 4
Dim oISP As Word.InlineShape
Dim sBreite As Single
Dim sHöhe As Single
Set oISP = Selection.InlineShapes(1)
With oISP
sBreite = PointsToCentimeters(.Width)
sHöhe = PointsToCentimeters(.Height)
.LockAspectRatio = True
.Height = CentimetersToPoints(BREITE * sHöhe / sBreite)
.Width = CentimetersToPoints(BREITE)
End With
End Sub
Alles klar?
Ich bin mir nicht sicher, aber müsste man nicht alle InlineShapes mit For Each abarbeiten..?
Und die feste Breite - gibt's da etwas Mahtematik wie z.B. den Dreisprung mit dem man bei bekannten Maßen (woher nehmen..!?) das Korrespondierende zu den (hier) 4cm errechnet und dann skaliert? Und was, wenn man weiter denkt und sagt, alles müsste nebeneinander - und plötzlich droht der Seitenrand..?

Hallo Maria - welche weiteren Vorgaben & Eckdaten gibst du uns?
--
Eric March

»Schreibe kurz - und sie werden es lesen. Schreibe klar und sie werden es verstehen. Schreibe bildhaft - und sie werden es im Gedächtnis behalten.« Joseph Pulitzer
Thomas Gahler
2005-09-07 14:36:53 UTC
Permalink
Hallo Eric

Nein, bitte nicht schon wieder. Antworten keine philosophischen
Selbstgespräche bitte
Post by unknown
Ich bin mir nicht sicher, aber müsste man nicht
alle InlineShapes mit For Each abarbeiten..?
Wieso auch. Die Frage war «...möchte ich das Bild markieren...» -> das Bild
= Singular
Post by unknown
Und die feste Breite - gibt's da etwas Mahtematik wie z.B. den
Dreisprung mit dem man bei bekannten Maßen (woher nehmen..!?)
das Korrespondierende zu den (hier) 4cm errechnet und dann skaliert?
Gerade das macht ja das kleine Makro, es berechnet die korrespondioerende
Höhe zu den 4 cm Breite
Post by unknown
Und was, wenn man weiter denkt und sagt, alles müsste nebeneinander
Hat doch gar nichts damit zu tun,. Es sind InlineShapes und die sind schon
nebeneinander. Wie ist doch dein persönlicher Fachausdruck für sowas
'Superbuchstabe' oder so. Und die sind immer nebeneinander.
Post by unknown
- und plötzlich droht der Seitenrand..?
Wieso auch, gibt einen Zeilenumbruch wie beim nocmalen Fliesstext.




--
Thomas Gahler
MVP für WordVBA

- Windows XP (SP1), Office XP (SP3)
unknown
2005-09-07 15:28:19 UTC
Permalink
Post by Thomas Gahler
Hallo Eric
Nein, bitte nicht schon wieder. Antworten keine philosophischen
Selbstgespräche bitte
Post by unknown
Ich bin mir nicht sicher, aber müsste man nicht
alle InlineShapes mit For Each abarbeiten..?
Wieso auch. Die Frage war «...möchte ich das Bild markieren...» -> das Bild
= Singular
Und ich habe "dass ich alle Bilder eine bestimmte Höhe zuweisen kann." für voll genommen und daran gedacht, dass viele Bilder so zu behandeln wären.
(Dieser Index als Kennung welches InlineShape es ist dürfte uns durchaus das Genick brechen.)
Post by Thomas Gahler
Post by unknown
Und die feste Breite - gibt's da etwas Mahtematik wie z.B. den
Dreisprung mit dem man bei bekannten Maßen (woher nehmen..!?)
das Korrespondierende zu den (hier) 4cm errechnet und dann skaliert?
Gerade das macht ja das kleine Makro, es berechnet die korrespondioerende
Höhe zu den 4 cm Breite
Mir schwebten da viele Bilder vor die irgendwie alle auch noch auf die reihe hätten passen müssen - so kann man sich irren. Aber stimmt, ich hab den Dreisprung im Makro nicht erkannt.
Post by Thomas Gahler
Post by unknown
Und was, wenn man weiter denkt und sagt, alles müsste nebeneinander
Hat doch gar nichts damit zu tun,. Es sind InlineShapes und die sind schon
nebeneinander. Wie ist doch dein persönlicher Fachausdruck für sowas
'Superbuchstabe' oder so. Und die sind immer nebeneinander.
Mit Buchstaben zwischen dne Superbuchstaben? Eine Zeile tiefer..? So einfach könne wirs uns nicht machen.
Post by Thomas Gahler
Post by unknown
- und plötzlich droht der Seitenrand..?
Wieso auch, gibt einen Zeilenumbruch wie beim nocmalen Fliesstext.
Dann steht aber, was ich unerlaubt voraussetzte, nicht mehr alles nebeneinander.
(Ich mag InlineShapes, wirklich...)
--
Eric March

»Schreibe kurz - und sie werden es lesen. Schreibe klar und sie werden es verstehen. Schreibe bildhaft - und sie werden es im Gedächtnis behalten.« Joseph Pulitzer
Maria Gödiker
2005-09-07 14:49:23 UTC
Permalink
Hallo Thomas - das mit der Breite und Höhe, da hab ich mich wohl
verschrieben. Ich möchte eine bestimmt Höhe erreichen, hier z. B. 4 cm.
(Bilder sollen alle in einer Tabelle in der Höhe passen)

Ich hatte beim erstellen des Makros erst eine Grafik markiert und war dann
mit dem Aufzeichnen angefangen (VBA beherrsche ich nicht). Dann habe ich
erst das nächste Bild markiert und das Makro aufgerufen.

Von dem, was ihr beiden geschrieben habt, habe ich das meiste leider nicht
verstanden,

Maria
Post by Thomas Gahler
Post by Maria Gödiker
ich möchte über ein Makro mit Schaltfläche in der Symbolleiste erreichen,
dass ich alle Bilder eine bestimmte Höhe zuweisen kann.
Z. B. möchte ich das Bild markieren und dann erreichen dass die Breite
genau
Post by Maria Gödiker
4 cm ist.
Willst du jetzt die Höhe oder die Breite setzen?
Nehme mal an, dass die Breite fix ist. Ist irgendwie logischer
Das nachstehende Makro passt das erste InlineShape (schwarze Ankerpunkte)
der markierung an. Also die Einfügemarke muss das InlineShape direkt
markieren oder mindestens innerhalb der Markierung haben...
Die breite ist in der Komnstante ganz am Anfang definiert.
Sub Demo()
Const BREITE As Single = 4
Dim oISP As Word.InlineShape
Dim sBreite As Single
Dim sHöhe As Single
Set oISP = Selection.InlineShapes(1)
With oISP
sBreite = PointsToCentimeters(.Width)
sHöhe = PointsToCentimeters(.Height)
.LockAspectRatio = True
.Height = CentimetersToPoints(BREITE * sHöhe / sBreite)
.Width = CentimetersToPoints(BREITE)
End With
End Sub
Alles klar?
--
Thomas Gahler
MVP für WordVBA
- Windows XP (SP1), Office XP (SP3)
unknown
2005-09-07 15:40:31 UTC
Permalink
Post by Maria Gödiker
Post by Thomas Gahler
Post by Maria Gödiker
ich möchte über ein Makro mit Schaltfläche in der Symbolleiste erreichen,
dass ich alle Bilder eine bestimmte Höhe zuweisen kann.
Z. B. möchte ich das Bild markieren und dann erreichen dass die Breite
genau
Post by Maria Gödiker
4 cm ist.
Willst du jetzt die Höhe oder die Breite setzen?
Nehme mal an, dass die Breite fix ist. Ist irgendwie logischer
Das nachstehende Makro passt das erste InlineShape (schwarze Ankerpunkte)
der markierung an. Also die Einfügemarke muss das InlineShape direkt
markieren oder mindestens innerhalb der Markierung haben...
Die breite ist in der Komnstante ganz am Anfang definiert.
Sub Demo()
Const BREITE As Single = 4
Dim oISP As Word.InlineShape
Dim sBreite As Single
Dim sHöhe As Single
Set oISP = Selection.InlineShapes(1)
With oISP
sBreite = PointsToCentimeters(.Width)
sHöhe = PointsToCentimeters(.Height)
.LockAspectRatio = True
.Height = CentimetersToPoints(BREITE * sHöhe / sBreite)
.Width = CentimetersToPoints(BREITE)
End With
End Sub
Alles klar?
--
Thomas Gahler
MVP für WordVBA
- Windows XP (SP1), Office XP (SP3)
Hallo Thomas - das mit der Breite und Höhe, da hab ich mich wohl
verschrieben. Ich möchte eine bestimmt Höhe erreichen, hier z. B. 4 cm.
(Bilder sollen alle in einer Tabelle in der Höhe passen)
Ich hatte beim erstellen des Makros erst eine Grafik markiert und war dann
mit dem Aufzeichnen angefangen (VBA beherrsche ich nicht). Dann habe ich
erst das nächste Bild markiert und das Makro aufgerufen.
Von dem, was ihr beiden geschrieben habt, habe ich das meiste leider nicht
verstanden,
(Verzeihung; «Ich mag kein TOFU.» Siehe http://learn.to/quote oder http://de.wikipedia.org/wiki/TOFU)

Die Formel von Thomas ist simpler Dreisatz. Wenn ich mich da jetzt nicht verrechne müsste es so rum für die markierte "Grafik" klappen:

[Klau-Anfang]
Sub Demo()
Const HÖHE As Single = 4

Dim oISP As Word.InlineShape
Dim sBreite As Single
Dim sHöhe As Single

Set oISP = Selection.InlineShapes(1)
With oISP
sBreite = PointsToCentimeters(.Width)
sHöhe = PointsToCentimeters(.Height)

.LockAspectRatio = True
.Height = CentimetersToPoints(HÖHE)
.Width = CentimetersToPoints(HÖHE * sBreite / sHöhe)
End With
End Sub
[Klau-Ende]

Dein (praktisches) Problem ist, dass du mehrere "Grafiken" hast und die über Makro nur per Index (die 1 im Beispiel) angesperochen werden können [sollte man eine Namen vergeben können - dann müsstest du je "Grafik" dies erst selbst tun].
Das heißt, du müsstest entwerder auf Verdacht alle dieser "Grafiken" so mit dem Makro behandeln...

[Unter Vorbehalt, aus der Hand hingeschreiben]
For Each oISP in Selection.InlineShapes (statt des Set-Befehls)
(nun der WITH-Breich)
Next

...und zwar so alles ohne Unterscheidung, oder eine Abfrage vor jedem Treffer bestätigen/ablehnen.
Da jede Größe individuell gegen die 4cm angepasst werden muss bleibt auch nichts übrig als jedes Element einzeln zu bearbeeiten.
--
Eric March

»Schreibe kurz - und sie werden es lesen. Schreibe klar und sie werden es verstehen. Schreibe bildhaft - und sie werden es im Gedächtnis behalten.« Joseph Pulitzer
Thomas Gahler
2005-09-08 05:26:24 UTC
Permalink
Hallo Maria
Post by Maria Gödiker
Hallo Thomas - das mit der Breite und Höhe, da hab ich mich wohl
verschrieben. Ich möchte eine bestimmt Höhe erreichen, hier z. B. 4 cm.
Ist jetzt angepasst
Post by Maria Gödiker
(Bilder sollen alle in einer Tabelle in der Höhe passen)
Ist jetzt auch angepasst, es werden *alle* Bilder in jeder Zelle der aktiven
Tabelle bearbeitet.



Sub Demo()
Const HÖHE As Single = 4

Dim oTAB As Word.Table
Dim oROW As Word.Row
Dim oCEL As Word.Cell
Dim oISP As Word.InlineShape
Dim sBreite As Single
Dim sHöhe As Single

If Selection.Information(wdWithInTable) Then
Set oTAB = Selection.Tables(1)
For Each oROW In oTAB.Rows
For Each oCEL In oROW.Cells
For Each oISP In oCEL.Range.InlineShapes
With oISP
sBreite = PointsToCentimeters(.Width)
sHöhe = PointsToCentimeters(.Height)

.LockAspectRatio = True
.Height = CentimetersToPoints(HÖHE)
.Width = CentimetersToPoints(HÖHE * sBreite / sHöhe)
End With
Next oISP
Next oCEL
Next oROW
End If
End Sub


Alles klar? Sonst melde dich wieder


--
Thomas Gahler
MVP für WordVBA

- Windows XP (SP1), Office XP (SP3)

Loading...