Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/58: Рейтинг темы: голосов - 58, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 10
1

Элементы управления на листе документа Word

28.03.2011, 22:50. Показов 11444. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Существует документ (Word 2003) состоящий из одного листа. Данный лист имеет подложку-картинку (бланк для заполнения). На листе создано множество элементов управления (ЭУ - Label), которые заполняются или очищаются в результате работы макроса. При открытии документа создается меню с двумя командами: 1 - заполнить бланк, 2 - очистить. Первая команда вызывает форму, через которую собственно и происходит перенос данных на элементы управления листа.

Как обратиться к семейству всех ЭУ, чтобы в цикле выполнить их очистку.


зы: плохо знаком с моделью текстового редактора, в электронной таблице я делал так:
Visual Basic
1
2
3
  For x = 1 To 542
    Лист1.OLEObjects(x).Object.Caption = ""
  Next x
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.03.2011, 22:50
Ответы с готовыми решениями:

Элементы управления на листе Excel меняются
Очень прошу помочь с решением следующей проблемы: На листе Excel два листбокса, в которых на...

Расположите на рабочем листе элементы управления
Расположить на рабочем листе элементы управления как показано на рисунке. Список заполнить...

Элементы управления формы на защищённом листе
Коллеги, доброго времени суток! Вопрос в следующем - делаю "калькулятор", в котором суммируемые...

Элементы управления и внешний вид документа
Добрый день. Возникла такая проблема: на поле документа Word 2007 накидал несколько элементов...

27
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,221
28.03.2011, 23:02 2
For Each
0
Заблокирован
28.03.2011, 23:22 3
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub P2()
Dim Поле As Word.Field
With ActiveDocument
    For Each Поле In .Fields
        If InStr(Поле.Code, "CONTROL Forms.Label.1") > 0 Then
            Поле.Result.Text = ""
        End If
    Next Поле
End With
End Sub
0
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 10
28.03.2011, 23:34  [ТС] 4
К сожалению, данная конструкция мне не подходит.
Меня интересует следующее: как обратится у элементу управления по индексу.
0
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,221
28.03.2011, 23:40 5
А ты уверен, что знаешь индексы?
Офис назначает их сам

Добавлено через 1 минуту
через которую собственно и происходит перенос данных на элементы управления листа.
А как ты обращаешься в этом случае?
0
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 10
28.03.2011, 23:51  [ТС] 6
Вот прикладываю часть бланка (белые прямоугольники на бланке - это ЭУ Label), сам бланк намного больше и в целом покроется около 600-ми метками.
Второй скрин - это часть формы, в которую вносятся данные, а по кнопке "Добавить" переносятся на лист текстового документа.
Миниатюры
Элементы управления на листе документа Word   Элементы управления на листе документа Word  
0
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,221
28.03.2011, 23:54 7
Здесь же не вернисаж!!
А как ты обращаешься к лабелам? в этом случае?
0
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 10
28.03.2011, 23:59  [ТС] 8
Вот как раз в случае с текстовым редакторам я не знаю как к ним обратится. Как обращался в электронной таблице я написал в первом посте, но теперь возникла необходимость реализовать в текстовом редакторе. С Word-ом думал будет аналогично, а оказалось - не всё так просто.
0
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,221
29.03.2011, 00:05 9
Если на бланке 600 меток - сделай бланк таблицей и обращайся с ней как с таблицей.

Добавлено через 2 минуты
Кусок из моей проги(для примера)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
With DocWord
With .Tables(1)
.Cell(1, 1).Range.Text = FIR_.Text
.Cell(2, 1).Range.Text = LIZ_.Text
.Cell(3, 1).Range.Text = ULIZ_.Text
.Cell(4, 1).Range.Text = GOR_.Text
.Cell(3, 2).Range.Text = "Tel." & TEL_.Text
.Cell(4, 2).Range.Text = "E-mail:" & MYL_.Text
S = Split(SOST_.Text, " ")
J = LCase(Left(S(0), 1) & Left(S(1), 1))
.Cell(1, 5).Range.Text = SEG_.Text & "/" & J
End With
End With
1
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 10
29.03.2011, 00:06  [ТС] 10
То есть в ворде нет возможности обращаться к созданным объектам через их индекс?
0
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,221
29.03.2011, 00:11 11
Есть только индексы (если они на листе) офис даёт сам.
И если хочешь обратиться к конкретному объекту надо знать его индекс или имя
0
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 10
29.03.2011, 00:26  [ТС] 12
Я понял. Вся проблема состоит в том, что данные, которые вводит пользователь нужно разбивать на блоки (слово на буквы). В этом случае я не знаю, сколько Label мне нужно использовать, то есть мне известно только диапазон заполняемых надписей, например: под имя я использую 34 надписи (допустим Label10-Label43) по букве в каждой, но если имя будет короткое (Иван), то соответственно заполнить нужно только 4.

В электронной таблице я это делал так:
Visual Basic
1
2
3
4
 For x = 10 To 43
   Лист1.OLEObjects(x).Object.Caption = UCase(Mid(f.textbox1.Text, i, 1))
   i = i + 1
 Next x
В Excel все созданные элементы управления нумеровались в порядке создания, что позволило мне по индексно к ним обращаться. Я думаю в ворде подход тот же, но вот как правильно это сделать.

В инете гуглил, пока что не нашел...На данном форуме искал, но похожего не нашел, к сожалению.


зы: за реализацию с помощью таблиц спасибо. но вопрос остается открытым. (((
0
Заблокирован
29.03.2011, 00:31 13
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub P2()
Dim i As Long
With ActiveDocument
    For i = 1 To 2
        If InStr(.Fields(i).Code, "CONTROL Forms.Label.1") > 0 Then
            .Fields(i).Result.Text = ""
        End If
    Next i
End With
End Sub
1
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,221
29.03.2011, 00:33 14
В ворде так же как и в екселе индексы назначаются последовательно.
Только всем объектам.
И трудно автоматически обратиться к нужному элементу по индексу.
По тому, сто заранее не знаешь где какой находится.
И что бы заполнить 600 лабелов надо сначала вручную пройтись по ним и определить где какой.
Если же бланк сделать в виде таблицы, то обращаться можно будет по номеру строки и ячейкив строке
0
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 10
29.03.2011, 00:39  [ТС] 15
Busine2009, скажу честно, не совсем могу разобрать код, но при подстановке выбивает ошибку в 5ой строке: "Запрашиваемый номер семейства не существует"
0
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,221
29.03.2011, 00:42 16
ivaMadDog,
Ты бы приложил не "вернисаж", а файлики.
Смотришь и поняли бы, что ты хочешь!
0
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 10
29.03.2011, 00:43  [ТС] 17
Alex77755, мне не столь важно "где какой". Мне бы примерчик кода для обращения, допустим, к Label100, но через индекс. Остальное я сам покапаю...надеюсь )

прикладываю файлики
0
Заблокирован
29.03.2011, 00:44 18
Цитата Сообщение от ivaMadDog Посмотреть сообщение
Busine2009, скажу честно, не совсем могу разобрать код
Москва не сразу строилась - нужно время, чтобы понять.
Цитата Сообщение от ivaMadDog Посмотреть сообщение
Busine2009, но при подстановке выбивает ошибку в 5ой строке: "Запрашиваемый номер семейства не существует"
всё правильно - это означает, что нет поля с таким-то номером.
0
11517 / 3803 / 681
Регистрация: 13.02.2009
Сообщений: 11,221
29.03.2011, 00:45 19
Трудно понять вопрос...
На листе ворда лабел?
Как он туда попал?
0
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 10
29.03.2011, 00:54  [ТС] 20
Выкладываю файлики, фоновый бланк убрал, так как размер файла с ним был 2 метра.
Вложения
Тип файла: rar Doc111.part01.rar (97.7 Кб, 25 просмотров)
Тип файла: rar Doc111.part02.rar (11.7 Кб, 16 просмотров)
0
29.03.2011, 00:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2011, 00:54
Помогаю со студенческими работами здесь

Найти и заменить изображение в Word на листе i листе?
Вот так вот нахожу и заменяю текст в документе Word MSWORD.Selection.Find.Forward:= True; ...

Где в word 2010 находятся элементы управления
уважаемые форумчане, помогите найти найти в 2010 офисе элементы управления. может у меня офис не до...

На оборотной стороне документа word в правой части документа, текст съезжает за границу документа
Добрый вечер. Есть код, который формирует документ из шаблона. И все вроде бы, но происходит что...

Заполнение документа Word несколько раз данными из другого документа
есть некий документ Word(test.docx). Нужно создать новый документ(test1.docx), и заполнить его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru