Страницы: 1
RSS
Программно посчитать количество всех страниц (на печать) в книге Excel - VBA
 
Всем привет!
Задача:
Посчитать количество распечатанных листов книги Excel программно.
Элементарный вопрос как оказалось стал не столь тривиален (для меня).
Пришлось да же Загуглить :)
Собственно хочу поделится решением... но предлагаю сначала поделится вашим видинием решения данной задачи.
Файл прилагаю (нужно посчитать сколько листов распечатается).
Скрытый текст
Изменено: bedvit - 21.07.2017 13:50:12
«Бритва Оккама» или «Принцип Калашникова»?
 
Выложил и на КиберФоруме
«Бритва Оккама» или «Принцип Калашникова»?
 
Ну, решение "в лоб" (посчитал 23 страницы):
Скрытый текст
Изменено: Skif-F - 21.07.2017 14:34:19
 
Все верно  - 23 страницы.
В одном направлении мыслим... сначала пошел по совету Уокенбаха, через разделитель страниц
Код
PageCount = PageCount + (sht.HPageBreaks.Count + 1) * (sht.VPageBreaks.Count + 1)
Но этот путь оказался ошибочным.
Вот мое решение:
Скрытый текст

Вообщем-то все просто в итоге.
Изменено: bedvit - 21.07.2017 15:18:47
«Бритва Оккама» или «Принцип Калашникова»?
 
Путь был бы не ошибочным, если б конструкция sht.HPageBreaks.Count внезапно не просила бы костыля...
Код
Set sht = Sheets(1)
'_____________________________Вот костыль
sht.Activate
sht.UsedRange.Cells(sht.UsedRange.Count).Select
________________________________________
ТеперьПравильноеКолРазрывов = sht.HPageBreaks.Count

Если работать с одним листом, то ладно, но несколькими....  :D
 
А так правильно?
Код
Pages_Count = ExecuteExcel4Macro("GET.DOCUMENT(50)")
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Посчитать количество распечатанных листов книги Excel программно
Код
  iCountPages = ExecuteExcel4Macro("GET.DOCUMENT(50)")
 
Цитата
The_Prist написал:
А так правильно?
Kuzmich,
Да, отрабатывает правильно, на активном листе.
как-то так:
Код
Sub Pages_Count()
Dim Pages_Count As Long, sh
For Each sh In ThisWorkbook.Sheets 'ActiveWorkbook.Sheets
'Pages_Count = Pages_Count + sh.PageSetup.Pages.Count
sh.Activate: Pages_Count = Pages_Count + ExecuteExcel4Macro("GET.DOCUMENT(50)")
Next
MsgBox "Будет распечатано страниц: " & Pages_Count
End Sub
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
Вот мое решение:
Доброго дня
Столкнулся с такой же задачей, до печати, программно получить количество страниц, но не во всей книге целиком, а на конкретном листе, коих в книге много. Как бы оптимизировать Ваше решение под конкретный лист в книге?
Страницы: 1
Наверх