隐藏/取消隐藏MS字中的文本块,具体取决于下拉列表

时间:2018-04-02 04:41:35

标签: vba ms-word

我们这里有多个产品,我正在为MS Word创建需求文档。这些产品几乎没有共同之处,并且几乎没有针对单个产品的特性。

我想创建一个单一的需求文档,其中包含一个包含产品名称的下拉列表。每当有人选择产品时,文档应显示所有产品的共同要求,特定于该产品的要求以及隐藏其他产品特有的要求。

例如 - 如果有两个产品列出了Product_1和Product_2。选择Product_1应仅显示与Product_1相关的要求,并隐藏与Product_2相关的要求

这是我搜索和尝试的内容 -

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
If ContentControl.Tag = "List" Then
   Bookmarks("Product_1").Range.Font.Hidden = False
   Bookmarks("Product_2").Range.Font.Hidden = False

   Select Case ContentControl.Range.Text
      Case "Product_1"
           Bookmarks("P2").Range.Font.Hidden = True
      Case "Product_2"
           Bookmarks("P1").Range.Font.Hidden = True
     End Select
End If
End Sub

但问题是我无法在单个书签下标记多个文本块。

让我知道完成这项任务的另一种方法是什么?

参考屏幕截图。 enter image description here

提前致谢

Nitin Jadhav

1 个答案:

答案 0 :(得分:1)

你应该走另一条路:

  • 使用“Product_1_1”,“Product_1_2”,...

  • 为“Product_1”逐步指定任何特定要求
  • 使用“Product_2_1”,“Product_2_2”,...

  • 为“Product_2”逐步指定任何特定要求
  • 以及其他产品

然后按如下方式更改事件处理程序:

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
    Dim bkm As Bookmark

    If ContentControl.Tag = "List" Then
        For Each bkm In ActiveDocument.Bookmarks
            bkm.Range.Font.Hidden = InStr(bkm.Name, "Product_") And Not InStr(bkm.Name, ContentControl.Range.Text)
        Next
    End If
End Sub