Есть документ, в который вставлен выпадающий список "Drop-Down Form Field" (Поле со списком (элемент управления формы)) от 1 до 10 и ему присвоена закладка Dropdown19.
Есть блоки текста (одинаковые) также помещенные в закладки B1...B10.
Необходимо написать макрос который бы в зависимости от выбранного значения выпадающего списка добавлял соответствующее количество блоков текста.
Т.к. в самом документе изначально должны быть все закладки от B1 до B10, наверное надо пойти обратным путем и макрос должен удалять "ненужные" закладки в зависимости от выбранного значения выпадающего списка.
Другими словами, в выпадающем списке выбирается значение, изменяется значение закладки "Dropdown19" и соответствующее кол-во блоков остается в документе.
Если значение выпадающего списка "2", то выведи / оставь закладки B1 и B2 и т.д.
Пытался решить задачу с помощью MERGEFIELD IF, но когда блокируешь документ как форму для заполнения, то не получается.
В макросе записывал задачу, чтобы при выборе значения обновлял поля закладки.
[вложение удалено администратором]
1. Может быть лучше использовать не старый элемент управления, а новый: вкладка Разработчик (по умолчанию её нет, вам надо её самим отобразить) - Элементы управления - поле со списком.
2. Для нового элемента управления нет события, чтобы макрос запускался при выборе пункта, поэтому может быть сделат рядом кнопку: вкладка "Разработчик" - Элементы управления - Инструменты из предыдущих версий - Кнопка.
3. Абзац, в котором находится элемент управления, оформлен стилем "Подзаголовок". Вы вручную изменили текст, но в элементе управления оформление сбивается - становится, как у стиля "Подзаголовок". Поэтому, чтобы оформление не слетало, измените оформление или стиля "Подзаголовок", или сделайте стиль "Обычный", а затем измените оформление.
4. В файле щелкните кнопку, запустится макрос.
Макрос
Sub макрос()
Dim control As ContentControl, i As Long
' Отключение монитора, чтобы не мерцало, и может это ускорит макрос.
Application.ScreenUpdating = False
'1. Присваиваем контролу имя "control", чтобы затем обращаться к контролу по этому имени.
' Это удобнее, чем писать длинный текст.
Set control = ActiveDocument.ContentControls(1)
'2. Если в контроле отображается "текст по умолчанию".
If control.ShowingPlaceholderText = True Then
Application.ScreenUpdating = True
MsgBox "Выберите пункт.", vbExclamation
Exit Sub
End If
'3. Отключение защиты.
ActiveDocument.Unprotect
'4. Удаление закладок и текста, входяещего внутрь закладок.
For i = control.Range.Text + 1 To 4
ActiveDocument.Bookmarks("B" & i).Range.Delete
Next i
'5. Вкл. защиты с сохранением имеющихся данных в контролах.
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
'6. Включение монитора и сообщение.
Application.ScreenUpdating = True
MsgBox "Готово.", vbInformation
End Sub
[вложение удалено администратором]
Спасибо большое за помощь.
Буду разбираться.