Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
5 / 4 / 0
Регистрация: 18.09.2011
Сообщений: 71
1

Работа с колонтитулами: анализ групп объектов, подсчет количества фигур

11.08.2014, 13:36. Показов 1046. Ответов 8
Метки нет (Все метки)

Добрый день. На странице word имеется группа объектов (линии, текстовые блоки). Как обратиться к текстовому блоку внутри группы. Поиском не нашел, у самого тоже не получается.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.08.2014, 13:36
Ответы с готовыми решениями:

Подсчет количества групп в отчете
Здравствуйте. Создаю отчет с группировкой. Всего две группы, в каждой есть много записей. Надо...

Подсчет количества объектов в БД
Добрый день! Я реализую базу данных книжного магазина и у меня возник маленький вопрос: Как...

Подсчет количества объектов на изображении
Суть задания: выделив контуры объектов на изображении, подсчитать их количество. (в качестве...

Статическое поле класса: подсчет количества созданных объектов
Задание: Дополнить один из классов статическим полем, которое будет считать количество созданных...

8
Заблокирован
11.08.2014, 13:44 2
А у нас нету страницы word с группой объектов
Вот если бы Вы приложили эту страницу к сообщению, дело пошло бы веселее и без лишних наводящих вопросов...
0
5 / 4 / 0
Регистрация: 18.09.2011
Сообщений: 71
12.08.2014, 09:32  [ТС] 3
Вот документ с группой объектов, находящихся в колонтитуле. В документе есть макрос, который найдёт таблицы, если разгруппировать объекты, иначе не работает.

Спасибо за внимание
0
Вложения
Тип файла: doc asdf.doc (49.0 Кб, 15 просмотров)
6070 / 1315 / 195
Регистрация: 12.12.2012
Сообщений: 1,024
12.08.2014, 11:19 4
Evgueny, без разгруппировки можно так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub матрос№2()
    Dim shGrp As GroupShapes, table As table
    Set shGrp = Selection.Sections(1).Headers(wdHeaderFooterPrimary).Shapes(1).GroupItems
    For i = 1 To shGrp.Count
        If shGrp(i).TextFrame.TextRange.Tables.Count > 0 Then
            Set table = shGrp(i).TextFrame.TextRange.Tables(1)
            MsgBox table.Rows.Count
        End If
    Next i
End Sub
С уважением,
Aksima
1
Модератор
Эксперт MS Access
10269 / 4183 / 679
Регистрация: 07.08.2010
Сообщений: 11,787
Записей в блоге: 4
12.08.2014, 12:15 5
доработка предыдущего топика
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Sub w140812_1202a()
    Dim shGrp As GroupShapes, table As table, i, j, j1
    Dim sh As Shape
    For Each sh In Selection.Sections(1).Headers(wdHeaderFooterPrimary).Shapes
    Debug.Print "==="
    Debug.Print sh.Name, sh.GroupItems.Count
    Set shGrp = sh.GroupItems
        For i = 1 To shGrp.Count
            j = shGrp(i).TextFrame.TextRange.Tables.Count
            j1 = shGrp(i).TextFrame.TextRange.Fields.Count
            Debug.Print shGrp(i).Name, "n="; j, "f="; j1
        Next i
    Next sh
''Group 13       5
''Надпись 2     n= 1          f= 2 два поля в одной таблице
''Text Box 797  n= 0          f= 1 таблицы нет, а поле есть
''Text Box 798  n= 0          f= 0
''Надпись 2     n= 1          f= 0
''Rectangle 12  n= 0          f= 0
End Sub
2
5 / 4 / 0
Регистрация: 18.09.2011
Сообщений: 71
20.08.2014, 12:50  [ТС] 6
Скажите, а есть ли возможность обратиться к Shape'у на текущем листе. Я вот пробую разными способами, но он всё равно обращается к шэйпам во всех разделах. Если у меня в документе 30 разделов, то находясь, например, в середине документа я вывожу количество графических объектов, он выдаёт из всех разделов 30 штук.
Т.е. если я напишу так: MsgBox Selection.Sections(1).Headers(wdHeaderFooterPrimary).Shapes. Count, то выведется "30". Хотя в коде явно указано Selection.
0
Модератор
Эксперт MS Access
10269 / 4183 / 679
Регистрация: 07.08.2010
Сообщений: 11,787
Записей в блоге: 4
20.08.2014, 15:14 7
попробуйте, встаньте на страницу, где shape c текстом
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
Sub w_140820()
Dim j1, j1k, j2, s1, s2
 
Dim objRectangle As Rectangle
Dim objShape As ShapeRange
Dim npage, nsection
 
'On Error Resume Next
j1k = Word.ActiveDocument.Sections.Count
Debug.Print "Word.ActiveDocument.Shapes=", Word.ActiveDocument.Shapes.Count
Do While j1 < j1k
j1 = j1 + 1
Debug.Print "Sections=", j1
Debug.Print "wdHeaderFooterPrimary=", Word.ActiveDocument.Sections(j1).Headers(wdHeaderFooterPrimary).Shapes.Count
Debug.Print "wdHeaderFooterFirstPage=", Word.ActiveDocument.Sections(j1).Headers(wdHeaderFooterFirstPage).Shapes.Count
Debug.Print "wdHeaderFooterEvenPages=", Word.ActiveDocument.Sections(j1).Headers(wdHeaderFooterEvenPages).Shapes.Count
Loop
' word.ActiveDocument.
npage = Selection.Information(wdActiveEndPageNumber)
Debug.Print "wdActiveEndPageNumber=", npage
nsection = Selection.Information(wdActiveEndSectionNumber)
Debug.Print "wdActiveEndSectionNumber=", nsection
'
Debug.Print "текущая страница= "; npage, "раздел ="; nsection
 
Set objRectangle = ActiveDocument.ActiveWindow.Panes(1).Pages(npage).Rectangles.Item(1)
 
Debug.Print "'Use the RectangleType property to determine the type of rectangle."
Debug.Print "'The following example creates a ShapeRange object if the specified rectangle is a shape."
j1 = 0
Do While j1 < npage
j1 = j1 + 1
Debug.Print "-------------------страница=", j1
 
j2 = ActiveDocument.ActiveWindow.Panes(1).Pages(j1).Rectangles.Count
Do While j2 > 0
Set objRectangle = ActiveDocument.ActiveWindow.Panes(1).Pages(j1).Rectangles(j2)
    'Debug.Print "objRectangle.Range.Text=", j2
If objRectangle.RectangleType = wdShapeRectangle Then
    Set objShape = objRectangle.Range.ShapeRange
    Debug.Print "ShapeRange", objShape.Name
    Debug.Print "-------------------", objShape.TextFrame.TextRange.Text
    j2 = j2 + 0
End If
 
j2 = j2 - 1
Loop
j1 = j1 + 1
Loop
''Word.ActiveDocument.Shapes = 0
''Sections = 1
''wdHeaderFooterPrimary = 2
''wdHeaderFooterFirstPage = 2
''wdHeaderFooterEvenPages = 2
''Sections = 2
''wdHeaderFooterPrimary = 2
''wdHeaderFooterFirstPage = 2
''wdHeaderFooterEvenPages = 2
''wdActiveEndPageNumber = 3
''wdActiveEndSectionNumber = 2
''текущая страница=  3        раздел = 2
'''Use the RectangleType property to determine the type of rectangle.
'''The following example creates a ShapeRange object if the specified rectangle is a shape.
''-------------------страница=               1
''ShapeRange    Rectangle 1
''-------------------         001
''
''-------------------страница=               3
''ShapeRange    Rectangle 2
''-------------------         002
 
End Sub
0
6070 / 1315 / 195
Регистрация: 12.12.2012
Сообщений: 1,024
20.08.2014, 17:05 8
Вариант, предложенный shanemac51, очень интересен, но сложен для понимания.
Предложу решение попроще - через подсчет фигур внутри диапазона, возвращаемого свойством .Range объекта Headers(wdHeaderFooterPrimary)

С уважением,
Aksima
0
Вложения
Тип файла: rar CountShapesInHeaders.rar (18.4 Кб, 15 просмотров)
5 / 4 / 0
Регистрация: 18.09.2011
Сообщений: 71
21.08.2014, 13:17  [ТС] 9
Большое вам спасибо за помощь.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.08.2014, 13:17

Реализовать подсчет количества объектов класса, используя статическую переменную-член класса
как реализовать подсчет количества объектов класса (используя статическую переменную-член класса),...

Работа со строками. Подсчет количества слов в предложениях и т.д
С клавиатуры вводится текстовая строка. Составить программу которая: 1) считает количество слов...

Работа с колонтитулами на VBA
Доброго времени суток! Подскажите, пожалуйста, как решить следующую задачку: Задача:...

Ворд: работа с колонтитулами
Как программно можно получить номер раздела документа по текущему положению курсора? С уважением


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

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

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