巧用Word - 在Word中使用上拉菜单控制文档的可视内容

巧用Word - 在Word中使用下拉菜单控制文档的可视内容

本文引自于:http://social.technet.microsoft.com/Forums/zh-CN/BIDA/thread/020efc0f-5104-4a58-925b-ca8cd559932d

 

前言:在日常工作中,我们有时会需要设计一些模板文档分发给用户,让用户填写部分内容后将文档返还。例如,在某些模板中,我们希望某些文本内容能够针对不同的用户分别显示不同的内容,本文将详细讲述如何通过两种不同的方法来实现这一目的

.

方法一 : 在控制下拉菜单时,”隐藏”表格中的特定行(列),从而使文档仅显示与下拉菜单中的当前选择项相关的内容 (此方法可将文档单独分布,不需共享的网络环境)

.

  • 步骤1. 打开Word, 将新建的文档另存为"启用宏的Word文档(*.docm)";
    .
    巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
  • 步骤2. 从"开发工具"中的"控件"功能组中点击"旧式窗体"按钮,并在弹出的下拉菜单中的"ActiveX 控件"组中选择"组合框(ActiveX控件)"
    .
    巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
  • 步骤3. 在文档的任意空白处插入一个表格。为了便于演示,我们创建了一个规格为1x3的表格;
    .
    巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
  • 步骤4. 在各行插入任意文字,用于标识该行是否被隐藏. 例如在第一行输入Row_A, 在第二行输入Row_B, 在第三行输入Row_C;
    .
    巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
  • 步骤5. 对应的,我们在组合框中创建3个可选择项,依次命名为”选项_A”, ”选项_B”和 ”选项_C”, (在这里我们通过vba来添加所需项,代码提供在下文中)
    .
  • 步骤6. 在Word中按下组合键 “Alt+F11” 打开VBA编辑器,将下列代码范例复制并黏贴到ThisDocument中
    .
    Option Explicit
    Const OPA = "选项_A"
    Const OPB = "选项_B"
    Const OPC = "选项_C"
    Private Sub Document_Open()
    ComboBox1.List = Array(OPA, OPB, OPC)
    End Sub
    
    Private Sub ComboBox1_Change()
        If ComboBox1.Value = OPA Then
            With ActiveDocument.Tables(1).Rows(1)
            .HeightRule = wdRowHeightAuto
            .Borders(wdBorderBottom).LineStyle = wdLineStyleSingle
            .Borders(wdBorderLeft).LineStyle = wdLineStyleSingle
            .Borders(wdBorderRight).LineStyle = wdLineStyleSingle
            End With
            With ActiveDocument.Tables(1).Rows(2)
            .HeightRule = wdRowHeightExactly
            .Height = ".5"
            .Borders(wdBorderBottom).LineStyle = wdLineStyleNone
            .Borders(wdBorderLeft).LineStyle = wdLineStyleNone
            .Borders(wdBorderRight).LineStyle = wdLineStyleNone
             End With
            With ActiveDocument.Tables(1).Rows(3)
            .HeightRule = wdRowHeightExactly
            .Height = ".5"
            .Borders(wdBorderBottom).LineStyle = wdLineStyleNone
            .Borders(wdBorderLeft).LineStyle = wdLineStyleNone
            .Borders(wdBorderRight).LineStyle = wdLineStyleNone
             End With
        ElseIf ComboBox1.Value = OPB Then
            With ActiveDocument.Tables(1).Rows(1)
            .HeightRule = wdRowHeightExactly
            .Height = ".5"
            .Borders(wdBorderBottom).LineStyle = wdLineStyleNone
            .Borders(wdBorderLeft).LineStyle = wdLineStyleNone
            .Borders(wdBorderRight).LineStyle = wdLineStyleNone
            End With
            With ActiveDocument.Tables(1).Rows(2)
            .HeightRule = wdRowHeightAuto
            .Borders(wdBorderBottom).LineStyle = wdLineStyleSingle
            .Borders(wdBorderLeft).LineStyle = wdLineStyleSingle
            .Borders(wdBorderRight).LineStyle = wdLineStyleSingle
             End With
            With ActiveDocument.Tables(1).Rows(3)
            .HeightRule = wdRowHeightExactly
            .Height = ".5"
            .Borders(wdBorderBottom).LineStyle = wdLineStyleNone
            .Borders(wdBorderLeft).LineStyle = wdLineStyleNone
            .Borders(wdBorderRight).LineStyle = wdLineStyleNone
             End With
        ElseIf ComboBox1.Value = OPC Then
            With ActiveDocument.Tables(1).Rows(1)
            .HeightRule = wdRowHeightExactly
            .Height = ".5"
            .Borders(wdBorderBottom).LineStyle = wdLineStyleNone
            .Borders(wdBorderLeft).LineStyle = wdLineStyleNone
            .Borders(wdBorderRight).LineStyle = wdLineStyleNone
            End With
            With ActiveDocument.Tables(1).Rows(2)
            .HeightRule = wdRowHeightExactly
            .Height = ".5"
            .Borders(wdBorderBottom).LineStyle = wdLineStyleNone
            .Borders(wdBorderLeft).LineStyle = wdLineStyleNone
            .Borders(wdBorderRight).LineStyle = wdLineStyleNone
            End With
            With ActiveDocument.Tables(1).Rows(3)
            .HeightRule = wdRowHeightAuto
            .Borders(wdBorderBottom).LineStyle = wdLineStyleSingle
            .Borders(wdBorderLeft).LineStyle = wdLineStyleSingle
            .Borders(wdBorderRight).LineStyle = wdLineStyleSingle
             End With
        End If
    
    lbl_Exit:
      Exit Sub
    End Sub
  • 步骤7. 保存并关闭文档,再次打开即可
    .
    .

.

方法二: 使用”IF域”和”自动图文集”来与组合框实现互动 (此方法适用于共享的网络环境)

.

  • 步骤1. 创建一个模板文档(*.dotm或*.docm), 此处,我们将该文档命名为”自动图文集模板.docm”,将该文档储存在一个共享的文件夹中,确保拥有适当权限的用户可以正常访问
    .
  • 步骤2. 在文档的空白处输入我们所需要”显示或隐藏”的文本内容,并分别添加到”自动图文集” (选中需添加的文本内容,从”插入”选项卡中的”文档”功能组中点击”文档部件”按钮,并在下拉菜单中点击”将所选内容保存到文档部件库”)

    - 这里我们创建3个”自动图文集”用于示例, 并依次命名为”OA1”,”OA2”以及”OA3”
    - 确认”保存位置”中的设置为我们当前所正在编辑的文档,如本例中的”自动图文集模板.docm”
    - 完成后将用于创建”自动图文集”的文本清空,然后保存并关闭文档
    .
    巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
  • 步骤3. 通过组策略来为网络中的计算机配置Word的启动文件夹位置,将其指向我们存放”自动图文集模板.docm”的所在路径
    组策略路径:Microsoft Word 2010 | Word 选项 | 高级 | 文件位置 | 启动
    .巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
    更新策略后,建议在策略所影响的计算机上新建一个Word 文档,检测Word的启动文件夹位置是否被正确修改,以及”自动图文集模板.docm”是否被正确加载
    在”开发工具”选项卡下,”加载项”功能组中点击”加载项”按钮可打开”模板和加载项”窗口
    .
    巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
  • 步骤4. 如方法1中一样,新建一个Word文档并将其另存为”启用宏的Word文档(*.docm)”;
    .
    巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
  • 步骤5. 从”开发工具”选项卡的”控件”功能组中点击”旧式窗体”按钮,并在弹出的下拉菜单中的”ActiveX 控件组”中选择”组合框”ActiveX控件;
    .
    巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
  • 步骤6. 单击以选中该”组合框”控件,通过点击”插入”选项卡中的”链接”功能组中的”书签”来插入一个”书签”, 并将其命名为”BM001”
    .
    巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
  • 步骤7. 为了方便我们之后的操作,按下组合键”Alt+F9”, 开启“显示域代码而非域值”选项
    .
    巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
  • 步骤8. 按下数次回车键将光标移至文档的空白处,在”插入”选项卡中的”文本”功能组中点击”文档部件”按钮,在下拉菜单中点击”域”按钮
    .
    巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
    在弹出的”域”设定窗体中,在”域名”列表中找到并选择”If”域代码,点击确认已插入
    PS:  为了便于讲解,请在以下的步骤中,将”更新时保留原格式”选项前的复选框全部去除选中状态
    .
    巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
    在文档中得到如下域代码:
    巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
    将鼠标光标移至IF后,重复刚才的步骤,再次插入另一个域代码 – ”DocVariable“,在插入时,将其”新名称”定义为”BM001”
    .
    巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
    得到如下域代码:
    巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
    将光标移至域代码{ DOCVARIABLE  BM001 }后,并输入”=选项_A”,得到:
    巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
    将光标移至”=选项_A”后,重复先前的步骤,再次插入另一个域代码 – “AutoText”,在设置””自动图文集”名称”时,选择”OA1”
    .
    巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
    最后得到:
    巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
    可按照上述步骤为图文集OA2和OA3各自创建相应的域代码,但也可以将上述域代码复制并黏贴,作相应的修改后得到
    巧用Word - 在Word中使用上拉菜单控制文档的可视内容
    .
    再次按下组合键”Alt+F9”, 以关闭“显示域代码而非域值”选项,先前所创建的域代码会显示一些错误信息,暂时不用理会。
    .
  • 步骤9. 按下组合键 “Alt+F11” 打开VBA编辑器,将下列代码范例复制并黏贴到ThisDocument中
    .
    Option Explicit
    Const OPA = "Option A"
    Const OPB = "Option B"
    Const OPC = "Option C"
    Private Sub Document_Open()
    ComboBox1.List = Array(OPA, OPB, OPC)
    End Sub
    
    Private Sub ComboBox1_Change()
        Dim strBM As String
        Dim strCombox As String
        On Error Resume Next
        strBM = ActiveDocument.Bookmarks(1).Name
        strCombox = ComboBox1.Value
        On Error GoTo 0
        
      ActiveDocument.Variables(strBM).Value = strCombox
      ActiveDocument.Fields.Update
    
    lbl_Exit:
      Exit Sub
    End Sub
  • 步骤10. 保存并关闭文档,再次打开文档即可