#excel #vba #form-fields
#excel #vba #поля формы
Вопрос:
У меня есть набор из 6 таблиц в защищенном паролем документе Word. Каждая таблица имеет строку заголовка, за которой следует по крайней мере одна строка данных. В 6-м столбце второй (и последующих) строк есть поле раскрывающейся формы. Над каждой таблицей есть кнопка, которая позволяет пользователю добавить строку в таблицу. Когда они это делают, 6-й столбец содержит другой раскрывающийся список.
После того, как пользователь выберет значение в раскрывающемся списке и покинет поле, мне нужно раскрасить эту ячейку на основе выбранного значения. Я могу установить значение OnExit для запуска макроса, который я называю «HighlightStatus». Чтобы изменить ссылку на ячейку, я использую
Dim ff As Word.FormField
ThisDocument.Unprotect strSheetPassword
Set ff = ThisDocument.FormFields(Selection.Bookmarks(1).Name)
Как мне ссылаться на ячейку, содержащую это поле формы?
Другая проблема заключается в том, что когда я добавляю строку в таблицу, мне нужно присвоить имени поля формы уникальное значение, чтобы я мог ссылаться на поле, которое было только что обновлено. Но свойство Name, похоже, доступно только для чтения.
Я выбрал другой подход, который в основном сталкивается с той же стеной. После обновления поля я провел цикл кода по всем таблицам и всем строкам и обновил 6-й столбец каждой строки. Проблема в том, что экран прокручивается вниз до конца документа. Чтобы вернуться туда, где я был, мне все еще нужно однозначно ссылаться на правильное поле формы, чего я не могу сделать, если у поля нет уникального имени.
Ответ №1:
Нашел это. Я довольно долго гонялся за своим хвостом, но обнаружил, что это работает.
ThisDocument.Unprotect strSheetPassword
Selection.Shading.BackgroundPatternColor = wdColorLightGreen
ThisDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True, Password:=strSheetPassword