Ms word 带书签和自动交叉引用的Word用户表单

Ms word 带书签和自动交叉引用的Word用户表单,ms-word,ms-office,userform,Ms Word,Ms Office,Userform,这是我的第一次编程经验,我对此感到非常兴奋。然而,我一直在处理一个问题: 目标 我的目标是创建一个word文档,其中包含一个集成的用户表单,在开始时要求输入名称、标题和起始日期。然后,信息应反映在文件中规定的区域中 Dim Name As Range Set Name = ActiveDocument.Bookmarks("Name").Range Name.Text = Me.TextBox1.Value Dim Title As Range Set Title = ActiveDocumen

这是我的第一次编程经验,我对此感到非常兴奋。然而,我一直在处理一个问题:

目标

我的目标是创建一个word文档,其中包含一个集成的用户表单,在开始时要求输入名称、标题和起始日期。然后,信息应反映在文件中规定的区域中

Dim Name As Range
Set Name = ActiveDocument.Bookmarks("Name").Range
Name.Text = Me.TextBox1.Value
Dim Title As Range
Set Title = ActiveDocument.Bookmarks("Title").Range
Title.Text = Me.TextBox2.Value
Dim Startdate As Range
Set Startdate = ActiveDocument.Bookmarks("Startdate").Range
Startdate.Text = Me.TextBox3.Value
Me.Repaint
UserForm1.Hide
我可以成功地集成Userform,将信息分配给书签。因为我只能使用1个书签,所以我尝试了文本属性,但它不起作用

接下来,我尝试在整个文本中应用1个书签和几个交叉引用,这意味着我必须向代码中添加一个命令,自动更新所有交叉引用。我尝试使用sub-updatealFields()进行此操作


但是这个给了我一个错误信息。有人能帮忙吗?

请坚持使用fields路径,因为维护起来工作量可能会减少


I:为每个字段(名称、标题、开始日期)创建三个自定义文档属性 步骤:
1) 单击文件|属性|高级属性|自定义
2) 输入以下数据:
-名称:customName
-文本:输入名称
3) 单击按钮“添加”
4) 对字段Title和StartDate重复步骤2和3(记住在前面添加“自定义”单词,以便以后可以轻松识别它们

它应该是这样的:


II:将创建的每个自定义属性的字段添加到word文档中 步骤:
1) 将光标放在word文档中所需字段的位置
2) 单击插入|快速零件|字段|类别:文档信息|文档属性|<文档属性名称>
3) 单击“确定”
4) 对每个字段重复此过程

注意:您可以在文档的不同部分添加相同的字段/自定义属性


III:创建UserForm并添加控件 步骤:
1) 添加用户表单
2) 添加三个文本框并将name属性设置为:
-txtName
-txtTitle
-txtStartDate
每一个。
3) 添加命令按钮并将其名称设置为cmdInsertData

它应该是这样的:

要设置每个控件的名称,请在“属性”窗口中查找(名称):


IV:添加代码以在启动时显示用户表单
步骤:
1) 按Alt+F11启动VBE(或激活功能区中的“开发人员”选项卡并按Visual basic按钮
2) 将以下代码添加到“ThisDocument”对象:

Private Sub Document_Open()

    UserForm1.Show

End Sub

V:添加表单代码 步骤:
1) 右键单击UserForm1对象并选择“查看代码” 2) 添加以下代码:

Private Sub cmdInsertData_Click()

    ' Update the properties values
    ThisDocument.CustomDocumentProperties("customName").Value = Me.txtName.Value
    ThisDocument.CustomDocumentProperties("customTitle").Value = Me.txtTitle.Value
    ThisDocument.CustomDocumentProperties("customStartDate").Value = Me.txtStartDate.Value

    ' Show changes of document properties in document
    ThisDocument.Fields.Update

    ' Hide the userform
    UserForm1.Hide

End Sub
请记住将文档保存为启用宏的

关闭并重新打开它

试试看,让我知道


免责声明:正如我们所说,有一种正确的方法可以正确地显示用户表单,但为了简单起见,我将使用“简单”的方法。

信息不足:您所说的“只能使用一个书签”是什么意思?“文本属性”是什么意思?错误信息是什么?哪行代码触发了它?
子更新lFields
的内容是什么?无论如何,
Sub``不*属于一个过程:
Sub`仅位于一个过程的开头。在任何情况下,您都需要从第二个代码示例中删除
sub
。哦,好的,这样我就可以在文档中只设置一个书签。如果我想把书签复制到另一个地方,它就不起作用了……这就是为什么我使用交叉引用。假设我想让名字出现在3个不同的地方,书签只在1个空间内工作。错误是编译错误:预期的结束子字段在Updateallfields中没有内容…我是否要将其更改为。。。Me.Repaint ActiveDocument.Fields.Update UserForm1.HideNow我有以下代码,但它会删除我的所有书签:(Dim Name As Range Set Name=ActiveDocument.bookmarks(“Name”).Range Name.Text=Me.TextBox1.Value Dim Title As Range Set Title=ActiveDocument.bookmarks(“Title”).Range Title.Text=Me.TextBox2.Value Dim Startdate作为范围集Startdate=ActiveDocument.Bookmarks(“Startdate”).Range Startdate.Text=Me.TextBox3.Value Me.Repaint ActiveDocument.Fields.Update UserForm1.HideNote您应该使用问题下方的链接添加/更改信息。FWIW当您写入书签时,它将被删除,但可以重新创建。如果您在问题中包含代码,以可读格式,我可以显示你知道这是怎么做到的。自定义文档属性可能是一个好方法,也可能不是一个好方法-这一切都取决于最终结果。天哪,它起作用了。非常感谢Ricardo。你的解释是完美的,它在第一次尝试时就起作用了。我做到了…现在我又做到了。你能确认吗?一切就绪。谢谢。
Private Sub cmdInsertData_Click()

    ' Update the properties values
    ThisDocument.CustomDocumentProperties("customName").Value = Me.txtName.Value
    ThisDocument.CustomDocumentProperties("customTitle").Value = Me.txtTitle.Value
    ThisDocument.CustomDocumentProperties("customStartDate").Value = Me.txtStartDate.Value

    ' Show changes of document properties in document
    ThisDocument.Fields.Update

    ' Hide the userform
    UserForm1.Hide

End Sub