steffenkuch
Goto Top

Word 2000 Anpassen einer verlinkten Grafik per VBA

Hallo!

Ich habe ein VBA-Skript, dass eingefügte Grafiken anpasst und das auch funktioniert.
Sub GrafikEditieren()
'  
' GrafikEditieren Makro  
' Makro aufgezeichnet am 05.03.2010 von DV  
'Stand: 8.3.2010  

    Selection.InlineShapes(1).Fill.Visible = msoFalse
    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
'   Mit .scale... bekomme ich eine Prozentuale Größenveränderung hin.  
    Selection.InlineShapes(1).ScaleHeight = 70
    Selection.InlineShapes(1).ScaleWidth = 70
    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#
    Selection.InlineShapes(1).PictureFormat.CropBottom = 0#
'   In ein 'flexibles' Format bringen  
    Selection.InlineShapes(1).ConvertToShape
'   Layouttyp festlegen.  
    Selection.ShapeRange.WrapFormat.Type = wdWrapSquare
'   Nur Umbruch links  
    Selection.ShapeRange.WrapFormat.Side = wdWrapLeft
'   Abstand links 1 cm, ansonsten 0 cm  
    Selection.ShapeRange.WrapFormat.DistanceLeft = CentimetersToPoints(1)
    Selection.ShapeRange.WrapFormat.DistanceRight = CentimetersToPoints(0)
    Selection.ShapeRange.WrapFormat.DistanceTop = CentimetersToPoints(0)
    Selection.ShapeRange.WrapFormat.DistanceBottom = CentimetersToPoints(0)
    Selection.ShapeRange.WrapFormat.AllowOverlap = False

End Sub

Der selbe Code funktioniert dann nicht, wenn die Grafik "eingefügt und verknüpft" wird. Ich habe das ein oder andere versucht, aber ich komme nicht weiter.
Hat jemand vielleicht einen Tipp für mich?
Danke!

Gruß
Steffen Kuch

Content-Key: 137755

Url: https://administrator.de/contentid/137755

Printed on: April 19, 2024 at 20:04 o'clock

Mitglied: 76109
76109 Mar 09, 2010 at 11:14:27 (UTC)
Goto Top
Hallo Steffen!

Versuchs mal mit diese Zeile am Anfang (Zeile 6):
ActiveDocument.InlineShapes(1).Select

Gruß Dieter
Member: SteffenKuch
SteffenKuch Mar 09, 2010 at 11:36:05 (UTC)
Goto Top
Hi!

Danke für den Tipp, aber ich erhalte immer noch bei Zeile 26 die Fehlermeldung "Befehl misslungen".
Ich habe das Makro immer dann gestartet, nachdem ich die Grafik mit der Maus angeklickt hatte. Hätte ich wohl dazuschreiben sollen, sorry.

Gruß
Steffen
Mitglied: 76109
76109 Mar 09, 2010 at 12:54:12 (UTC)
Goto Top
Hallo SteffenKuch!

Also, dass es erst ab Zeile 26 hängen bleibt, ist ja erst mal ein gutes Zeichen. Warum allerdings die Funktionen ab Zeile 26 nicht auf das Object angewendet werden können, kann ich nicht beurteilen. Aber das kannst Du ja per Makroaufzeichnung herausfinden bzw. ob's überhaupt im Document manuell funktioniert...?

Gruß Dieter
Member: SteffenKuch
SteffenKuch Mar 09, 2010 at 13:07:26 (UTC)
Goto Top
Hi!

Das, was in dem Makro abläuft habe ich schon zigmal manuell gemacht.
Wie man auch anhand der Kommentare sehen kann, ist das Makro zunächst per Makrorekorder aufgezeichnet.
Ich habe auch schon "eingefügte und verknüpfte" Grafiken manuell genauso bearbeitet. Warum jetzt der aufgezeichnete Makro-Code nicht funktioniert ist mir deshalb auch ein Rätsel.

Gruß
Steffen
Member: SteffenKuch
SteffenKuch Mar 09, 2010 at 14:16:44 (UTC)
Goto Top
Hallo!

Was mich gerade total verwirrt ist die Tatsache, dass ich bei eingeschaltetem Makrorekorder das Layout der Grafik gar nicht verändern kann (von Hand).
Ich kapiere nicht, wie ich es dann geschafft habe, das obige Makro aufzunehmen?!

Gruß
Steffen
Mitglied: 76109
76109 Mar 09, 2010 at 14:18:36 (UTC)
Goto Top
Hallo Steffen!

Was für Grafiken sind das, ganz normal Bilder?

Soviel habe ich in der Richtung in Word noch nichts gemacht, daher müsste ich etwas genauer wissen, wie der ganze Ablauf ist. Soweit ich das verstanden habe, fügst Du eine Grafik per <Einfügen><Grafik> ein und verknüpfts diese womit?

Du könntest aber mal probieren, dass Makro zu exportieren und in einem neuen Dokument wieder importieren. Danach mal testen, ob's in einem neuen Dokument funktioniert. Was besseres fällt mir im Moment leider nicht ein.

Gruß Dieter
Mitglied: 76109
76109 Mar 09, 2010 at 14:24:53 (UTC)
Goto Top
Hallo Steffen!

Wie Du das geschafft hast, weiß ich leider auch nichtface-wink Am besten Dokument schließen, wieder öffnen und nochmal probieren.

Mir passieren manchmal auch komische Sachen, wo ich denke, häh was ist jetz losface-smile

Gruß Dieter
Member: SteffenKuch
SteffenKuch Mar 09, 2010 at 14:33:32 (UTC)
Goto Top
Hi!

Ja, das Dateiformat ist gif, das sollte m. E. aber keine Rolle spielen.
In Word 2000 habe ich die Möglichkeit, eine Grafik entweder "einfügen", "Verknüpfen zu Datei" oder "Einfügen und Verknüpfen", s. Bild (wie kann ich hier ein Bild hochladen? In der Formatierungshilfe steht nur dass aber nicht wie...).
Wenn ich ein Bild "Einfüge und Verknüpfe", dann kann ich die ursprüngliche Grafik-Datei verändern und beim nächsten Öffnen von Word 2000 habe ich die aktuelle Grafik im Word-Dokument.

Gruß
Steffen Kuch
Mitglied: 76109
76109 Mar 09, 2010 at 14:48:45 (UTC)
Goto Top
Hallo Steffen!

Was mir natürlich als allererstes auffällt, ist die Tatsache, dass Dein Makro immer nur einmal mit dem gleichen Object funktioniert, da Du das Object in Zeile 24 zu Shape konvertierst. Dann ist das Object anstatt ..InlineShap(1) dann mit ..Shape(1) ansprechbar.

Gruß Dieter

PS. Ich muss jetzt leider weg und werde mich später nochmal damit beschäftigen.
Mitglied: 76109
76109 Mar 09, 2010 at 18:21:27 (UTC)
Goto Top
Hallo Steffen!

Also, wie bereits erwähnt, kann das Makro nur einmal für eine importierte Grafik ausgeführt werden. Dadurch, dass in Deinem Code in Zeile 24 (bei mir 31) das InlineShap in ein Shap konvertiert wird, entsteht ein neues Object. D.h. das InlineShape(1) existiert nicht mehr, sondern nur noch Shape(1). Also, muss bei Bedarf die Grafik gelöscht und neu importiert werden.

Dein Makro habe ich ein wenig angepasst, dass eine Fehlermeldung ausgibt, falls das Object schon per Makro angepasst wurde.
Sub GrafikEditieren()
    On Error Resume Next    'Fehlerbehandlung deaktivieren  
    
    ActiveDocument.InlineShapes(1).Select
    
    If Err Then
        MsgBox "Die Anpassung für das gleiche Object ist nur einmal möglich!", vbExclamation, "Fehler"  
        Exit Sub
    End If
    
    On Error GoTo 0         'Fehlerbehandlung wieder aktivieren  

    With Selection.InlineShapes(1)
        .Fill.Visible = msoFalse
        .Fill.Transparency = 0#
        .Line.Weight = 0.75
        .Line.Transparency = 0#
        .Line.Visible = msoFalse
        .LockAspectRatio = msoTrue
        'Mit .scale... bekomme ich eine Prozentuale Größenveränderung hin.  
        .ScaleHeight = 70
        .ScaleWidth = 70
        .PictureFormat.Brightness = 0.5
        .PictureFormat.Contrast = 0.5
        .PictureFormat.ColorType = msoPictureAutomatic
        .PictureFormat.CropLeft = 0#
        .PictureFormat.CropRight = 0#
        .PictureFormat.CropTop = 0#
        .PictureFormat.CropBottom = 0#
        'In ein 'flexibles' Format bringen  
        .ConvertToShape
        'Layouttyp festlegen.  
    End With
    
    With Selection.ShapeRange.WrapFormat
        .Type = wdWrapSquare
        'Nur Umbruch links  
        .Side = wdWrapLeft
        'Abstand links 1 cm, ansonsten 0 cm  
        .DistanceLeft = CentimetersToPoints(1)
        .DistanceRight = CentimetersToPoints(0)
        .DistanceTop = CentimetersToPoints(0)
        .DistanceBottom = CentimetersToPoints(0)
        .AllowOverlap = False
    End With
End Sub

Gruß Dieter
Member: SteffenKuch
SteffenKuch Mar 10, 2010 at 09:07:02 (UTC)
Goto Top
Guten Morgen!

Danke für deine Mühe, aber soweit ich das verstanden habe, löst das nicht mein ursprüngliches Problem.

Gruß
Steffen
Mitglied: 76109
76109 Mar 10, 2010 at 10:55:11 (UTC)
Goto Top
Hallo Steffen!

Verstehe ich nicht. Ich habe keine Probleme mit dem erstellen oder ändern einer Verknüpfung mit der Grafik, sowohl vor als auch nach der Anpassung der Grafik. Allerdings nutze ich die Office-Version 2002 und wenn's in Version 2000 nicht geht, dann kann ich Dir leider nicht weiterhelfen?

Gruß Dieter
Member: SteffenKuch
SteffenKuch Mar 11, 2010 at 06:43:23 (UTC)
Goto Top
Hallo!

Ich bin mir nicht sicher, ob ich mich verständlich ausgedrückt habe.
Es geht nicht darum, eine Verknüpfung zu einer Grafik zu erstellen, sondern eine Grafik, die ich per "Einfügen und Verknüpfen" in mein Word 2000-Dokument eingefügt habe, nachträglich per VBA zu verändern.
Wenn ich ein Bild hier veröffentlichen könnte, dann könnte ich das vielleicht besser zeigen.

Gruß
Steffen
Mitglied: 76109
76109 Mar 11, 2010 at 08:05:36 (UTC)
Goto Top
Hallo Steffen!

Vielleicht habe ich mich jetzt missverständlich ausgedrückt. Ich rede ja von einer eingefügten Grafik, ansonsten wäre es kein InlineShap sondern ein Shape und Dein Makro würde niemals funktionen.

Gruß Dieter