1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Word 2002 VBA-Makro für Grafik

Discussion in 'Office-Programme' started by hajo, Jan 31, 2013.

Thread Status:
Not open for further replies.
  1. hajo

    hajo Kbyte

    Hallo,

    folgendes Makro stellt eine markierte Grafik hinter den Text, verschiebt aber die Grafik allein, ohne den Text im Dokument.

    Wie muß ich das Makro ändern, um die Funktion 'mit Text verschieben' zu aktivieren?

    Danke
    Hajo


    Sub ChangeLayout()
    '
    ' ChangeLayout Makro
    ' Makro erstellt am 04.04.2006 von
    '
    Dim objSelection As Object
    Dim strImageName As String
    Dim objImage As Shape

    On Error Resume Next
    Set objSelection = Selection.InlineShapes(1)
    If objSelection Is Nothing Then
    strImageName = Selection.ShapeRange.Name
    Set objImage = ActiveDocument.Shapes(strImageName)
    If objImage Is Nothing Then
    MsgBox Prompt:="Sie müssen eine Grafik markieren!", _
    Buttons:=vbCritical, _
    Title:="Grafik formatieren"
    Exit Sub
    End If
    Else
    Set objImage = objSelection.ConvertToShape
    End If
    On Error GoTo 0
    With objImage
    .WrapFormat.Type = wdWrapNone
    .LockAnchor = True
    .ZOrder msoSendBehindText
    End With
    Set objImage = Nothing
    Set objSelection = Nothing
    End Sub
     
  2. Eric March

    Eric March CD-R 80

    Ich werde mit der Aufgabe nicht recht warm.
    Wenn ich eine Grafik hinter den Text lege - inwieweit sollte sich diese dabei verschieben, geschweige denn der Text?
    Wenn du darauf aus bist, dass die Grafik nicht verankert ist sondern mit dem Text mitwandert dann musst du den Anker ausschalten. Nur sollte ein pures Hinter-den-Text-Legen da nichts beeinflussen. Seltsam.

    Eric March
     
  3. hajo

    hajo Kbyte

    Hallo Eric,

    es liegt z.B. ein Formular als Bilddatei vor, das ich mit Text ausfülle; also 'Hinter den Text'.
    Erweitere ich das Dokument um weiteren Text vor dem Bild, so sollen sich Bild und darin befindlicher Text im Dokument entsprechend nach unten verschieben.
    'Verankern' hat bei mir den Effekt, dass das Bild bei Seitenwechsel dieselbe Position annimmt, die es auf der vorangegangenen Seite hatte; das ist aber nicht gewünscht.

    Gruß
    Hajo
     
  4. Eric March

    Eric March CD-R 80

    Oha…
    Warum willst du vor dem Teil mit dem ›Formular‹ Text einfügen? Ich meine; ich finalisiere das, baue die Grafik drunter und fülle dann aus.

    Wenn die Grafik mit der ersten Ausfüllzeile verheiratet ist würde sie mitwandern wenn man drüber einfügt oder löscht. Darunter kann ich fröhlich ausfüllen.

    Persönlich würde ich aber so eine Grafik nicht hinter-den-Text-legen sondern über Kopf-Fußzeile einsortieren. Damit bleibt sie vom Fließtext unbeeinflusst, muss aber als einer der letzten Schritte im Layout nachjustiert werden.

    Eric March
     
  5. hajo

    hajo Kbyte

    Hallo Eric,

    Zu Frage 1:
    Das Dokument wird ständig erweitert, neueste Einträge am Dokumentanfang.

    Wenn die Grafik mit der ersten Ausfüllzeile verheiratet ist würde sie mitwandern wenn man drüber einfügt oder löscht. Darunter kann ich fröhlich ausfüllen.

    Was meinst Du mit 'verheiratet'? Die Beschreibung würde mein Problem lösen!

    Hajo
     
  6. Eric March

    Eric March CD-R 80

    Wenn ich den Cursor in die 3. Zeile… Falsch! …in den 3. logischen Absatz (¶) stelle, dann eine Grafik einfüge und diese über den Text lege (item: darunter lege), sie also aus ihrem Dasein als Riesenbuchstabe befreie (beobachte das wenn du per Tastatur markierst; ›schwarze Greifer‹), dann ist sie nomalerweise an diesne Absatz, und mehr noch an das angrenzende Zeichen, gekoppelt.
    Fügst du davor genügend Text ein wandert die Grafik mit runter, fügst du dahinter ein beeinflusst sie das nicht.

    Benimmt sich dein Word anders ist was im Argen das kaum zu kontrollieren sein dürfte. Nur besagtes Verankern sollte hier noch das Normalverhalten beeinflussen.


    Wenn ich persönlich offen sein soll: was du da treibst klingt vollkommen ungesund. Unterlegegrafiken zum Ausfüllen sind sowieso nicht die beste Idee, und dass sie in einem großen Text mitwandern sollen - daraus wird kein Schuh, wozu ist das gut? Word kennt Formularfelder für so was; Seitenorganisationen (Manuelle Umbrüche)…

    Eric March
     
  7. hajo

    hajo Kbyte

    Hallo Eric,

    interessante Ausführungen.
    Die eingefügte Grafik lässt sich erstmal nur mittels Tastatur bewegen.
    Nach 'Grafik formatieren ... Hinter den Text' ist automatisch 'Objekt mit Text verschieben' aktiviert, was ich mit meinem eingangs dokumentierten Makro nicht erreichen kann.
    (ansonsten ist die Funktionalität identisch: verschieben mit der Maus, drehen der Grafik.)

    Leider lässt sich die Befehlsfolge nicht als Makro aufzeichnen und ich kann deshalb nicht den VBA-Command für die Funktion 'Objekt mit Text verschieben' herauslesen.

    Ich würde einige Klickse sparen, wenn ich den Command einfügen könnte.
    Du merkst, dass sich meine VBA-Kenntnisse auf 'Makros aufzeichnen' beschränken.

    Gruß
    Hajo
     
  8. Eric March

    Eric March CD-R 80

    Mein Probelm ist - mir leuchten diverse Dinge nicht ein…

    • Wo liegt das Problem eine Grafik neu einzufügen und zu prüfen wie sie sich dann gemäß der von mir als normal eingestuften Maßnahmen verhält?

    • Was treibt ihr überhaupt in solche Lagen zu kommen? Sie Beschreibung mit dem Riesendokument kriege ich nicht in den Kopf, sorry…
    Mir stehen Makros zu Verfügung mit denen ich ein Bild einflechte und über den Text lege - aber was sie dir bei dem was du willst helfen sollen begreife ich nicht da ich nicht sehen was sie an Nützlichem bewirken könnten.

    Code:
    Sub BildReintun()
    Dim Name As String
    Dim Links As Single
    Dim Oben As Single
     Links = Selection.Information(wdHorizontalPositionRelativeToTextBoundary)
     Oben = Selection.Information(wdVerticalPositionRelativeToTextBoundary)
     With Dialogs(wdDialogInsertPicture)
      .Display
      Name = .Name
     End With
     If Name = "" Then Exit Sub
     Selection.InlineShapes.AddPicture FileName:=Name, LinkToFile:=False, SaveWithDocument:=True
     Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
     WordBasic.DrawDisassemblePicture
     ObjektTextflussAnker
     Selection.ShapeRange.Left = Links
     Selection.ShapeRange.Top = Oben
    End Sub
    Sub ObjektTextflussAnker()
     On Error Resume Next
     Selection.ShapeRange.RelativeHorizontalPosition = wdRelativeHorizontalPositionMargin
     Selection.ShapeRange.RelativeVerticalPosition = wdRelativeVerticalPositionMargin
     Selection.ShapeRange.LockAnchor = False
     [I]Selection.ShapeRange.WrapFormat.Type = wdWrapNone[/I]
    End Sub
    Über den eingebauten Dialog hole ich ein Bild ab und lege es über den Text.

    Ein Markiertes Bild [Grafikobjekt] das als ›Riesenbuchstabe‹ im text sitzt koppele ich so aus:
    Code:
    Sub BildÜberDenTextLegen()
     On Error Resume Next
     WordBasic.DrawDisassemblePicture
     TextflussOhne
    End Sub
    Sub TextflussOhne()
     On Error Resume Next
     [I]Selection.ShapeRange.WrapFormat.Type = wdWrapNone[/I]
    End Sub
    (Wie du siehst habe ich bestimmte Zeilen nicht ordentlich integriert; da muss ich doch gleich mal aufräumen…)

    Eric March
     
  9. hajo

    hajo Kbyte

    Hallo Eric,

    bei aller Mühe, die Du Dir mit mir gibst, habe ich ein Problem:

    Du versuchst zu verstehen, was ich will und versuchst mir meine Vorgehensweise auszureden.

    Ich möchte einfach die Erweiterung meines Makros (s. Anfang) um die eine Zeile, die bewirkt : Objekt mit Text verschieben

    (Bild markieren - Grafik formatieren - Layout - weitere - )

    Gruß
    Hajo
     
  10. Hascheff

    Hascheff Moderator

    Nun, ich verfolge die ganze Zeit den Thread und bin aber auch nicht schlauer als Eric March, deshalb habe ich mich bisher nicht eingemischt.

    > Ich möchte einfach die Erweiterung meines Makros

    Es wird sich vemutlich nicht machen lassen, wir haben schon das Gefühl, dass du "dir die Hose mit der Kneifzange anziehen" willst.

    Eigentlich willst du, dass dein Formular funktioniert. Nur, dass du auf ein Makro fixiert bist, weil eine komplizierte Angelegenheit eine komplizierte Lösung braucht.

    Mal abgesehen von der Tatsache, dass es sich bei dir um ein Formular handelt*, ist aber an deinem Problem nichts kompliziert. Die Microsoft-Programmierer haben sicher damit gerechnet, dass ein solches Verhalten erwünscht sein könnte.
    Du musst nur vor dem Einfügen der Grafik den Cursor an die richtige Stelle bringen, dann gleitet die Grafik mit, wenn du vor dieser Stelle Text einfügst. Einen Tipp kann ich noch geben: Manche Option bietet sich erst, wenn statt der Grafik zuerst ein Textfeld eingefügt wird und in dieses dann die Grafik.


    * Für Formulare gibt es andere Werkzeuge, informiere dich in der Word-Hilfe.
     
  11. Eric March

    Eric March CD-R 80

    @Hascheff: «Textfeld» oder «Textbox»? :heilig:

    Was unser TO will sollte ihm m.E. nach wie von selbst passieren. Also muss da an der Wurzel was faul sein.

    Eric March
     
  12. hajo

    hajo Kbyte

    Es tut mir leid, wenn meine Ausführungen unklar sind.

    Gehen wir vom 'Formular' weg und nehmen nach Word kopierte Bilddateien, in die etwas hineingeschrieben werden soll; also nicht darunter oder darüber; deshalb 'hinter den Text'. Ausserdem kommen spätere Ergänzungen, auch wieder mit Bildern, an den Dokumentenanfang; also: 'Objekt mit Text verschieben'.
    Das möchte ich mit einem Makro erreichen.

    a) Nach dem Hineinkopieren hat das Bild schwarze Eckpunkte. Es verschiebt sich mit dem Text, liegt aber nicht hinter dem Text.
    Jetzt der Knackpunkt: wenn ich über 'Grafik formatieren ...' die Grafik hinter den Text lege, ist automatisch die Option 'Objekt mit Text verschieben' aktiviert; nach meiner Vorstellung sollte es dafür auch einen VBA-Command geben..
    'Grafik formatieren ...' lässt sich aber nicht mittels 'Makro aufzeichnen', der Cursor verwandelt sich in ein Kassettensymbol und nichts tut sich mehr.

    b) Mein Makro legt zwar das Bild hinter den Text ((Eckpunkte rund), die Option 'Objekt mit Text verschieben' ist jedoch deaktiviert.

    Ich möchte nun beide Abläufe zusammenfassen, also über ein Makro.

    Gruß
    Hajo
     
  13. Eric March

    Eric March CD-R 80

    Grummel…
    Ich habe schon von Anfang an kapiert was du willst. Und ich sage dir wieder und wieder dasselbe.

    Wo ich den Textcursor positioniert habe wird ein Bild (Grafikobjekt) eingefügt, ob über den Dialog oder schlicht per Strg+V. Diese Bild lege ich nun unter-den-Text (für den zu erzielenden Zweck eine völlig falsche Strategie). Allein hierfür ist kein Makro wirklich erforderlich (außer für die Bequemlichkeit des Hinter-den-Text-Legens.)
    Wenn nun oberhalb Text eingefügt wird ist es Standard, dass das Bild mitwandert. Wenn das nicht passiert ist am Dokument oder an Word etwas faul. Und da nützt dir auch kein Makro etwas!



    aka Riesenbuchstabe. Das Bild wandert mit wie ein - Buchstabe eben.

    Was ja wohl auch der Sinn der Übung sein sollte.

    Lache oder lache nicht - meine Zeile
    Selection.ShapeRange.WrapFormat.Type = wdWrapNone
    { Selection.ShapeRange.WrapFormat.Type = 3 }
    Macht genau das - und ich gebe zu ich kapiere nicht warum es bei mir über dem Text landet (was Code 6 wäre…)

    Ja, das tut er - muss er ja auch. Klicke ich dann rechts auf da Bild bekomme ich völlig normal das Kontextmenü dem ich eben zur Kontrolle die o.g. Zeile abgerungen habe.

    Eric March
     
  14. hajo

    hajo Kbyte

    Hallo Eric,

    Du hast ja Recht mit Deinem Grummel.

    Da wir ständig aneinander vorbei'reden', sollten wir hier Schluß machen.

    Ein Letztes:
    Dein VBA-Code bezieht sich auf 'Hinter den Text'; bewirkt aber eben nicht 'mit Text verschieben'.

    Danke für Deine Geduld.
    Gruß
    Hajo
     
  15. Eric March

    Eric March CD-R 80

    Der Code kann, zum Kuckuck, ja auch nichts was Word von sich aus Standardmäßig können muss!!!

    Wie reden nicht thematisch aneinander vorbei (ich bin voll im bilde), nur du willst nicht akzeptieren, was wir dir sagen: dein Word hat eine Macke! Die musst du finden! Scheitert das denn bei einem neuen Dokument ebenfalls?

    Eric March
     
  16. Hascheff

    Hascheff Moderator

    Vielleicht können dir Screenshots zeigen, dass wir dich verstanden haben und kein Makro nötig ist.
    Vorher:
    [​IMG]
    Nachher:
    [​IMG]
    "Ohne Zutun" stimmt nicht ganz:
    Die Grafik musste nach dem Einfügen positioniert werden und per Rechtsklick hinter den Text gestellt werden.
    Und nun das Wichtigste: Der Anker (im zweiten Bild links von der Grafik) muss mit der Maus an die richtige Stelle gezogen werden, links von dem Absatz, mit dem er wandern soll.
    Der Anker ist zu sehen, sobald du die Grafik markierst.

    Die Probe habe ich mit Office 2010 gemacht, aber vor Kurzem hatte ich noch Office 2000, da hat das auch so funktioniert. Nur, ob "hinter den Text stellen" mit Rechtklick geht oder den Weg in den Dialog erfordert, weiß ich nicht mehr.

    @ eric: Nu bleib mal ruhig. Ich denke, er hat nur den Anker nicht beachtet. Und ganz von allein ging es nicht, der Anker springt weg, wenn du die Grafik bewegst.
     

    Attached Files:

  17. hajo

    hajo Kbyte

    Ihr gebt Euch ja wirklich Mühe:

    Meine WORD-Version: Office XP Professional mit Frontpage; unter 'Info' angezeigt als 'Word 2002 (10.6866.6870) SP3.
    'Erkennen und Reparieren' ausgeführt.
    Jedes Mal ein neues Dokument geöffnet.

    Euer Vorschlag, der ja funktioniert :

    Grafik markieren
    Rechtsklick
    Grafik formatieren
    Layout
    Hinter den Text
    ok = 6 x Klick

    Mein Wunsch:

    Grafik markieren
    Makro in Menüzeile anklicken = 2 x Klick

    Gruß
    Hajo
     
  18. Eric March

    Eric March CD-R 80

    Den Code hast du von mir. Öffne den Makroeditor (vornehm: VBA-Editor), füge ein Modul ein [was letztliche einfach nur ein Ordnungselement ist] und klebe den Code in das Fenster des Moduls.
    Führe bei offenem Editor mal die Makros aus (die, die nicht van anderen aufgerufen werden) und beobachte was sie tun. Du solltest mit dem Tun eigentlich zufrieden sein. Nunmehr über Extras, Anpassen das Makro in die Symbolleiste bringen (und vielleicht das Symbol etwas aufhübschen).
    Der Rest sollte sich wie von selbst ergeben.

    Eric March
     
  19. hajo

    hajo Kbyte

    Nun, es bleibt bei 'hinter dem Text'.

    Ich habe natürlich weiter selbst probiert:

    Die Lösung:
    Nach Ablauf meines eingangs abgedruckten Makros lässt sich für die markierte Grafik der Makrorekorder starten und liefert folgendes Ergebnis:

    Sub CL2() ' für Grafik 'hinter den Text': hinzufügen 'mit Text verschieben'
    '
    ' Makro1 Makro
    ' Makro aufgezeichnet am 07.02.2013 von
    '
    Selection.ShapeRange.Fill.Visible = msoFalse
    Selection.ShapeRange.Fill.Solid
    Selection.ShapeRange.Fill.Transparency = 0#
    Selection.ShapeRange.Line.Weight = 0.75
    Selection.ShapeRange.Line.DashStyle = msoLineSolid
    Selection.ShapeRange.Line.Style = msoLineSingle
    Selection.ShapeRange.Line.Transparency = 0#
    Selection.ShapeRange.Line.Visible = msoFalse
    Selection.ShapeRange.LockAspectRatio = msoTrue
    Selection.ShapeRange.Rotation = 0#
    Selection.ShapeRange.PictureFormat.Brightness = 0.5
    Selection.ShapeRange.PictureFormat.Contrast = 0.5
    Selection.ShapeRange.PictureFormat.ColorType = msoPictureAutomatic
    Selection.ShapeRange.PictureFormat.CropLeft = 0#
    Selection.ShapeRange.PictureFormat.CropRight = 0#
    Selection.ShapeRange.PictureFormat.CropTop = 0#
    Selection.ShapeRange.PictureFormat.CropBottom = 0#
    Selection.ShapeRange.Left = 56.95
    Selection.ShapeRange.Top = 56.95
    Selection.ShapeRange.RelativeHorizontalPosition = _
    wdRelativeHorizontalPositionPage
    Selection.ShapeRange.RelativeVerticalPosition = _
    wdRelativeVerticalPositionParagraph
    Selection.ShapeRange.Left = CentimetersToPoints(2.01)
    Selection.ShapeRange.Top = CentimetersToPoints(0.01)
    Selection.ShapeRange.LockAnchor = False
    Selection.ShapeRange.WrapFormat.AllowOverlap = True
    Selection.ShapeRange.WrapFormat.Side = wdWrapBoth
    Selection.ShapeRange.WrapFormat.DistanceTop = CentimetersToPoints(0)
    Selection.ShapeRange.WrapFormat.DistanceBottom = CentimetersToPoints(0)
    Selection.ShapeRange.WrapFormat.DistanceLeft = CentimetersToPoints(0.32)
    Selection.ShapeRange.WrapFormat.DistanceRight = CentimetersToPoints(0.32)
    Selection.ShapeRange.WrapFormat.Type = 3
    Selection.ShapeRange.ZOrder 5
    End Sub

    Nochmals Danke für Eure Bemühungen.
    Hajo
     
Thread Status:
Not open for further replies.

Share This Page