答案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 1
,my 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
我个人更喜欢使用内容控制映射和数据存储事件,但它更复杂,我认为上述方法应该可以满足您所描述的要求。