Форум программистов, компьютерный форум, киберфорум
Наши страницы

VBA

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 5.00
ivaMadDog
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 10
#1

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

28.03.2011, 22:50. Просмотров 5673. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Элементы управления на листе документа Word (VBA):

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

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

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

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

Вывод штрих-кода на листе MS Word - VBA
Добрый день! Подскажите, необходимо на форме Ворда выводить штрих-код. Никак у меня это не получается сделать.Я зарегил в ситеме...

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

27
Alex77755
10685 / 3260 / 538
Регистрация: 13.02.2009
Сообщений: 9,612
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
10685 / 3260 / 538
Регистрация: 13.02.2009
Сообщений: 9,612
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
10685 / 3260 / 538
Регистрация: 13.02.2009
Сообщений: 9,612
28.03.2011, 23:54 #7
Здесь же не вернисаж!!
А как ты обращаешься к лабелам? в этом случае?
0
ivaMadDog
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 10
28.03.2011, 23:59  [ТС] #8
Вот как раз в случае с текстовым редакторам я не знаю как к ним обратится. Как обращался в электронной таблице я написал в первом посте, но теперь возникла необходимость реализовать в текстовом редакторе. С Word-ом думал будет аналогично, а оказалось - не всё так просто.
0
Alex77755
10685 / 3260 / 538
Регистрация: 13.02.2009
Сообщений: 9,612
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
10685 / 3260 / 538
Регистрация: 13.02.2009
Сообщений: 9,612
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
10685 / 3260 / 538
Регистрация: 13.02.2009
Сообщений: 9,612
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
29.03.2011, 00:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2011, 00:39
Привет! Вот еще темы с ответами:

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

Разбиение файла Word на отдельные листы при двусторонней печати по две страницы на листе - VBA
Добрый вечер. Прошу помощи, так как основательно запутался в решении данной задачи при моих ограниченных познаниях в VBA. Она...

Редактирование документа word - VBA
Доброго дня, в цикле создается n-документов word, мне необходимо эти документы не создавать по отдельности, а добавлять в один. Спасибо.

Word: печать документа - VBA
Есть документ с двумя листами, необходимо распечатать последний лист с оборотом из другого файла... Пробовал через дуплекс, не...


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

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

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