Тема: Разные алгоритмы для классов Word
В данной теме я привожу примеры нестыковки классов и объектов Word. Для примера данной темы приведу объект Word Страница(Page). Казалось бы что может быть проще для программы или макроса нужны параметры страницы. Их можно получить несколькими способами (для эксперемента создайте Новый чистый документ по умолчанию размер страницы A4 210х297 мм и в Модуле ThisDocument создайте 2-е функции) :
1. Функция Page возвращает объект Page(Страница) вот ее код:
Public Function Page() As Page
Set Page = ActiveDocument.ActiveWindow.ActivePane.Pages(i)
End Function
2. Функция PageSetup возвращает объект PageSetup(Настройка страницы) вот ее код:
Public Function PageSetup1() As PageSetup
Set PageSetup1 = Selection.Range.PageSetup
End Function
Так как нас Новый чистый документ функция PageSetup включит в себя настройки 1-й страницы, что и нужно нам для сравнения. Теперь создадим процедуру выводящую в окне Immdiate редактора VBA параметры страницы ширина и высота основанные на данных объектов созданных ранее функций. Не сложно догадаться, что они должны совпадать. Вот код процедуры:
Public Sub TestSetup()
Dim p As Page, ps As PageSetup
Set p = Page
Set ps = PageSetup1
Debug.Print "Объект Page: Ширина = " & p.Width & "; Выстота = " & p.Height
Debug.Print "Объект PageSetup1: Ширина = " & ps.PageWidth & "; Выстота = " & ps.PageHeight
Debug.Print "Объект Page: Ширина = " & PointsToMillimeters(p.Width) & "; Выстота = " & PointsToMillimeters(p.Height)
Debug.Print "Объект PageSetup1: Ширина = " & PointsToMillimeters(ps.PageWidth) & "; Выстота = " & PointsToMillimeters(ps.PageHeight)
End Sub
После выполнения этой процедуры в окне Immdiate редактора VBA появятся 2 строки:
Объект Page: Ширина = 595; Выстота = 842
Объект PageSetup1: Ширина = 595,3; Выстота = 841,9
Объект Page: Ширина = 209,9028; Выстота = 297,0389
Объект PageSetup1: Ширина = 210,0086; Выстота = 297,0036
Казалось бы разница небольшая, но во-первых одно и тоже свойство определяющее одинаковый параметр называется по разному Width и PageWidth, Height и PageHeight, а во-вторых если для обычных пользователей это разница не играет особой роли, то для программиста встает вопрос, какие из этих данных точнее, чтобы использовать их в макросе. Но еще более прикольней то, что при создании пакета Microsoft Office программисты в разных приложениях создают классы с одинаковым названием, но с разными свойствами и процедурами, что вносит дополнительную путанницу.
Отредактировано aap77 (27.09.2012 04:13:54)