2016-06-28 17 views
1

Ich versuche, einen Code zu erstellen, in dem Diagramme aus einer XLS-Datei in ein Word-Dokument mit der PasteSpecial-Eigenschaft (Bild (erweiterte Metadatei). Ich möchte das vorhandene ändern . Diagramme des Dokuments neue Also, ich dachte, dass OK wäre Lesezeichen für die bestehenden Charts mit I OFFICE bin mit 2007Kopie von XLS-Dokument in Word mit VBA

ich habe den folgenden Code geschrieben:.

 Dim YMApp As Word.Application 
     Dim YMDoc As Word.Document 
     Dim B as Bookmark 
     paaath = "D:\" 
     dime = "NameOld.doc" 
     dime2 = "NameNew.doc" 
     Set YMApp = New Word.Application 
     YMApp.Visible = True 
     Set YMDoc = YMApp.Documents.Open(paaath & dime) 
     Word.Documents(dime).SaveAs (paaath + dime2) 
     For k = 1 To 6 
      Windows("New.xls").Activate 
      Sheets("graph").Select 
      Range("L" + Trim(Str(br(k))) + ":V" + Trim(Str(br(k) + 24))).Select 
      Selection.Copy 
      ddd = "bm" + Trim(Str(k)) 
      Set B = YMDoc.Bookmarks(ddd) 
      YMApp.Selection.PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=B 
     Next k 
     YMDoc.Close 
     YMApp.Quit 
     Application.CutCopyMode = False 
     ActiveWorkbook.Close 
    End 
End Sub 

die Problem ist, dass durch diesen Code die Lesezeichen, die bereits erstellt wurden, nicht erkannt werden.Wie man mit dem Problem fertig wird?

+0

Was meinen Sie mit „die Lesezeichen nicht erkannt werden“? Erhalten Sie einen Fehler? Oder entspricht die Ausgabe nicht Ihren Erwartungen? Bitte erläutern ... –

+0

Sorry, für die falsche Aussage. Ich bin kein Spezialist. Das ist wie ein Hobby und ich versuche die Zeit für die Umsetzung meiner Arbeit zu reduzieren. Ich erhalte keinen Fehler, einfach werden die Diagramme nicht dort platziert, wo die Lesezeichen sind, sondern am Anfang des Blattes übereinander. – Georgy

Antwort

0

Das Placement Argument von PasteSpecial akzeptieren keine Bookmark Objekt:

Set B = YMDoc.Bookmarks(ddd) 
YMApp.Selection.PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=B 

Stattdessen dauert es eine WdOLEPlacement constant.

Ich denke, Sie müssen das Lesezeichen auswählen, bevor Sie die PasteSpecial tun. Möglicherweise müssen Sie auch vorhandene Diagramme (falls vorhanden) löschen.

Ungeprüfte, aber ich denke, Sie so etwas wie dieses brauchen:

Dim wdRange as Word.Range 
Set B = YMDoc.Bookmarks(ddd) 
Set wdRange = B.Range 

YMApp.Selection.GoTo What:=wdGoToBookMark, Name:=B.Name 

' Delete existing shapes & bookmark if any: 
On Error Resume Next 
YMDoc.ShapeRange(1).Delete 
wdRange.Delete 
On Error GoTo 0 
YMApp.Selection.PasteSpecial DataType:=wdPasteMetafilePicture, Placement:=0 'Or 1 

'Add the bookmark back in place: 
MDoc.Selection.Bookmarks.Add Name:=ddd, wdRange 
+0

Vielen Dank für diesen Vorschlag: möglicherweise haben Sie Recht - Placement-Argument akzeptiert kein Lesezeichenobjekt. Nachdem ich den Code debuggte, gab es bei der letzten Anweisung einen Fehler, der sagte, dass das erste Lesezeichen nicht mehr verfügbar ist. und das Diagramm war am Anfang des Wortes Dokument. Wie ich schon sagte, bin ich kein Spezialist (ich habe etwas Erfahrung mit VBA, aber nicht genug in diesem "Wort Objekte, Lesezeichen" und so weiter. Könnten Sie bitte etwas anderes vorschlagen. – Georgy

+0

Sie haben recht, das bestehende 'B' Lesezeichen wurde gelöscht, ändern Sie die letzte Zeile in: 'YMDoc.Bookmarks.Add ddd, wdRange' –

+0

Alles sieht" gut "nur die Platzierung ist nicht wo ich sein möchte. Durch diesen Code ist die Platzierung des Diagramms, wo der Cursor . Am Anfang ist (bevor das Lesezeichen auswählen) ich habe versucht, YMDoc.ShapeRange (1) .Delete On Error GoTo 0 YMApp.Selection.PasteSpecial Datentyp: = wdPasteMetafilePicture, Platzierung: = 0 ‚oder 1 – Georgy