我打开了一个.xlsm工作簿和一个.docx文档。
代码是Excel VBA。
我想在MsgBox中显示Word文件的名称。
如何在Excel VBA中引用Word文档?
在我重写它之后,它给了我这个错误:
activex组件无法创建对象429。
Sub Get_Opened_Doc_Instance()
'Variables declaration
'Dim WordApp As Object
Dim WordApp As Word.Application
'Dim WordDoc As Object
Dim WordDoc As Word.Document
'Dim Text As String
'this variable is here because later I'm going to search this file.
Set WordApp = GetObject(, Word.Application)
'Set WordDoc = GetObject(, Word.Document)
WordApp.Visible = True 'this line or the next one returns the error
'activex component can't create object 429
MsgBox WordApp.ActiveDocument.Name
End Sub
GetObject
并且CreateObject
都接受String
表示ProgID的参数-Windows注册表中存在的文字字符串值,将类与特定的类型库相关联。
因此,您希望将该参数括在双引号中,以双引号分隔字符串文字:
Set WordApp = GetObject(, "Word.Application")
出现错误的原因是因为存在一个隐式默认成员调用,Word.Application
该调用返回的值为Word.Application.Name
,即字符串value "Microsoft Word"
,而“ Microsoft Word”不是有效的已注册ProgID。
在项目中具有对Word对象模型的引用意味着您可以执行以下操作:
Dim WordApp As Word.Application
Set WordApp = GetObject(, "Word.Application")
然后,对该WordApp
对象变量进行的每个成员调用都将在编译时验证(这是早期绑定的意思)。这也意味着您可以执行以下操作:
Dim WordApp As Word.Application
Set WordApp = New Word.Application
代替这个:
Dim WordApp As Word.Application
Set WordApp = CreateObject("Word.Application")
通过引用Word对象库,所有wdXxxxx
常量均已定义且可用。与此相对的是,您的用户必须在其计算机上具有与引用库完全相同的版本。
如果您的用户使用的Word / Office版本与您使用的版本不同,请考虑使用后期绑定。
您将失去wdXxxxx
直接使用常量的能力(您将需要使用它们的基础值,或者自己将其定义为Const
标识符或Enum
成员)。您还将失去编译时验证,智能感知/自动完成功能,无法New
从Word库中升级任何类的功能,并且Option Explicit
将无法在您进行的任何后期绑定成员调用中保护您免受打字错误的影响(预期运行) -time错误438(如果您做错了什么),但是您还将摆脱对特定版本的Word / Office的依赖。
要使用后期绑定,您需要声明事物As Object
,如下所示:
Dim WordApp As Object
Set WordApp = GetObject(, "Word.Application")
请注意,即使使用双引号,也无法使用:
'Set WordDoc = GetObject(, "Word.Document")
由于您不能创建Word.Document
-仅Word可以执行此操作,出于同样的原因,您不能创建- Excel.Worksheet
,只有Excel可以执行该操作。要创建Word.Document
,您需要调用的成员,WordApp
这将创建一个新文档(并返回对它的引用,您可以在本地变量中捕获该引用):
Dim WordDoc As Object 'early-bound: As Word.Document
'Set WordDoc = WordApp.ActiveDocument
Set WordDoc = WordApp.Documents.Add
MsgBox WordDoc.Name
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句