1

Тема: Разные алгоритмы для классов 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)

2

Re: Разные алгоритмы для классов Word

Возникает естественный вопрос: "Зачем нужна такая точность?"
Отвечу за счет точности решения задачи можно сэкономить средства. А сэкономленное — это заработанное. Например: в издательство от авторов поступает материал для журнала, т.к. большинство пользователей использует Word как удобную печатную машинку, то допустим журнал формата A4 в 128 страниц будет стоить допустим 80 руб. при тираже в 1000 экземпляров. Не сложно посчитать, что весь отпечатанный тираж будет стоить 128 000 рублей. 128 страниц A4 — 16 печатных листов формата A1. Теперь за счет точности распределения элементов издания и правильном использовании возможностей программы верстальщик сокращает общее содержание журнала со 128 страниц до 124 тогда 1 экз. по объему составит 15.5 листов. При тираже в 1000 экз. разница составит 500 листов, разделив 500 на 15.5 получаем дополнительно 32 экземпляра журнала при объеме 16 * 1000 = 160000 п.л. Цена одного номера журнала в продаже составляет допустим 120 руб. тогда продажа дополнительных 32 экземпляров составит 32*120 = 3840 рублей дополнительной прибыли, либо, если продажа составит всего 1000 экз. и менее то экономия при производстве будет 32*80 = 2560 руб. Теперь если минимальный тираж журнала увеличим в 10 раз, т.е. 10000 экз. видно каков будет доход и экономия средств. Мелочь, а приятно. smile

3

Re: Разные алгоритмы для классов Word

При верстке учебной литературы удавалось сэкономить от 2 печатных листов с экземпляра от первоначального объема авторского материала при формате издания А5 это 125 доп. экземпляров при средней себестоимости печати в то время в 80 руб. за книгу средняя экономия производства была от 10000 руб. при выпуске одним одним человеком 5 книг в месяц уже как минимум 50000 и это еще не учитывается экономия времени на производство с использованием макросов. Т.е. работа выполняемая вручную за 3-4 дня выполняется за несколько секунд или минут в зависимости от сложности. И точность выполняемой работы играет немаловажную роль в этом процессе.