Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > [Перенесено из VB6/MS Access]Как определить конец страницы в Excel


Автор: Шепталов 27.11.2003, 16:59
Сразу расскажу обо всем. Выделена ячека в листе "sheet1" в колонке А. Строки в этом листе имеют разную высоту, следовательно, при печати на принтер на бумажных листах будет помещено разное количество строк. Итак, вопрос:
КАК определить, будет ли выделенная ячейка находится в последней строке какого-либо n-ого бумажного листа, когда документ выведут на печать

Автор: hobotyara 27.11.2003, 17:34
Делаешь новый документ. Там строки имеют одинаковую высоту. забиваешь первую колонку любым текстом, строк 70. делаешь разметку страницы и смотришь сколько строк попало на первую страницу.
Например, при масштабе страницы 100% при высоте 12,75 получается 56 строк.
Т.е. область печати занимает 714 чего-то там (пикселей или пунктов не помню)
Дальше делаешь цикл от первой строки, до своей ячейки и суммируешь высоты строк.
Если сумма поделилась на 714 нацело, значит твоя ячейка будет в последней строке.
только тут нужно учесть, что пользователь может поменять масштаб страницы и поля, это может повлиять на результат.

Автор: Шепталов 28.11.2003, 15:37
2hobotyara
Классно!
Оказывается все элементарно! Глубокое вам человеческое спасибо!

Автор: Temnozor 29.11.2003, 14:02
Все это может и сработает, но не изящно.
В VBA есть такие объекты как HPageBreaks. Можно узнать где они лежат относительно нужной ячейки.

Автор: malor 16.7.2008, 18:00
А вот так прокатит если написать - 
Код
Application.ActiveSheet.HPageBreaks.Add $H$20
чтоб то, что ниже 20-й строки уже стало на другой странице?

Автор: Akina 16.7.2008, 18:58
Цитата(hobotyara @  27.11.2003,  18:34 Найти цитируемый пост)
Если сумма поделилась на 714 нацело, значит твоя ячейка будет в последней строке.

А потом меняем нижнее поле на 10 сантиметров... или ставим "масштабировать в лист"... не все так просто.

Автор: malor 17.7.2008, 09:14
Делал 
Код
Application.ActiveSheet.HPageBreaks.Add(тут ячейка);
Но разрыв оказался по верхнему уровню указанной ячейки(т.е. всей  строки, в которой  она  расположена),  а не  по нижнему. Почему?

Автор: mihanik 23.7.2008, 21:11
malor, так задумано.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)