Hallo,
ich möchte in Word folgendes erreichen:
Nachdem ich per Zwischenablage mehrere Grafiken in ein Dokument eingefügt habe, sollen diese alle automatisch auf eine Höhe von 0,6 cm gebracht werden, und dabei ihre Proportionen erhalten.
Ich habe per VBA geschafft, dass es mit einer einzelnen Grafik klappt. Wie kann ich das auf mehrere gleichzeitig ausgewählte Grafiken erweitern?
Hier mein VBA Code:
Sub GroesseBild()
WunschhöheCM = 0.6 'hier Zielhöhe in cm eingeben
org_höhe = Selection.ShapeRange.Height
org_breite = Selection.ShapeRange.Width
neueHöhe = Application.CentimetersToPoints(WunschhöheCM)
Selection.ShapeRange.Height = neueHöhe
Selection.ShapeRange.Width = org_breite * neueHöhe / org_höhe
End Sub
Danke und Gruß,
Uli
Hallo Uli,
ich sollte mal schleunigst mein Profil in Ordnung bringen, denn mit VBA hatte ich seit meiner Ausbildung gar nichts mehr zu tun. Ergo: ich habe keine Ahnung wie man das machen kann.
Wenn es um alle Grafiken im Dokument gehen würde, müsste man noch eine Schleife aussen rum basteln, die die Anzahl der eingefügten Grafiken durchläuft und dein Skript für jede Grafik ausführt. Das sollte machbar sein… aber wie man VBA beibringt das nur ausgesuchte Grafiken verwendet werden sollen… da habe ich keine Idee, sorry!
Vielleicht wäre eine Alternative einen Button in die Symbolleiste zu integrieren, der immer die aktuell ausgewählte Grafik mit deinem Skript bearbeitet.
Wie man im Vorfeld eine Auswahl der Grafiken im Dokument macht und dann darauf die Bearbeitung startet würde ich (in meinem Jugendlichen Leichtsinn) vielleicht so beginnen: Über ein Listenfeld alle Grafiken einlesen, dort die Mehrfachauswahl machen und dann auf jede Auswahl das Script ausführen… leichter gesagt als getan… ich weis!
Vielleicht findest du jemanden mit mehr VBA Erfahrung als mich! Sorry für mein falsches Profil!
Gruß: Jürgen
Danke Jürgen,
kein Problem. Danke für die Hilfe.
Uli
Hallo Uli,
wenn Du alle Zeichenobjekte in einem Word oder Excel Dokumenten bearbeiten möchtest, schlage ich Dir vor, die alle Dokumente nacheinander zu bearbeiten.
Welche in dem Dokumente enthalten sind, erhälst Du aus
ActiveDocument.Sapes
Diese kannst Du nacheinander Auslesen, indem Du eine For Each - Schleife verwendes.
Hier ein Beispiel, welches Dir zeigen soll, wie sie eine FOR EACH - Schleife funktioniert:
_________________
Sub test1()
Dim s as Object
For each s in ActiveDocument.Shapes
Debug.print s.name
s.height=10
next
end sub
Hoffe das ich keien Tippfehler gemacht habe - habe ich von anderem Rechner abgetippt, da hier nur Open-Office
Für die Variable s (habe ich für Shape gesetzt) kannst Du auch jeden anderen Variablen Namen einsetzten.
Auf diesen Wege kannst Du alle Zeichenobjecte im Dokument ansprechen.
Hoffe ich konnte etwas weiterhelfen, wenn nicht einfach nochmals nachhaken.
VG Ralf
Sub Makro1()
Dim xShape As InlineShape
WunschhöheCM = 0.6 'hier Zielhöhe in cm eingeben
For Each xShape In ThisDocument.InlineShapes
Faktor = Application.CentimetersToPoints(WunschhöheCM)
Faktor = Faktor / xShape.Height
xShape.Height = xShape.Height * Faktor
xShape.Width = xShape.Width * Faktor
Next xShape
End Sub