在Excel中获取打开的Word文档的名称

米哈尔·罗斯勒

我打开了一个.xlsm工作簿和一个.docx文档。
代码是Excel VBA。

我想在MsgBox中显示Word文件的名称。
如何在Excel VBA中引用Word文档?

我在这里找到代码https://excel-macro.tutorialhorizo​​n.com/vba-excel-get-the-instance-of-already-opened-word-document/

在我重写它之后,它给了我这个错误:

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

我的Excel VBA编辑器工具->参考屏幕截图。
在此处输入图片说明

马修·金登(Mathieu Guindon)

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章