将现有 WORD 文档中的数据复制到从模板创建的新 WORD 文档(在代码中)
Copy data from existing WORD document to new WORD document created from template (in code)
第一次 post 虽然我可能会在爬行之前尝试 运行,但这是我的情况(使用 Word 2013)。
我创建了一个用户表单,其中 Branch A 要求提供所有需要的数据
填充我们使用的文档(固定格式,不能更改)
组织,对于特定实例。
文档现在保存为“.docx”文件,去除了宏(vba
代码)。到目前为止一切顺利。
分支 B,旨在允许加载在中创建的现有文档
分支 A(如上)。来自这个现有文档的数据现在应该是
复制到嵌入在双时创建的新文档中的用户窗体
单击模板,允许更新各个字段,同时避免
重新输入未更改的详细信息的必要性(随后保存
作为 '.docx').
我可以通过双击模板启动新文档,然后
然后通过命令按钮,执行代码以打开预先存在的文档。
但这就是我开始感到非常困惑的地方...
当我开始通过模板创建新文档时,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
实例。
正在“(DOC Generator)”下执行代码
我想要 extract/copy 到(DOC 生成器)中的用户表单的数据是
ThisDocument
在(填充)中。
当我编辑完用户表单中的信息后,我将
像我一样保存 ThisDocument
(Document1)
全新文档。
我遇到的困难是,如何引用现有文档中的 ActiveX 控件以将其复制到用户窗体。
类似这样的东西???
txt_Author = ThisDocument.lbl_AssessingOfficer.Caption, where
- txt_Author 是用户窗体中的文本框,
-ThisDocument.lbl_AssessingOfficer.Caption
旨在引用现有文档(已填充)中包含数据的标签。
除了当我测试这个时,ThisDocument
或 ActiveDocument
都拾取
来自 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 和其他任何人,注意这个陷阱!
第一次 post 虽然我可能会在爬行之前尝试 运行,但这是我的情况(使用 Word 2013)。
我创建了一个用户表单,其中 Branch A 要求提供所有需要的数据 填充我们使用的文档(固定格式,不能更改) 组织,对于特定实例。
文档现在保存为“.docx”文件,去除了宏(vba
代码)。到目前为止一切顺利。分支 B,旨在允许加载在中创建的现有文档 分支 A(如上)。来自这个现有文档的数据现在应该是 复制到嵌入在双时创建的新文档中的用户窗体 单击模板,允许更新各个字段,同时避免 重新输入未更改的详细信息的必要性(随后保存 作为 '.docx').
我可以通过双击模板启动新文档,然后 然后通过命令按钮,执行代码以打开预先存在的文档。
但这就是我开始感到非常困惑的地方...
当我开始通过模板创建新文档时,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
实例。
正在“(DOC Generator)”下执行代码
我想要 extract/copy 到(DOC 生成器)中的用户表单的数据是
ThisDocument
在(填充)中。当我编辑完用户表单中的信息后,我将 像我一样保存
ThisDocument
(Document1) 全新文档。
我遇到的困难是,如何引用现有文档中的 ActiveX 控件以将其复制到用户窗体。
类似这样的东西???
txt_Author = ThisDocument.lbl_AssessingOfficer.Caption, where
- txt_Author 是用户窗体中的文本框,
-ThisDocument.lbl_AssessingOfficer.Caption
旨在引用现有文档(已填充)中包含数据的标签。
除了当我测试这个时,ThisDocument
或 ActiveDocument
都拾取
来自 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 和其他任何人,注意这个陷阱!