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

时间:2015-12-06 18:09:04

标签: vba ms-word word-vba office-2013

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

  • 我创建了一个Userform,其中分支A要求所有需要的数据 填充我们使用的文件(固定格式,不能更改) 组织,针对特定情况。

  • 该文档现在保存为" .docx"文件,剥离宏(vba
    码)。到目前为止一切顺利。

  • 分支B,旨在允许加载在其中创建的现有文档 分支A(如上)。现在应该是这个现有文件的数据 复制到双面时创建的新文档中嵌入的Userform 单击模板,以允许更新各个字段,同时避免 重新输入未更改的细节的必要性(随后保存 as' .docx')。

  • 我可以通过双击模板启动新文档 然后通过命令按钮执行代码以打开预先存在的文档。

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

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

Project Explorer on new document from template

现在我在VBA中打开一个现有文档(Filled.docx),以提供类似的项目资源管理器视图。

Existing doc opened in preparation for copying of data

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

  1. 代码正在'(DOC生成器)'

  2. 下执行
  3. 我想要提取/复制到(DOC Generator)中的用户窗体的数据是 ({填充)中的ThisDocument

  4. 当我完成编辑用户表单中的信息时,我会 像我一样保存ThisDocument(Document1),如果我一直在创建一个 全新的文件。

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

    像这样的东西???

    txt_Author = ThisDocument.lbl_AssessingOfficer.Caption, where
    
    • txt_Author是userform中的文本框,

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

    除非我对此进行测试,ThisDocumentActiveDocument都会接受 来自ThisDocument(Document1)的数据。

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

    提前感谢您的帮助和耐心。如果我能如此大胆,如果 在回答的时候,如果你能解释一下代码引用是如何工作的话,那对我(以及后续的其他人)会非常有帮助。

2 个答案:

答案 0 :(得分:0)

每个Word文档都有一个ThisDocument对象。 如果编写使用ThisDocument的VBA代码,则该对象始终指向与代码相同的文件中的ThisDocument对象。另一方面,ActiveDocument始终指向Word中处于活动状态的文档,即此时在Word窗口中可见的文档。如果可能,请尽量避免使用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个对象。

答案 1 :(得分:0)

考虑到他的声誉,你可能会想到,奥利的回答是正确的。但是我 仍然卡住了,每当我试图从之前填写的文件中复制一个值时,我正在接收,

"运行时错误'''对象不支持此属性或方法"

事实证明,将文件类型更改为启用宏的文档(编辑文件扩展名)是关键。如果您已阅读上述内容,则在使用userform界面创建文档后,我已将数据复制并保存到' .docx' (它剥去了VBA代码......我不想要包含这个代码)。

但是,这个文件扩展名似乎也会阻止与原始用户窗体关联的VBA代码(我编写的编辑现有函数)在" fill"中执行任何操作。文件也是如此。

所以,再次感谢Ollie和其他任何人,请注意这个问题!