EXCEL,使用嵌入对象(.dot)作为报告模板

时间:2016-06-09 10:48:27

标签: excel-vba ms-word ole vba excel

我有一个Excel电子表格,其中嵌入了Word文件作为对象。 当我将对象作为模板打开并将其保存到文档文件时,Word的标题中的名称不会更改 并且Excel中的对象受到影响。 像这样:

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

我希望在“SaveAs”之后Word中的标题更改为“a.doc”,但名称仍然是“somesheet.xls中的文档” 并且通过WordDoc上的进一步操作更改了Excel中的嵌入对象。

是否可以将嵌入的Word文件用作模板而无需创建必须重新打开的中间文件?

我可以断开对象与打开的Word文件之间的连接吗?

编辑:我所追求的是使用对象作为模板创建报告。现在,SaveAs不仅会创建一个文件,还会影响模板。

1 个答案:

答案 0 :(得分: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