Как иметь неограниченное текстовое значение в раскрывающемся списке Word Doc

Как иметь неограниченное текстовое значение в раскрывающемся списке Word Doc

Мне нужно ввести текст на основе выпадающего списка в Word. Но он допускает только 255 символов.

Есть ли возможность подать заявку на большее количество участников?

Может быть, есть какое-то решение этой проблемы?

Я не нашел много информации об этом. Пожалуйста, направьте меня на правильный путь.

введите описание изображения здесь

решение1

Theценитьне может содержать более 255 символов и в любом случае не отображается в документе — даже для этого вам пришлось бы «сопоставить» элемент управления содержимым с элементом в пользовательской XML-части, сопоставить элемент управления содержимым в виде простого текста с этим элементом и поместить этот элемент управления в документ.

Поэтому вам придется сделать это каким-то другим способом. Есть несколько возможностей, каждая из которых имеет свои преимущества и недостатки. например, поместить все ваши тексты в записях Building Block в определенную Галерею (например, «Custom 1» и Категорию (например, ту, которую вы создаете специально для этого элемента управления). б. использовать раскрывающийся список полей устаревшей формы и поле, которое вставляет нужное вам значение в зависимости от выбранного значения. в. «использовать VBA».

(a) и (b) — единственные подходы, которые я могу придумать, не требующие VBA. Как только вы используете VBA, появляется ряд возможностей.

Для (a) записи Building Block должны быть в шаблоне Word или специальном шаблоне Building Block. Поэтому, если вам нужно решение с одним файлом, вам нужно сделать документ .dotx, а не .docx. Насколько мне известно, механизм Building Block недоступен на Mac. Вы в основном выбираете (предопределенную галерею и создаете категорию, помещаете все записи, которые хотите отобразить, в раскрывающийся список в этой галерее/категории, затем настраиваете свойства элемента управления Building Block Content для использования этой галереи/категории. Содержимое выбранной записи отображается непосредственно в элементе управления. Building Blockименаи содержимое отображаются в "выпадающем списке". Имена имеют ограничение по длине (кажется, 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, предположим, что вы собираетесь использовать раскрывающийся список Content Control. Затем вам понадобится событие для запуска вашего VBA — вы можете использовать событие Content Control или, если вы сопоставляете свой Content Control с Custom XML Part, вы можете использовать событие "Datastore" (связанное с XML Part). Затем ваш VBA должен знать, где отображать текст и какой текст отображать.

Итак, представим, что ваш раскрывающийся список имеет Title 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

Лично я предпочитаю использовать сопоставление управления содержимым и события хранилища данных, но это сложнее, и я думаю, что описанный выше подход должен соответствовать требованиям, которые вы описали.

Связанный контент