VBA - VBA

Ответить
Аватара пользователя
IZOprogman

VBA - VBA

Сообщение IZOprogman »

Я занимаюсь анкетированием (сбором информации) при помощи файлов Ворд.  Для этого прошу респондентов заполнить некоторые поля (элементы управления). Снимаю значения операторами

str1 = Documents(strFile).TextBox1.Value

str1=Documents(strAnkFile).optionbutton1.Value

Сложность в том, что таких елементов управления у меня около 300. Приходится просмотреть имя каждого, а потом написать 300, почти одинаковых строк.

Вопрос: Знает ли кто-нибудь способ обратиться ко всем элементам сразу.

З. Ы. Для формы всё легко, пишем строку

For Each Y In UserForm2.Controls

и обращаемся ко всем элементам сразу. А как это сделать если элемент управления находится не в форме а в документе?
Аватара пользователя
IZOprogman

Re: VBA - VBA

Сообщение IZOprogman »

А какие проблемы?

Поля можно выделять 2-мя способами:

1) Объявлять ЗАКЛАДКИ;

2) определять ТЕКСТОВЫЕ ПОЛЯ (панель "Формы&quotИзображение.

(На деле это одно и то же, поскольку имена текстовых полей являются теми же закладками.)

А дальше - типа

Dim ixBmk As Bookmark



For Each ixBmk In ActiveDocument.Bookmarks

 ixBmk.Select

 ...      '   здесь работа с объектом Selection

Next ixBmk



Каждую закладку можно дополнительно проверять на ixBmk.Name
Аватара пользователя
IZOprogman

Re: VBA - VBA

Сообщение IZOprogman »

Раз эта тема хоть кого-то заинтересовала, то отвечаю сам себе. За последний год я до мелочей отработал технологию анкетирования. Это самозаполняемые анкеты. Формой для ввода и контейнером содержащим данные пользователя является файл Word.

Можно использовать 2 конструкции: Элементы управления и Поля.



В первом случае обработка идёт так:

Dim iShape As Object

       For Each iShape In myDoc.InlineShapes ' Начали обрабатывать элементы управления

           If iShape.Type = wdInlineShapeOLEControlObject Then ' это элемень управления, а не какая-нибудь там картинка

               intA = iShape.OLEFormat.Object.Value

           End If

       Next iShape



Во втором случае

Dim fldAnswer As FormField

       For Each fldAnswer In myDoc.FormFields 'Начали обрабатывать поля

           intB = fldAnswer.Result

       Next fldAnswer



У первого способа много недостатков. Если нужны пояснения - пишите. Я на этом собаку съел.
Ответить

Вернуться в «Программирование и базы данных»