2016-06-09 102 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