我在使用旧版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他们" As Object"但我不确定如何将它们链接回一个单词对象。这样做只会导致库引用在PasteAndFormat调用" wdFormatOriginalFormatting"上失败。
我一直在试图弄清楚我的头发。任何帮助将不胜感激。谢谢!
答案 0 :(得分:3)
首先,确保您在代码模块中使用Option Explicit
。然后,当您尝试编译时,它会提醒您wdFormatOriginalFormatting
的问题。
为什么?
wdFormatOriginalFormatting
是Word对象模型中的枚举常量。除非您使用早期绑定,否则它在Excel中不存在。
<强>解决方案强>
使用后期绑定时,需要声明并为这些常量赋值,因为它们在编译时或运行时都不知道:
Const wdFormatOriginalFormatting as Long = 16
然后,这一行不应该导致错误:
oDoc.Range.PasteAndFormat _
wdFormatOriginalFormatting
答案 1 :(得分:1)
使用Late Binding,你不能使用早期绑定的任何预定义常量,因为在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对象链接(返回)到真实文档对象和(返回)其应用程序。
希望这是你想知道的......