Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   VBA (http://forum.oszone.net/showthread.php?t=30311)

BOLT 03-03-2003 14:54 208178

Я занимаюсь анкетированием (сбором информации) при помощи файлов Ворд.  Для этого прошу респондентов заполнить некоторые поля (элементы управления). Снимаю значения операторами
str1 = Documents(strFile).TextBox1.Value
str1=Documents(strAnkFile).optionbutton1.Value
Сложность в том, что таких елементов управления у меня около 300. Приходится просмотреть имя каждого, а потом написать 300, почти одинаковых строк.
Вопрос: Знает ли кто-нибудь способ обратиться ко всем элементам сразу.
З. Ы. Для формы всё легко, пишем строку
For Each Y In UserForm2.Controls
и обращаемся ко всем элементам сразу. А как это сделать если элемент управления находится не в форме а в документе?

IZOprogman 05-09-2003 21:50 208179

А какие проблемы?
Поля можно выделять 2-мя способами:
1) Объявлять ЗАКЛАДКИ;
2) определять ТЕКСТОВЫЕ ПОЛЯ (панель "Формы").
(На деле это одно и то же, поскольку имена текстовых полей являются теми же закладками.)
А дальше - типа
Dim ixBmk As Bookmark

For Each ixBmk In ActiveDocument.Bookmarks
 ixBmk.Select
 ...      '   здесь работа с объектом Selection
Next ixBmk

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

BOLT 08-09-2003 10:56 208180

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

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


Время: 23:20.

Время: 23:20.
© OSzone.net 2001-