Доброго дня! Необходимо подсчитать количество страниц, которые пойдут на распечатку. На титульном листе документа должно быть написано сколько страниц будет сшито в документе - делал бы всё ручками, благо страниц не так много, но количество документов большое. В одной из старых тем предлагалось для этого использовать ПОЛУЧИТЬ.РАБОЧУЮ.КНИГУ() или ЛИСТЫ(). Но они у меня (MS Excel 2010) почему-то не работают. На другом ресурсе нашёл макрос
но боюсь тема древняя и в макросах я плохо разбираюсь (поэтому желательно было бы получить готовый).
Доброго дня! Необходимо подсчитать количество страниц, которые пойдут на распечатку. На титульном листе документа должно быть написано сколько страниц будет сшито в документе - делал бы всё ручками, благо страниц не так много, но количество документов большое. В одной из старых тем предлагалось для этого использовать ПОЛУЧИТЬ.РАБОЧУЮ.КНИГУ() или ЛИСТЫ(). Но они у меня (MS Excel 2010) почему-то не работают. На другом ресурсе нашёл макрос
Function GetPageCount() As Long Dim i& With Application.Caller.Parent i = .HPageBreaks.Count If i Then If .HPageBreaks(i).Location.Row >= (.UsedRange.Row + .UsedRange.Rows.Count) Then i = i - 1 GetPageCount = i + 1 End With End Function
[/vba] (Не проверял, но должна работать правильно, если данные по ширине умещаются на 1 страницу. А если не умещаются, то нужно доделать, чтобы проверялось еще и кол-во страниц по ширине и учитывалась последовательность вывода страниц, указанная в настройках)
Добрый день! Вот, набросал UDF [vba]
Код
Function GetPageCount() As Long Dim i& With Application.Caller.Parent i = .HPageBreaks.Count If i Then If .HPageBreaks(i).Location.Row >= (.UsedRange.Row + .UsedRange.Rows.Count) Then i = i - 1 GetPageCount = i + 1 End With End Function
[/vba] (Не проверял, но должна работать правильно, если данные по ширине умещаются на 1 страницу. А если не умещаются, то нужно доделать, чтобы проверялось еще и кол-во страниц по ширине и учитывалась последовательность вывода страниц, указанная в настройках)KSV
Отлично! Большое спасибо... Не сразу разобрался, но работает. Данные по ширине проверять не надо - у меня за полями куча левых формул, которые на печать и так идти не должны.
Отлично! Большое спасибо... Не сразу разобрался, но работает. Данные по ширине проверять не надо - у меня за полями куча левых формул, которые на печать и так идти не должны.JustMe
конечно, понимаю, что дарёному коню в зубы не смотрят, но обнаружил такую вещь: для обновления значения ячейки, в которую вставлен макрос, нужно его заново вводить. Мне с этим смириться?
конечно, понимаю, что дарёному коню в зубы не смотрят, но обнаружил такую вещь: для обновления значения ячейки, в которую вставлен макрос, нужно его заново вводить. Мне с этим смириться?JustMe
Function GetPageCount() As Long Dim i& Application.Volatile With Application.Caller.Parent i = .HPageBreaks.Count If i Then If .HPageBreaks(i).Location.Row >= (.UsedRange.Row + .UsedRange.Rows.Count) Then i = i - 1 GetPageCount = i + 1 End With End Function
[/vba]
можно вылечить [vba]
Код
Function GetPageCount() As Long Dim i& Application.Volatile With Application.Caller.Parent i = .HPageBreaks.Count If i Then If .HPageBreaks(i).Location.Row >= (.UsedRange.Row + .UsedRange.Rows.Count) Then i = i - 1 GetPageCount = i + 1 End With End Function