第一次发布,虽然我可能会在我爬行之前尝试运行,但这是我的情况(使用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个实例。
代码正在'(DOC生成器)'
我想要提取/复制到(DOC Generator)中的用户窗体的数据是
({填充)中的ThisDocument
。
当我完成编辑用户表单中的信息时,我会
像我一样保存ThisDocument
(Document1),如果我一直在创建一个
全新的文件。
我遇到的困难是,如何在现有文档中引用ActiveX控件以将其复制到用户窗体。
像这样的东西???
txt_Author = ThisDocument.lbl_AssessingOfficer.Caption, where
- ThisDocument.lbl_AssessingOfficer.Caption
旨在引用包含数据的现有文档(已填充)中的标签。
除非我对此进行测试,ThisDocument
或ActiveDocument
都会接受
来自ThisDocument
(Document1)的数据。
如何从(填充)下的ThisDocument
引用标签(数据)?
提前感谢您的帮助和耐心。如果我能如此大胆,如果 在回答的时候,如果你能解释一下代码引用是如何工作的话,那对我(以及后续的其他人)会非常有帮助。
答案 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和其他任何人,请注意这个问题!