将现有 WORD 文档中的数据复制到从模板创建的新 WORD 文档(在代码中)

Copy data from existing WORD document to new WORD document created from template (in code)

第一次 post 虽然我可能会在爬行之前尝试 运行,但这是我的情况(使用 Word 2013)。

但这就是我开始感到非常困惑的地方...

当我开始通过模板创建新文档时,Project Explorer 看起来像这样...

Project Explorer on new document from template

现在我在 VBA 中打开一个现有文档 (Filled.docx) 以提供一个 Project Explorer 视图,例如..

Existing doc opened in preparation for copying of data

所以现在我有 2 个 ThisDocument 实例。

  1. 正在“(DOC Generator)”下执行代码

  2. 我想要 extract/copy 到(DOC 生成器)中的用户表单的数据是 ThisDocument 在(填充)中。

  3. 当我编辑完用户表单中的信息后,我将 像我一样保存 ThisDocument (Document1) 全新文档。

我遇到的困难是,如何引用现有文档中的 ActiveX 控件以将其复制到用户窗体。

类似这样的东西???

txt_Author = ThisDocument.lbl_AssessingOfficer.Caption, where

-ThisDocument.lbl_AssessingOfficer.Caption 旨在引用现有文档(已填充)中包含数据的标签。

除了当我测试这个时,ThisDocumentActiveDocument 都拾取 来自 ThisDocument (Document1) 的数据。

如何从 ThisDocument(填充)下引用标签(数据)?

提前感谢您的帮助和耐心等待。如果我能如此大胆,如果 可能在回答时,如果你能解释代码引用是如何工作的,那将对我(可能还有其他人)非常有帮助。

每个 Word 文档都有一个 ThisDocument 对象。 如果您编写使用 ThisDocument 的 VBA 代码,该对象始终指向与您的代码 在同一文件中的 ThisDocument 对象 。另一方面,ActiveDocument 始终指向在 Word 中处于活动状态的文档,即当前在 Word window 中可见的文档。如果可能,请尽量避免使用 ActiveDocument,因为它可能指向与您想象的不同的文档。

为了访问一个 Document 对象而不是您的代码所在的对象,您不能使用 ThisDocument,因此您创建对另一个文档的引用:

Option Explicit

Sub FindOtherDocument()
    Dim oOtherDocument As Document
    Set oOtherDocument = Application.Documents("Filled.docx")

    Call MsgBox("This is the name of the file which oOtherDocument points to: " & oOtherDocument.FullName)
End Sub

注意:Application.Documents()用于访问已经打开的文档。如果文档已关闭,您需要使用 Application.Documents.Open() 打开它或使用 Application.Documents.Add() 创建一个新文档,两者都返回 Document 个对象。

正如您所料,鉴于他的声誉,Ollie 的回答是正确的。但是我 仍然卡住了,每次我试图从以前填写的文档中复制一个值时,我都会收到,

"Run-time error '438' Object does not support this property or method"

事实证明,将文件类型更改为启用宏的文档(编辑文件扩展名)是关键。如果您已阅读上面的内容,在使用用户表单界面创建文档后,我已将数据复制并保存到“.docx”中(剥离了 VBA 代码……我不想包括在内) .

但是,似乎此文件扩展名也阻止了与原始用户窗体关联的 VBA 代码(我编写的编辑现有功能)在 "filled" 文档中执行任何操作。

所以,再次感谢 Ollie 和其他任何人,注意这个陷阱!