0

我在让我的嵌入式文档在旧版本的 MS Office 上运行时遇到问题。我相信问题在于我如何声明我的对象,但不确定如何使用后期绑定声明我的嵌入式文档(我对这个概念和 vba 仍然很陌生)。下面是我目前如何与一段代码一起进行变量声明。它在 Excel 2013 中运行良好,但由于我声明变量的方式(我相信),它在 2010 年无法运行。

Dim oDoc As Word.Document
Dim oTemplate As Word.Document
Dim wdObj As OLEObject
Dim wdObj2 As OLEObject

'Deselect anything selected
Range("A1").Select

'Copy content of template
Set wdObj = Sheets("Template").OLEObjects("Template")
wdObj.Activate
Set oTemplate = wdObj.Object
oTemplate.Content.Copy

'Initialize letter document
Set wdObj2 = Sheets("Report").OLEObjects("Letter")
wdObj2.Activate
Set oDoc = wdObj2.Object

'Erase contents and replace with clean template
oDoc.Content.Delete

oDoc.Range.PasteAndFormat _
    wdFormatOriginalFormatting

我尝试将 oDoc 和 oTemplate 设置为“作为对象”,但不确定如何将它们链接回 word 对象。这样做只会导致库引用在 PasteAndFormat 调用的“wdFormatOriginalFormatting”上失败。

我一直在扯头发试图弄清楚这一点。任何帮助将不胜感激。谢谢!

4

2 回答 2

3

首先,确保您Option Explicit在代码模块中使用。那么,当您尝试编译时,它应该会提醒您wdFormatOriginalFormatting.

为什么?

wdFormatOriginalFormatting是 Word 对象模型中的枚举常量。它在 Excel 中不存在,除非您使用早期绑定。

解决方案

当您使用后期绑定时,您需要为这些常量声明和赋值,因为它们在编译时或运行时是不知道的:

Const wdFormatOriginalFormatting as Long = 16

然后,此行不应导致错误:

oDoc.Range.PasteAndFormat _
    wdFormatOriginalFormatting
于 2015-02-24T14:51:36.140 回答
1

使用后期绑定,您不能使用早期绑定的任何预定义常量,因为当时Dim不知道您的意思是哪个对象(这是早期绑定的优势)......另一方面,您不需要创建引用到图书馆。

现在用于将 OLE 对象 (Word) 链接回 Document 对象...

对于嵌入的对象,你会反过来……通常你会首先创建/打开应用程序,然后是应用程序中的文档……这里我们使用 OLE 动词来立即打开嵌入的文档,然后捕获应用程序...

Sub LateBinding()
Dim WApp As Object
Dim wdobj As Object
Dim wdOLE As OLEObject

    ' create a reference to the OLE object
    Set wdOLE = ActiveSheet.OLEObjects(1)

    ' open the OLE object using its application (whatever that is)
    wdOLE.Verb xlVerbPrimary

    ' create a reference to the real object inside the OLE object
    Set wdobj = wdOLE.Object

    ' create a reference to the application used by wdobj
    Set WApp = wdobj.Application

    ' start using the application ... let's move the cursor a bit
    ' hoping it is REALLY a WORD type of object ... we could test that before of course
    ' note we cannot use predefined WORD constants here, hence Unit and Count 
    WApp.Selection.MoveDown Unit:=5, Count:=1


End Sub

现在 OLE 对象被链接(返回)到一个真实的文档对象和(返回)它的应用程序。

希望这是你想知道的...

于 2015-02-24T14:59:47.210 回答