Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 将现有WORD文档中的数据复制到根据模板创建的新WORD文档(以代码形式)_Vba_Ms Word_Office 2013 - Fatal编程技术网

Vba 将现有WORD文档中的数据复制到根据模板创建的新WORD文档(以代码形式)

Vba 将现有WORD文档中的数据复制到根据模板创建的新WORD文档(以代码形式),vba,ms-word,office-2013,Vba,Ms Word,Office 2013,第一次发帖时,虽然我可能在爬之前就想跑,但我的情况如下(使用Word 2013) 我已经创建了一个Userform,其中分支a要求提供所需的所有数据 填充在我们的应用程序中使用的文档(固定格式且不能更改) 组织,例如一个特殊的例子 文档现在保存为“.docx”文件,不再包含宏(vba 代码)。到目前为止还不错 分支B旨在允许加载在中创建的现有文档 分支机构A(如上所述)。此现有文档中的数据现在应为 复制到双击时创建的新文档中嵌入的Userform- 单击模板,允许更新各种字段,同时避免 需要重

第一次发帖时,虽然我可能在爬之前就想跑,但我的情况如下(使用Word 2013)

  • 我已经创建了一个Userform,其中分支a要求提供所需的所有数据 填充在我们的应用程序中使用的文档(固定格式且不能更改) 组织,例如一个特殊的例子

  • 文档现在保存为“.docx”文件,不再包含宏(vba
    代码)。到目前为止还不错

  • 分支B旨在允许加载在中创建的现有文档 分支机构A(如上所述)。此现有文档中的数据现在应为 复制到双击时创建的新文档中嵌入的Userform- 单击模板,允许更新各种字段,同时避免 需要重新输入未更改的详细信息(随后保存 作为“.docx”)

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

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

当我开始通过模板创建新文档时,Project Explorer如下所示

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

现在我有两个
这个文档的实例

  • 代码正在“文档生成器”下执行

  • 我想在(DOC Generator)中提取/复制到userform的数据是
    此文档
    已填写

  • 当我在userform中编辑完信息后,我将 保存
    此文档
    (文档1),就像我在创建 全新的文件

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

    像这样的东西

    txt_Author = ThisDocument.lbl_AssessingOfficer.Caption, where
    
    • txt_Author是userform中的一个文本框
    -
    此文档.lbl\u AssessingOfficer.Caption
    旨在指现有文档(已填充)中保存数据的标签

    除了当我测试这个时,
    ThisDocument
    ActiveDocument
    都会拾取 此文档中的数据
    (文档1)

    如何引用本文档(已填写)下的标签(数据)

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

    每个Word文档都有一个
    ThisDocument
    对象。 如果您编写的VBA代码使用
    ThisDocument
    ,则该对象始终指向与代码位于同一文件中的
    ThisDocument
    对象<另一方面,code>ActiveDocument始终指向Word中处于活动状态的文档,即此时在Word窗口中可见的文档。如果可能的话,尽量避免使用
    ActiveDocument
    ,因为它可以指向与您所想不同的文档

    为了访问代码所在对象以外的
    文档
    对象,您不能使用
    此文档
    ,因此您可以创建对其他文档的引用:

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

    考虑到奥利的声誉,您可能会想到,奥利的回答是正确的。但我 仍然被卡住,每次我试图从之前填写的文档复制一个值时,我都会收到

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

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

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


    所以,再次感谢奥利,还有其他人,请注意这一点

    奥利,谢谢你。还是卡住了。模块1中包含“公共文档作为文档”的代码。我得到“错误434”。当我试图复制数据时。代码类似于:DestinationName=oOtherDocument.Lbl_DestinationName12Pg1.Caption,其中DestinationName是用户表单中的文本框,而oOtherDocument.Lbl_DestinationName12Pg1.Caption应该引用位于“Filled.docx”标签中的文本(最初从DestinationName接收文本)。因此,值转换为DestinationName(userform=手动输入)=>Lbl\u DestinationName12Pg1.Caption=>模板中的新文档。我的错误?奥利,谢谢你。还是卡住了。模块1中包含“公共文档作为文档”的代码。我得到“运行时错误'438'对象不支持此属性或方法”,代码为:DestinationName=oOtherDocument.Lbl_DestinationName12Pg1.Caption DestinationName是userform+oOtherDocument.Lbl_DestinationName12Pg1中的文本框。Caption应该引用位于“Filled.docx”标签中的文本(最初从DestinationName接收到文本)。因此,值转换为DestinationName(userform=手动输入)=>Lbl\U DestinationName12Pg1.Caption=>模板中的新文档。我的错误?