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

Userform for Word with bookmarks and automated Crossreferences

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

目标

我的目标是创建一个带有集成用户表单的 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

我可以成功整合用户表单,将信息分配给书签。因为我只能使用 1 个书签,所以我尝试了文本属性,但它不起作用。

我尝试的下一件事是在整个文本中应用 1 个书签和几个交叉引用,这意味着我必须向代码添加一个命令来自动更新所有交叉引用我尝试使用 sub updateAllFields()

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
    Sub UpdateAllFields()
    UserForm1.Hide

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

坚持使用字段路径,因为它的维护工作可能较少。


I:为每个字段(名称、标题、开始日期)创建三个自定义文档属性

步数:
1) 点击文件 |属性 |高级属性 |自定义
2) 输入以下数据:
- 名称:自定义名称
- 文本:输入姓名
3) 点击按钮"Add"
4) 对字段 Title 和 StartDate 重复步骤 2 和 3(记得在前面添加 "custom" 单词,以便稍后轻松识别它们

它应该是这样的:


二:将创建的每个自定义属性的字段添加到word文档

步骤:
1) 将光标定位到word文档中你想要的字段
2) 点击插入 |快速零件 |领域 |类别:文件信息 |文档属性 | <文档名称属性>
3) 点击确定
4) 对每个字段重复该过程

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


三:创建用户窗体并添加控件

步骤:
1) 添加用户表单
2) 添加三个文本框并设置名称 属性 为:
- txtName
- 文本标题
- txtStartDate
每一个。
3) 添加命令按钮并将其名称设置为cmdInsertData

它应该是这样的:

要设置每个控件的名称,请在属性 window:

中查找 (Name)


IV:添加代码以在启动时显示用户窗体

步骤:
1) 按 Alt + F11 启动 VBE(或激活功能区中的开发人员选项卡并按 Visual basic 按钮
2)在"ThisDocument"object中添加如下代码:

Private Sub Document_Open()

    UserForm1.Show

End Sub

V: 添加表单代码

步骤:
1) 右键单击​​ UserForm1 object 和 select "View Code" 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

记得将文档另存为macro-enabled

关闭再重新打开

试一试,告诉我

免责声明:作为 this article states,有一种正确的方法可以正确处理显示用户表单,但为了简单起见,我将保留 "easy" 方式。