如何在下拉式 Word 文档中拥有无限的文本值

如何在下拉式 Word 文档中拥有无限的文本值

我需要根据 Word 中的下拉选择输入一些文本。但它只允许 255 个字符。

有什么办法可以让我输入更多内容吗?

也许有办法解决这个问题?

我找不到太多关于此的信息。请给我指点迷津。

在此处输入图片描述

答案1

价值不能超过 255 个字符,并且在任何情况下都不会显示在文档中 - 即使要做到这一点,您也必须将内容控件“映射”到自定义 XML 部件中的元素,将纯文本内容控件映射到该元素并将该控件放入文档中。

所以您必须以其他方式执行此操作。有几种可能性,每种都有自己的优点和缺点。例如,将所有文本放在特定库中的构建块条目中(例如“自定义 1”和类别(例如您专门为此控件创建的类别)。b. 使用旧式表单字段下拉列表和根据所选值插入所需值的字段。c. “使用 VBA”。

我能想到的唯一不需要 VBA 的方法就是 (a) 和 (b)。只要使用 VBA,就会有很多可能性。

对于 (a),构建块条目必须位于 Word 模板或特殊构建块模板中。因此,如果您想要一个单文件解决方案,则必须将文档设为 .dotx 而不是 .docx。据我所知,构建块机制在 Mac 上不可用。您基本上选择一个(预定义的图库并创建一个类别,将您想要显示的所有条目放在该图库/类别的下拉列表中,然后设置构建块内容控件的属性以使用该图库/类别。所选条目的内容直接显示在控件中。构建块名称内容显示在“下拉列表中”。名称有长度限制(我认为是 32 个字符)。

对于 (b),您可以创建一个带有所需“显示名称”的旧式表单字段下拉列表,并将表单字段设置为“退出时计算”。我认为您最多只能使用 25 个选项。显示名称最多只能使用 50 个字符。

然后,使用“显示名称”设置一个或多个显示所需文本的字段。最简单的方法是,您可以为每个下拉列表值使用一个 IF 字段,因此,如果下拉列表的值是“abc”、“def”、“ghi”等,则可以使用

{ IF  "{ Dropdown1 }" = "abc" "The chunk of text you want for abc" "" }{ IF  "{ Dropdown1 }" = "def" "The chunk of text you want for def" "" }

然后,您必须“保护文档以进行表格处理”,这意味着用户除了填写表格外不能进行任何编辑。或者您可以保护文档的某个部分,在这种情况下,用户可以编辑文档的其余部分,但会受到一些限制。

如果您选择 VBA 路线,我们假设您将使用内容控件下拉菜单。然后您需要一个事件来运行您的 VBA - 您可以使用内容控件事件,或者如果您将内容控件映射到自定义 XML 部分,则可以使用“数据存储”事件(链接到 XML 部分)。然后您的 VBA 需要知道在哪里显示文本以及显示什么文本。

假设您的下拉列表有标题dd1,您要将文本放在标题为 的纯文本内容控件中tb1,并且下拉列表的“显示名称”为my display name 1my display name 2等等。然后,您可以将以下 VBA 放入ThisDocument模块中。当您单击下拉控件外部或将其移出时,这将“触发”。

注意:要实现此功能,tb1 的“内容不可编辑”属性必须是未选中

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
Dim cc1 As ContentControl
Select Case ContentControl.Title
' the dropdown
Case "dd1"
  ' Assumes "tb1" exists
  Set cc1 = ContentControl.Range.Document.SelectContentControlsByTitle("tb1")(1)
  If ContentControl.ShowingPlaceholderText Then
    ' Resets tb1 to its placeholder text
    cc1.Range.Text = ""
  Else
    Select Case ContentControl.Range.Text
    Case "my display name 1"
      cc1.Range.Text = "whatever text you want for abc"
    Case "my display name 2"
      cc1.Range.Text = "whatever text you want for def"
    Case Else
    '
    End Select
  End If
  Set cc1 = Nothing
Case Else
'
End Select
   
End Sub

我个人更喜欢使用内容控制映射和数据存储事件,但它更复杂,我认为上述方法应该可以满足您所描述的要求。

相关内容