none
Word 2010 wdFieldIncludePicture arbeitet unzuverlässig

    Frage

  • Hi,

    ich benutze Tabellen als Container um meine Bilder in Word einzubinden. In die Tabellen füge ich dann die Bilder mittels Feld "wdFieldIncludePicture" ein.

    Mit dem folgenden Code, der unter Word2003 jahrelang problemlos funktioniert hat, möchte ich alle Dateinamen der Bilder im Dokument ermitteln, um Sie beim E-Mail-Versand als extra Dateien mitsenden zu können.

    Unter Word 2010 wird jetzt jedes Feld bis zu viermal gefunden. Also dann gleichmäßig, entweder werden alle Bilder ein-,zwei-, drei oder viermal gefunden.

    Ich kann mir das Verhalten absolut nicht erklären.

    Hat jemand eine Idee oder kann das Verhalten nachvollziehen ?

    Gruss und vielen Dank schon mal

    Thomas !

    ReDim aAttachPaths(0)
    ZielDat$ = ufMail.Tag
    ufMail.Tag = ""
    aAttachPaths(0) = ZielDat$
    If cbBildMail Then BildVerkl
      
    If cbVerknuepfen Then
       For Each oPicfeld In .Sections.Last.Range.Fields
          If oPicfeld.Type = wdFieldIncludePicture Then
             AnzFeld% = AnzFeld% + 1
             If cbBildMail Then
                Pic$ = "Mail" & oPicfeld.LinkFormat.SourceName
             Else
                Pic$ = oPicfeld.LinkFormat.SourceName
             End If
             ReDim Preserve aAttachPaths(AnzFeld)
             aAttachPaths(AnzFeld) = .Path & "\" & Pic$
          End If
       Next oPicfeld
    End If

    Freitag, 4. Januar 2013 09:47

Alle Antworten

  • Hi,

    mir ist noch eingefallen, dass ich inzwischen auf einem System mit Quad-Prozessor arbeite.

    Kann es sein, dass der Fehler evtl. damit zu tun hat. Also dass der Code hierdurch bis zu viermal

    abgearbeitet wird ?

    Viele Grüsse

    Thomas !

    Donnerstag, 17. Januar 2013 07:34
  • Hallo Thomas,

    sollte es eigentlich nicht! Du kannst aber versuchen im Taskmanager den Word-Prozess auf einen einzigen Core zu zuweisen. Danach lässt Du noch mal deinen Code laufen. Schau mal was dann passiert.

    Gruß

    Viktor

    Donnerstag, 17. Januar 2013 12:16
  • Hallo Victor,

    ich habe im Task-Manager schon nach alle möglichen Einstellungen gesucht, habe aber noch nicht gefunden, wo man Word nur einem Prozessor zuweisen kann !

    Kannst du mal verraten wie das geht ??

    Viele Grüsse

    Thomas !

    Donnerstag, 17. Januar 2013 20:23
  • Hallo Thomas,

    Im Task-Manager gehst Du auf den Reiter "Prozesse". Dort müsstest Du den Prozess "WINWORD.exe" finden. Prozess markieren und im Kontextmenü (rechte Maustaste) wählst Du die Option "Zugehörigkeit festlegen..." Jetzt öffnet sich ein Dialog, der alle Kerne zeigt. Es sind wahrscheinlich alle angehakt. Jetzt kannst Du Dir aussuchen auf welchem Kern Word laufen soll. Das war es schon.

    Gruß

    Viktor

    Freitag, 18. Januar 2013 07:26
  • Hallo Viktor,

    ja ich habe es gefunden, aber wie Du schon vermutest hast, liegt es daran nicht.

    Kann das Verhalten jemand nachvollziehen ?

    Hat jemand eine Idee wie man die Sache umgehen könnte und sonst alle Dateinamen der eingefügten Bilder ermitteln könnte ?

    Gruß

    Thomas !

    Freitag, 18. Januar 2013 07:45
  • Hallo Thomas,

    kannst Du ein kleines Beispiel zur Verfügung stellen, dann würde ich es mal vor Ort testen. 

    Gruß

    Viktor

    P.S. Probier es mal mit dem Shape-Objekt

    • Bearbeitet vhirsch Freitag, 18. Januar 2013 09:12 Ergänzung
    Freitag, 18. Januar 2013 08:02
  • Hallo Victor,

    ich bin inzwischen ein Stück weitergekommen.

    Nicht der hier vorgestellte Code arbeitet unzuverlässig, sondern es sind wirklich mehrere wdFieldIncludePicture-Felder vorhanden. Und zwar wird mit jedem Abspeichern ein weiteres Feld hinzugefügt. Entsprechend wächst auch die Dateigröße. Also wenn man das Dokument öffnet und nur ein Leerzeichen hinzufügt und es anschließend abspeichert, ist die Datei mehrere hundert Byte größer. Wenn man sich im Dokument die Feldfunktionen ansieht, kann man jedoch nur ein Feld sehen, da sie offenbar an einer Stelle übereinander liegen.

    Anders wenn man die docx-Datei in .zip umbenennt und sich dann die Datei document.xml ansieht. Dort erkennt man dann, dass mehrere wdFieldIncludePicture-Felder vorhanden sind. Ich muss mir jetzt nochmal meinen Code genau ansehen, ob ich da was reinschreibe oder ob es wirklich ein Fehler von Word ist.

    Ich melde mich, wenn ich näheres weiß

    Gruß Thomas !

     

    Samstag, 19. Januar 2013 10:15
  • Hallo Victor,

    es scheint wirklich ein Fehler in Word2010 zu sein.

    Teste mal bitte folgendes und teile mit, ob du auf das gleiche Ergebnis kommst !

    - ein neues Worddocument anlegen

    - mit strg + F9 ein Feld anlegen

    - in das Feld folgenden Code eingeben: includepicture "bild1.jpg" (Bild und Worddatei müssen sich im gleichen Verzeichnis befinden)

    - das Dokument mehrmals öffnen, kleine Änderungen vornehmen und anschließend abspeichern

    - die Worddatei in eine -zip-Datei umbenennen

    - aus der zip-Datei aus dem Ordner Word die Datei document.xml herauskopieren 

    - die Datei mit dem Internetexplorer öffnen

    - es sind jetzt mehrere includepicture-Felder erkennbar, wobei in diesen immer der kpl. Dateipfad angegeben wird (zb. INCLUDEPICTURE "C:\\temp\\Bild1.jpg" \* MERGEFORMATINET)

    - die Datei wächst also mit jedem speichern und fügt automatisch Code hinzu - das kann doch nicht normal und gewollt sein ?!

    Gruß

    Thomas !

    Samstag, 19. Januar 2013 16:43
  • Hallo Thomas,

    das Dokument wird auch bei mir immer größer. Es ist wohl so gewollt. Eine gute Erklärung findest du hier. Abschalten kann man das wohl mit der Option "Zufallszahlen zur Verbesserung der Kombiniergenauigkeit speichern" (zu finden unter Optionen->Sicherheitscenter). Das würde auch erklären warum die Datei mit jeder Änderung wächst. Schau mal ob das Abschalten der Option das Problem löst.

    Gruß

    Viktor


    Vielleicht hilft ja noch dieser Link
    • Bearbeitet vhirsch Montag, 21. Januar 2013 09:39 Egänzung
    Montag, 21. Januar 2013 09:15
  • Hallo Viktor,

    ich habe mir nun so geholfen, dass ich den Code dahingehend umgeschrieben habe, dass ein neues Attachment für die Mail nur erzeugt wird, wenn der neue Feldname ungleich dem des altes Feldnamens ist. Da alle gleichnamigen Felder direkt hintereinander erzeugt werden, lässt sich dies mit einer zusätzlichen Zeile Code bewerkstelligen.

    Ich bin auch deinem Hinweis mit dem Shape-Object nachgegangen. Das Problem ist aber, dass man zwar mittels VBA die Bilder einfügen kann, anschließend jedoch nicht mehr an die Dateinamen der eingefügten Bilder gelangt - und genau das möchte ich ja.

    Ein weiteres Manko habe ich noch entdeckt, die Bilder werden offensichtlich nicht automatisch verkleinert, wenn sie mit dem includepicture-Feld eingefügt werden, auch wenn diese Option gesetzt wurde.

    Die Option mit den Zufallszahlen hat leider auch nichts gebracht.

    Besonders ärgerlich ist, dass sich an der Misere offensichtlich seit Word2007 nicht geändert hat.

    Gruß und vielen Dank

    Thomas !

    Montag, 21. Januar 2013 13:58
  • Hallo Thomas,

    hast Du noch das Bereiningen des Dokuments probiert (Letzer Link von meiner Antwort)?

    Gruß

    Viktor

    Montag, 21. Januar 2013 14:02
  • Hallo Viktor,

    nein das bereinigen des Dokumentes hat auch nicht gebracht. Es werden ja auch nicht irgendwelche Zusatzinformationen in das Dokument geschrieben, sondern es wird für jedes includepicturefeld beim Speichern ein zusätzliches includepicturefeld in das Dokument geschrieben, und zwar mit absolutem Pfad, ich verwende einen relativen Pfad.

    Gruß Thomas !

    Dienstag, 22. Januar 2013 07:19
  • Ein weiteres Manko habe ich noch entdeckt, die Bilder werden offensichtlich nicht automatisch verkleinert, wenn sie mit dem includepicture-Feld eingefügt werden, auch wenn diese Option gesetzt wurde.

    zu diesem Problem habe ich zufällig diesen Beitrag gefunden

    "Alternativ kannst du Bilder mit Hilfe des IncludePicture-Felds verknüpfen. Dann stehen dir jedoch die neuen Bildtools aus Office 2010 nicht zur Verfügung. Die Bildformatierung erfolgt im Kompatibilitätsmodus"

    Vielleicht ist der Kompatibilitätsmodus, dass Problem?

    Gruß

    Viktor

    P.S. Habe noch einen interessanten Link gefunden. Ganz unten wird die Option "Links beim Speichern aktualisieren" erwähnt". Wenn ich diese Option deaktiviere bekomme ich keine Doppeleinträge. 

    • Bearbeitet vhirsch Dienstag, 22. Januar 2013 09:42
    Dienstag, 22. Januar 2013 08:54
  • Hallo Victor,

    also ich habe jetzt alles mögliche probiert, auch Bilder verknüpfen und auch die von dir beschriebene Option "Links beim Speichen aktualisieren" habe ich deaktiviert.

    Es bleibt jedoch dabei, bei jedem Speichern, wird der Word-Datei ein weiteres includepicture-Feld (für jedes bisheriges Feld) hinzugefügt und zwar mit einem absoluten Pfad.

    Ich kann mir wirklich nur so weiterhelfen, dass ich den VBA-Code wie beschrieben erweitere und nicht nur nach jedem neuen include-Picture-Feld suche sondern zusätzlich überprüfe, ob dieses auch einen neuen Namen enthält. Die Situation ist zwar immer noch unbefriedigend, aber so funktioniert es wenigstens.

    Vielen Dank

    Gruß Thomas !

    Freitag, 25. Januar 2013 07:25
  • Hallo Thomas,

    wie Du siehst habe ich mich in das Thema verbissen ;-) Ich hatte noch mal nach dem Thema gesucht und das hier gefunden. Mit folgenden Makro erhalte ich keine Doppeleinträge!!

    With ActiveDocument
    fieldcount = .Fields.Count
    MsgBox (fieldcount)
    For Each Field In .Fields
      MsgBox (Field.LinkFormat.SourceFullName)
    Next Field
    MsgBox ("Bereinigen")
    For Each Field In .Fields
        Field.Update
    Next Field
    For Each Field In .Fields
        MsgBox (Field.LinkFormat.SourceFullName)
    Next Field
      
    fieldcount = .Fields.Count
    End With

    Was .update genau bewirkt weiss ich nicht, wenn es aber das Problem löst, wäre es ein meiner Meinung nach vertretbarer Workaround.

    Gruß und schönes Wochenende

    • Als Antwort vorgeschlagen vhirsch Freitag, 25. Januar 2013 15:04
    Freitag, 25. Januar 2013 10:03
  • Hallo Viktor,

    super das ist die Lösung - es funktioniert !

    Das ist genau das was ich gesucht habe.

    Ich verstehe zwar nicht warum die Felder beim Abspeichern, bzw. beim Öffnen des Dokumentes nicht aktualisiert werden, aber Hauptsache es funktioniert jetzt.

    Vielen Dank nochmal für die viele Geduld und die Mühe sich so tief in ein fremdes Thema zu vertiefen!

    Viele Grüsse

    Thomas !

    Freitag, 25. Januar 2013 14:40
  • Hallo Thomas,

    gerne. Das Problem hat meinen Ehrgeiz geweckt. Schön, dass es jetzt klappt.

    Gruß

    Viktor

    Freitag, 25. Januar 2013 15:04
  • 
    

    Hallo Viktor,

    ich wollte den Code noch etwas optimieren und habe die drei Zeilen Code:

    For Each Field In .Fields
        Field.Update
    Next Field

    in die Zeile:

    fields.update

    geändert - das klappt jedoch merkwürdigerweise nicht !

    Also gut ich werde also den Code so verwenden wie du geschrieben hast !

    Gruß Thomas !

    Samstag, 26. Januar 2013 19:32
  • Hallo Thomas,

    so wie ich das sehe musst Du alle Felder aktualisieren. Fields ist der Container für alle Felder. Wenn Du debuggst siehst Du das sich die Anzahl von Feld zu Feld reduziert (Count). Ob es eine globale Update-Funktion für alle Felder gibt weiß ich nicht, müsstest Du die Referenz konsultieren . Aber ich denke der Dreizeiler ist doch schon sehr kompakt ;-) Vielleicht hat ja noch Jemand eine andere Idee bzw. mehr Erfahrung mit dem Thema?? 

    Gruß

    Montag, 28. Januar 2013 07:25