Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.69/32: Рейтинг темы: голосов - 32, средняя оценка - 4.69
ivaMadDog
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 10
1

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

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

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

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


зы: плохо знаком с моделью текстового редактора, в электронной таблице я делал так:
Visual Basic
1
2
3
  For x = 1 To 542
    Лист1.OLEObjects(x).Object.Caption = ""
  Next x
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2011, 22:50
Ответы с готовыми решениями:

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

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

Постраничная разбивка документа Word. Сохранение под разными именами.(данные из документа)
ТЗ: Сделать так чтобы данные из Excel перетягивались в Word, При этом файл...

Добавление срок в таблицу Word при заполнении документа Word из данных Excel
Всем привет! Я новичок в этом деле и нужна помощь. Есть таблица Excel с...

Вывод штрих-кода на листе MS Word
Добрый день! Подскажите, необходимо на форме Ворда выводить штрих-код. Никак...

27
Alex77755
10738 / 3311 / 549
Регистрация: 13.02.2009
Сообщений: 9,746
28.03.2011, 23:02 2
For Each
0
Busine2009
Заблокирован
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
ivaMadDog
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 10
28.03.2011, 23:34  [ТС] 4
К сожалению, данная конструкция мне не подходит.
Меня интересует следующее: как обратится у элементу управления по индексу.
0
Alex77755
10738 / 3311 / 549
Регистрация: 13.02.2009
Сообщений: 9,746
28.03.2011, 23:40 5
А ты уверен, что знаешь индексы?
Офис назначает их сам

Добавлено через 1 минуту
через которую собственно и происходит перенос данных на элементы управления листа.
А как ты обращаешься в этом случае?
0
ivaMadDog
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 10
28.03.2011, 23:51  [ТС] 6
Вот прикладываю часть бланка (белые прямоугольники на бланке - это ЭУ Label), сам бланк намного больше и в целом покроется около 600-ми метками.
Второй скрин - это часть формы, в которую вносятся данные, а по кнопке "Добавить" переносятся на лист текстового документа.
0
Миниатюры
Элементы управления на листе документа Word   Элементы управления на листе документа Word  
Alex77755
10738 / 3311 / 549
Регистрация: 13.02.2009
Сообщений: 9,746
28.03.2011, 23:54 7
Здесь же не вернисаж!!
А как ты обращаешься к лабелам? в этом случае?
0
ivaMadDog
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 10
28.03.2011, 23:59  [ТС] 8
Вот как раз в случае с текстовым редакторам я не знаю как к ним обратится. Как обращался в электронной таблице я написал в первом посте, но теперь возникла необходимость реализовать в текстовом редакторе. С Word-ом думал будет аналогично, а оказалось - не всё так просто.
0
Alex77755
10738 / 3311 / 549
Регистрация: 13.02.2009
Сообщений: 9,746
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
ivaMadDog
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 10
29.03.2011, 00:06  [ТС] 10
То есть в ворде нет возможности обращаться к созданным объектам через их индекс?
0
Alex77755
10738 / 3311 / 549
Регистрация: 13.02.2009
Сообщений: 9,746
29.03.2011, 00:11 11
Есть только индексы (если они на листе) офис даёт сам.
И если хочешь обратиться к конкретному объекту надо знать его индекс или имя
0
ivaMadDog
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
Busine2009
Заблокирован
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
Alex77755
10738 / 3311 / 549
Регистрация: 13.02.2009
Сообщений: 9,746
29.03.2011, 00:33 14
В ворде так же как и в екселе индексы назначаются последовательно.
Только всем объектам.
И трудно автоматически обратиться к нужному элементу по индексу.
По тому, сто заранее не знаешь где какой находится.
И что бы заполнить 600 лабелов надо сначала вручную пройтись по ним и определить где какой.
Если же бланк сделать в виде таблицы, то обращаться можно будет по номеру строки и ячейкив строке
0
ivaMadDog
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 10
29.03.2011, 00:39  [ТС] 15
Busine2009, скажу честно, не совсем могу разобрать код, но при подстановке выбивает ошибку в 5ой строке: "Запрашиваемый номер семейства не существует"
0
Alex77755
10738 / 3311 / 549
Регистрация: 13.02.2009
Сообщений: 9,746
29.03.2011, 00:42 16
ivaMadDog,
Ты бы приложил не "вернисаж", а файлики.
Смотришь и поняли бы, что ты хочешь!
0
ivaMadDog
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 10
29.03.2011, 00:43  [ТС] 17
Alex77755, мне не столь важно "где какой". Мне бы примерчик кода для обращения, допустим, к Label100, но через индекс. Остальное я сам покапаю...надеюсь )

прикладываю файлики
0
Busine2009
Заблокирован
29.03.2011, 00:44 18
Цитата Сообщение от ivaMadDog Посмотреть сообщение
Busine2009, скажу честно, не совсем могу разобрать код
Москва не сразу строилась - нужно время, чтобы понять.
Цитата Сообщение от ivaMadDog Посмотреть сообщение
Busine2009, но при подстановке выбивает ошибку в 5ой строке: "Запрашиваемый номер семейства не существует"
всё правильно - это означает, что нет поля с таким-то номером.
0
Alex77755
10738 / 3311 / 549
Регистрация: 13.02.2009
Сообщений: 9,746
29.03.2011, 00:45 19
Трудно понять вопрос...
На листе ворда лабел?
Как он туда попал?
0
ivaMadDog
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 10
29.03.2011, 00:54  [ТС] 20
Выкладываю файлики, фоновый бланк убрал, так как размер файла с ним был 2 метра.
0
Вложения
Тип файла: rar Doc111.part01.rar (97.7 Кб, 15 просмотров)
Тип файла: rar Doc111.part02.rar (11.7 Кб, 13 просмотров)
29.03.2011, 00:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2011, 00:54

Кто нибудь делал вращающийся 3Д-кубик из линий объектов 'Рисование' на листе документа ?
Доброго времени суток на циферблате! Кто нибудь делал вращающийся 3Д-кубик из...

Замена определенного текста на листе Word из пользовательской формы
Здраствуйте. Нужно реализовать такую ситуацию. Есть документ в котором часть...

Напечатать на листе отсортированный по имени список всех документов Word из выбранной папки
Всем добрый день. Очень сильно нужна ваша помощь. Буду благодарен за любую...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru