2016-04-12 5 views
0

Diese Funktion erstellt ein Word-Dokument, speichert und schließt es, schlägt jedoch fehl, wenn ich versuche, es erneut zu öffnen. Es besagt, dass dies beim Remote-Aufruf nicht funktioniert. Was ist die richtige Übung, um ein Word-Dokument wieder zu öffnen? Oder ist es unnötig zu schließen und wieder zu öffnen? Es scheint, dass es Schwierigkeiten bei der Kommunikation zwischen Wort und Excel gibt.So übertragen Sie ein Diagramm von Excel nach Word

Sub tester() 
    Dim wordApp As Object 
    Dim wordDoc As Object 
    Dim appendDate As String 
    Set wordApp = CreateObject("Word.Application") 
    wordApp.Visible = True 

    appendDate = "Y" 
    fName = "robot" 

    If appendDate = "Y" Or appendDate = "y" Then 
     fName = ThisWorkbook.Path & "\" & fName & "-" & Format(Now(), "yyyymmdd-hhmm") & ".docx" 
    Else 
     fName = ThisWorkbook.Path & "\" & fName & ".docx" 
    End If 

    wordApp.Documents.Add.SaveAs2 fileName:=fName 
    wordApp.Documents.Close 
    wordApp.Application.Quit 
    Set wordDoc = wordApp.Documents.Open(fileName:=fPath, readOnly:=False) 
    ThisWorkbook.Sheets("Sheet1").ChartObjects(1).Activate 
    ActiveChart.ChartArea.Copy 
    wordDoc.Application.Selection.PasteSpecial Link:=False, DataType:=wdPasteOLEObject, Placement:=wdInLine 

End Sub 
+0

Sie nicht wieder ein Objekt erstellen, bevor Sie 'verwenden wordDoc' Set, da Sie die Anwendung direkt vor aufhören werden? – Dan

+0

Es ist unnötig, in Ihrem Fall zu schließen und wieder zu öffnen. Arbeiten Sie einfach mit dem Objekt und schließen Sie es am Ende. –

Antwort

0

Dies ist, wie ich es tun würde

Option Explicit 

Const wdFormatXMLDocument As Integer = 12 

Sub tester() 
    Dim wordApp As Object, wordDoc As Object 
    Dim appendDate As String, FName As String 

    Set wordApp = CreateObject("Word.Application") 

    wordApp.Visible = True 

    appendDate = "Y" 
    FName = "robot" 

    If UCase(appendDate) = "Y" Then '<~~ Unsure of this as you are already setting the value of Y 
     FName = ThisWorkbook.Path & "\" & FName & "-" & Format(Now(), "yyyymmdd-hhmm") & ".docx" 
    Else 
     FName = ThisWorkbook.Path & "\" & FName & ".docx" 
    End If 

    Set wordDoc = wordApp.Documents.Add 

    ThisWorkbook.Sheets("Sheet1").ChartObjects(1).Activate 
    ActiveChart.ChartArea.Copy 
    wordApp.Selection.PasteSpecial Link:=False, DataType:=0, Placement:=0 

    wordDoc.SaveAs2 Filename:=FName, FileFormat:=wdFormatXMLDocument 

    wordDoc.Close (False) 

    wordApp.Quit 

    Set wordDoc = Nothing 
    Set wordApp = Nothing 
End Sub 

Screenshot

enter image description here

+0

Vielen Dank für die Information. Ich versuchte das und bekam einen Fehler "Wort App hat funktioniert", wenn diese Zeile ausgeführt wird: 'wordApp.Selection.PasteSpecial Link: = False, DataType: = wdPasteOLEObject, Platzierung: = wdInLine' – teepee

+0

Ich habe es gerade getestet und es funktioniert gut –

+0

Hmm. Ich habe Version 2010 auf Windows 7 ausgeführt. Würde das bedeuten, dass ich dort etwas ändern muss? – teepee

0

Da Sie die Word.Application beenden Sie kein wordApp mehr da ist, so hat Documents.Open keine Umgebung, in der ausgeführt werden soll.

Wenn Sie eine Datei an einem beliebigen Punkt öffnen, direkt, ohne erste Start der Anwendung, die Sie GetObject verwenden können:

Set WordDoc = GetObject (FName)

Wenn Sie das Wort ansprechen müssen. Anwendung zu einem späteren Zeitpunkt, nach der Verwendung von GetObject die Datei zu öffnen:

Set wordApp = wordDoc.Application 
Verwandte Themen