2016-06-09 100 views
0

我有一個嵌入有Word文件的Excel電子表格作爲對象。 當我將該對象作爲模板打開並將其保存到文檔文件中時,Word標題中的名稱不會更改 並且Excel中的對象會受到影響。 像這樣:EXCEL,使用嵌入對象(.dot)作爲報告模板

For Each OLE In ActiveSheet.OLEObjects 
    If InStr(1, OLE.progID, "Word.Document", vbTextCompare) > 0 Then 
     OLE.Verb xlVerbPrimary 
     Set WordDoc = OLE.Object 
     WordDoc.SaveAs2 "c:\somewhere\a.doc", FileFormat:=WdSaveFormat.wdFormatDocument97 
     Exit For 
    End If 
Next 

我預計「另存爲」的稱號在Word中更改後爲「a.doc」,但名稱仍 「在somesheet.xls文件」,並在Excel中嵌入對象隨着WordDoc的進一步操作而改變。

是否可以使用嵌入式Word文件作爲模板而不創建必須重新打開的中間文件?

我可以打斷對象和打開的Word文件之間的連接嗎?

編輯:我正在創建一個報告使用該對象作爲模板。現在,SaveAs不僅會創建一個文件,還會影響模板。

+0

目前尚不清楚你在做什麼。如果使用SaveAs,則要在驅動器上的該位置創建一個文件(副本),並且需要在單獨的Word實例中打開它。嵌入的對象保持不變。該副本應該發生什麼?如果您想將它保留在Excel工作簿中,請複製OLE對象,然後對其進行處理。 (但是,您不能更改文件名稱「Workbook.xls中的文檔」。) –

+0

「SaveAs」方法之後,在Word實例中打開的文檔不是副本。打開的文檔已連接並保持與Excel中的對象連接。文檔的所有更改也影響對象(模板)。 我想破解文檔和excel對象之間的連接。 – hennep

+0

正如我所說的,如果你想使用作爲OLE對象存儲的文檔的「副本」,則需要實例化Word的一個實例並打開在該實例中保存的文件。您不能「斷開與OLE對象的連接」以使其獨立。 –

回答

0

我已經創建了一個函數來保存模板並退出連接到Excel的文檔。 我認爲它是Excel中的一個嚴重缺陷,不能從代碼中斷開連接。 我也沒有找到一種方法來識別一個對象(當一張紙上有更多的.dot模板時)。我現在正在爲此使用AltText。

Public Function SaveFileFromObject(EW As Excel.Worksheet _ 
     , sAltText As String, sFilename As String) As Boolean 
    On Error GoTo EH 
    Dim OLE As OLEObject, WD As Word.Document, bFound As Boolean 
    bFound = False 
    For Each OLE In EW.OLEObjects 
     If InStr(1, OLE.progID, "Word.Document", vbTextCompare) > 0 Then 
      If OLE.ShapeRange.AlternativeText = sAltText Then 
       OLE.Verb xlOpen 
       Set WD = OLE.Object 
       WD.SaveAs sFilename, FileFormat:=WdSaveFormat.wdFormatDocument97 
       WD.Close False 
       bFound = True 
       Exit For 
      End If 
     End If 
    Next 
    SaveFileFromObject = bFound 
EX: On Error Resume Next 
    Set OLE = Nothing 
    Set WD = Nothing 
    On Error GoTo 0 
    Exit Function 
EH: MsgBox "Error in SaveFileFromObject: '" & err.Description & "'" 
    SaveFileFromObject = False 
    Resume EX 
    Resume ' debug code 
End Function