Есть ли способ, чтобы vba выбрал поле в словесном документе, используя атрибут NAME свойства поля CODE? может быть, используя псевдоселектор?

Фон: у меня есть 8 полей (DOCPROPERTY Name_First, Name_Last и т. д.) в моем документе в 4 местах (всего 32 элемента)

Вместо того, чтобы перебирать всю коллекцию полей, я хочу иметь возможность возвращать коллекцию полей, соответствующих Name_First, а затем вносить изменения, InsertAfter и т. д., а затем вызывать метод обновления только для этих полей. Обновление всех полей вызывает заметную задержку в каждом поле формы при переходе к следующему полю.

В документации MSDN показаны только примеры с использованием порядковых номеров индексов, что не очень помогает в моем реальном мире. Если кто-то изменит порядковый номер поля, DonkeyKong!

0
Steve Wasiura 6 Фев 2014 в 02:42
Кажется, что зацикливание - единственный способ. Вы можете разделить свой документ на разделы, чтобы ограничить поиск теми полями, которые находятся в соответствующем разделе - это просто идея.
 – 
Kazimierz Jawor
6 Фев 2014 в 10:32
Спасибо за ваш вклад. В моем документе всего 1 страница, но он содержит много полей, поэтому разделение на разделы не особо поможет.
 – 
Steve Wasiura
6 Фев 2014 в 17:05

1 ответ

Лучший ответ

На закладку можно ссылаться по имени. Если вы хотите обновить, скажем, 4 поля, чтобы отразить Name_First, вы можете поместить закладки на все 4 поля с такими именами, как «Name_First_1», «Name_First_2» и т. Д. Затем обновите поля, например:

For i = 1 To 4
  ActiveDocument.Bookmarks("Name_First_" & i).Range.Fields(1).Update
Next

Проще говоря: отмеченный диапазон является псевдоселектором. Обновляемое поле всегда является первым полем в указанном диапазоне.

4
Bwurk 6 Фев 2014 в 12:12
Интересное нестандартное мышление! Раньше я думал о закладках только как о ярлыках для местоположений в документе, но теперь я понимаю, что их можно использовать для выбора диапазона. Это тоже плюс, потому что я искал способ вставить разрыв строки, и он не работает с полем, но работает с закрывающей закладкой с помощью InsertBefore. Тогда спасибо!
 – 
Steve Wasiura
6 Фев 2014 в 20:43