Всем привет! Задача: Посчитать количество распечатанных листов книги Excel программно. Элементарный вопрос как оказалось стал не столь тривиален (для меня). Пришлось да же Загуглить Собственно хочу поделится решением... но предлагаю сначала поделится вашим видинием решения данной задачи. Файл прилагаю (нужно посчитать сколько листов распечатается).
Скрытый текст
John Walkenbach (Джон Уокенбах) - такого мужика знаю, про PageCount = PageCount + (sht.HPageBreaks.Count + 1) * (sht.VPageBreaks.Count + 1) тоже.
Public Function WorkbookPageCount2() As Integer
Dim ЧислоСтраницВсего As Integer 'Количество страниц (листов) которое необходимо вставить в принтер
Dim ws As Worksheet 'Счётчик цикла при переборке листов
Dim СтраницНаЛисте As Integer 'Страниц на одном рабочем листе
If Not ActiveWorkbook Is Nothing And Not ActiveWindow Is Nothing Then
ЧислоСтраницВсего = 0
'Перебираем все листы в наборе
For Each ws In ActiveWorkbook.Worksheets
If ws.Visible = xlSheetVisible Then 'Не обрабатываем невидимые
ws.DisplayPageBreaks = True 'Разбиваем лист на страницы
СтраницНаЛисте = ws.PageSetup.Pages.Count 'Узнаём, сколько страниц на листе
ЧислоСтраницВсего = ЧислоСтраницВсего + СтраницНаЛисте
End If
Next ws
End If
WorkbookPageCount = ЧислоСтраницВсего
End Function
Sub Pages_Count()
Dim Pages_Count As Long, sh
For Each sh In ThisWorkbook.Sheets
Pages_Count = Pages_Count + sh.PageSetup.Pages.Count
Next
MsgBox "Будет распечатано страниц: " & Pages_Count
End Sub
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
Доброго дня Столкнулся с такой же задачей, до печати, программно получить количество страниц, но не во всей книге целиком, а на конкретном листе, коих в книге много. Как бы оптимизировать Ваше решение под конкретный лист в книге?
Скажите пожалуйста, а как результат этого макроса вывести не сообщением, а чтобы эта цифра отображалась в определенной ячейке. ну например при нажатии созданной кнопки или автоматически?
Нет, вы не поняли, мне нужно чтобы в ячейке этого же файла отображалось количество страниц этого же файла. Я не могу понять куда в макросе написать строчку (и как она вообще должна выглядеть) чтобы результат подсчёта выводился в ячейку.
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
супер! но мне не нужно чтобы сообщение, нужно чтобы прям в ячейке показалось.
Sub Pages_Count()
Dim iSh As Worksheet
Dim arr()
Dim I&
ReDim arr(1 To ThisWorkbook.Worksheets.Count, 1 To 2)
For Each iSh In ThisWorkbook.Worksheets
I = I + 1
arr(I, 1) = iSh.Name
arr(I, 2) = iSh.PageSetup.Pages.Count
Next
ThisWorkbook.Worksheets(1).Range("A1").Resize(I, 2) = arr
End Sub
Согласие есть продукт при полном непротивлении сторон