【问题标题】:Copy data from existing WORD document to new WORD document created from template (in code)将现有 WORD 文档中的数据复制到从模板创建的新 WORD 文档(在代码中)
【发布时间】:2015-12-06 18:09:04
【问题描述】:

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

  • 我创建了一个用户表单,其中分支 A 要求提供所需的所有数据 填充我们使用的文档(固定格式且不能更改) 组织,针对特定实例。

  • 文档现在保存为“.docx”文件,去掉了宏(vba
    代码)。到目前为止一切顺利。

  • B 分支,旨在允许加载在 分支 A(如上)。这个现有文档中的数据现在应该是 复制到嵌入在双击时创建的新文档中的用户表单 单击模板,以允许更新各个字段,同时避免 重新输入未更改的详细信息的必要性(随后保存 作为“.docx”)。

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

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

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

Project Explorer on new document from template

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

Existing doc opened in preparation for copying of data

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

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

  2. 我要提取/复制到(DOC 生成器)中的用户表单的数据是 ThisDocument in(已填写)。

  3. 当我完成用户表单中的信息编辑后,我将 保存ThisDocument(Document1),如果我创建了一个 全新的文档。

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

这样的???

txt_Author = ThisDocument.lbl_AssessingOfficer.Caption, where
  • txt_Author 是用户表单中的一个文本框,并且,

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

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

如何从ThisDocumentunder (Filled) 引用标签(数据)?

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

【问题讨论】:

  • 欧莱,谢谢。还是卡住了。在模块 1 中包含带有“公共 oOtherDocument 作为文档”的代码。我收到“错误 434”。当我尝试复制数据时。类似代码: DestinationName = oOtherDocument.Lbl_DestinationName12Pg1.Caption 其中,DestinationName 是用户表单中的一个文本框,oOtherDocument.Lbl_DestinationName12Pg1.Caption 应该引用位于“Filled.docx”标签中的文本(最初从 DestinationName 接收文本)。值因此转换,DestinationName (userform = manual input) => Lbl_DestinationName12Pg1.Caption => 来自模板的新文档。我的错误?
  • 欧莱,谢谢。还是卡住了。在模块 1 中包含带有“公共 oOtherDocument 作为文档”的代码。我得到“运行时错误 '438' 对象不支持此属性或方法”,代码:DestinationName = oOtherDocument.Lbl_DestinationName12Pg1.Caption DestinationName 是用户表单中的一个文本框+ oOtherDocument.Lbl_DestinationName12Pg1.Caption 应参考位于“Filled.docx”标签中的文本(最初从 DestinationName 接收文本)。值因此转换,DestinationName (userform = manual input) => Lbl_DestinationName12Pg1.Caption => 来自模板的新文档。我的错误?

标签: vba ms-word office-2013


【解决方案1】:

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

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

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

然而,这个文件扩展名似乎也阻止了与原始用户表单关联的 VBA 代码(我编写的编辑现有函数)在“填充”文档中执行任何操作。

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

【讨论】:

    【解决方案2】:

    每个 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 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多