Excel задать область печати программно

Параметры печатной страницы в VBA Excel. Свойство PageSetup объекта Worksheet. Объект PageSetup и описание некоторых его свойств с примерами.

PageSetup — это объект, который содержит все атрибуты параметров страницы в виде свойств (диапазон печати, размеры полей, ориентация страницы и т.д.).

Объект PageSetup возвращается свойством PageSetup объекта Worksheet:

где Expression — это выражение (переменная), возвращающее объект Worksheet.

Свойства объекта PageSetup

Диапазон печати

Установить диапазон для печати из кода VBA Excel можно с помощью свойства PageSetup.PrintArea:

Worksheets(«Лист1»).PageSetup.PrintArea = «D7:L30»

Лист1.PageSetup.PrintArea = Selection.Address

Размеры полей

Свойства, отвечающие за размер полей печатной страницы:

Свойство Описание
LeftMargin Возвращает или задает размер левого поля
TopMargin Возвращает или задает размер верхнего поля
RightMargin Возвращает или задает размер правого поля
BottomMargin Возвращает или задает размер нижнего поля

Свойства, отвечающие за размер полей, предназначены для чтения и записи, выражаются в точках (1 точка равна 1/72 дюйма или ≈1/28 см). Тип данных — Double.

Для того, чтобы вручную не высчитывать количество точек в дюймах или сантиметрах, существуют методы Application.InchesToPoints и Application.CentimetersToPoints, которые автоматически переводят дюймы и сантиметры в точки.

Пример задания размеров полей для печатной страницы:

Sub Primer1()

    With Лист4.PageSetup

        .LeftMargin = 72  ‘1 дюйм (2,54 см)

        .TopMargin = Application.CentimetersToPoints(2)  ‘2 см

        .RightMargin = 28  ‘приблизительно 1 см

        .BottomMargin = Application.InchesToPoints(0.5)  ‘0,5 дюйма (1,27 см)

    End With

End Sub

Пример чтения размеров заданных полей для печатной страницы и запись их в ячейки диапазона [A1:A4] активного листа:

Sub Primer2()

    With Лист4.PageSetup

        [A1] = .LeftMargin

        [A2] = .TopMargin

        [A3] = .RightMargin

        [A4] = .BottomMargin

    End With

End Sub

Масштаб

Масштабирование рабочего листа для печати осуществляется в VBA Excel с помощью свойства PageSetup.Zoom:

Лист4.PageSetup.Zoom = 200  ‘Увеличение масштаба до 200% (от 100%)

Worksheets(«Лист4»).PageSetup.Zoom = 80  ‘Уменьшение масштаба до 80% (от 100%)

Свойство PageSetup.Zoom может задавать или возвращать значение от 10 до 400 процентов.

Ориентация страницы

За ориентацию печатной страницы отвечает свойство PageSetup.Orientation, которое возвращает или задает значение константы из коллекции XlPageOrientation.

Константы коллекции XlPageOrientation:

Константа Значение Описание
xlPortrait 1 Портретный режим (вертикальная ориентация)
xlLandscape 2 Ландшафтный режим (горизонтальная ориентация)

Примеры установки ориентации печатной страницы из кода VBA Excel:

Worksheets(«Лист4»).PageSetup.Orientation = xlPortrait

ActiveSheet.PageSetup.Orientation = xlLandscape


 

jfd

Пользователь

Сообщений: 302
Регистрация: 01.01.1970

#1

29.01.2013 18:10:48

Здравствуйте!
Надо задать область печати по последней заполненной ячейке. Приведенный ниже макрос корректно определяет последнюю строку и столбец. Ячейка в строке, по которой определяется последний столбец имеет длинный текст, который выходит за границу ячейки/столбца и не смотря на правильно определенный и заданный номер последнего столбца область печати задается не по указанному столбцу, а по краю длинного текста.
Что с этим делать, подскажите?

Код
Sub пример()
    Windows("пример.xlsx").Activate
    LastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
    LastClm = Cells(1, Columns.Count).End(xlToLeft).Column
    MsgBox LastRow
    MsgBox LastClm
    ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(LastRow, LastClm))
        End Sub

Прикрепленные файлы

  • пример установки области печати.xlsm (18.23 КБ)

Изменено: jfd29.01.2013 18:11:55

 

Sergei_A

Пользователь

Сообщений: 443
Регистрация: 05.01.2013

#2

29.01.2013 19:06:29

Не хватило самой малости

Код
ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(LastRow, LastClm)).Address
 

jfd

Пользователь

Сообщений: 302
Регистрация: 01.01.1970

Спасибо, все заработало как надо.
Но почему не работало если подставлялись правильные значения строк и столбцов диапазона?

 

The_Prist

Пользователь

Сообщений: 14181
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

Потому что свойство PrintArea принимает в качестве аргумента текст(т.е. адрес диапазона), а не сам диапазон как объект.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Добрый всем вечер.
Подскажите, пожалуйста, как изменить данный макрос, чтобы область печати задавать по последней не пустой строке (или ячейке) только определенного диапазона столбцов, например А:Н.
Использую режим разметки страницы, необходимо выводить на печать только первую страницу и те, которые расположены под ней (при их заполнении), без страниц, расположенных справа от первой.
Заранее всем большое спасибо!

 

Sergei_A

Пользователь

Сообщений: 443
Регистрация: 05.01.2013

#6

12.03.2013 20:19:57

Код
Sub PrintArea()
    LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(LastRow, 8)).Address
End Sub

8 — это номер столбца H

 

Выдает ошибку — переменная не определена(

 

Kuzmich

Пользователь

Сообщений: 7998
Регистрация: 21.12.2012

 

Sergei_A

Пользователь

Сообщений: 443
Регистрация: 05.01.2013

#9

12.03.2013 21:20:49

SerjVorotilov,  сорри, к Option Explicit я себя пока не приучил  :)
Можно обойтись без переменной

Код
Sub PrintArea()
    With ActiveSheet
        .PageSetup.PrintArea = Range(Cells(1, 1), Cells(.Cells(Rows.Count, 1).End(xlUp).Row, 8)).Address
    End With
End Sub
 

Большое спасибо Вам, Sergei_A и Kuzmich
Чуть позже отпишусь.

 

Что-то не могу понять — область печати в обоих случаях — диапазон А1:Н1, несморя на наличие данных в ячейках, расположенных ниже (но в диапазоне А:Н)
Может что-то не так делаю?
Или не так объяснил?
Необходимо, чтобы область печати была от А1 до Нх, где х — номер строки, содержащей последнюю непустую ячейку в столбах А-Н.
Файл прилагаю

Прикрепленные файлы

  • 1.xlsm (15.85 КБ)

 

Sergei_A

Пользователь

Сообщений: 443
Регистрация: 05.01.2013

#12

13.03.2013 00:06:23

Не думал, что у Вас первый столбец пустой, по-этому всегда лучше сразу кидать пример

Код
Sub PrintArea()
Dim LastRow As Long
    LastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
    ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(LastRow, 8)).Address
End Sub
 

Спасибо, Сергей, то что нужно.

 

jfd

Пользователь

Сообщений: 302
Регистрация: 01.01.1970

#14

13.03.2013 00:16:13

Кажется самый простой вариант

Код
Sub PrintArea11()
PageSetup.PrintArea = Range(Cells(1, 1), Cells(Cells.SpecialCells(xlLastCell).Row, 8)).Address
End Sub
 

SerjVorotilov

Пользователь

Сообщений: 231
Регистрация: 01.01.1970

#15

13.03.2013 00:30:10

Сделал через Worksheet_SelectionChange:

Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim LastRow As Long
    LastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
    ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(LastRow, 8)).Address
End Sub

Еще раз огромное спасибо Вам, Сергей.

 

SerjVorotilov

Пользователь

Сообщений: 231
Регистрация: 01.01.1970

#16

13.03.2013 00:33:51

Сделал через Worksheet_SelectionChange:

Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim LastRow As Long
    LastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
    ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(LastRow, 8)).Address
End Sub

Еще раз огромное спасибо Вам, Сергей.

Блин, только при использовании Worksheet_SelectionChange макрос начинает реагировать на ввод данных в столбцы, выходящие за определенный мной диапазон А:Н, что не есть гуд.

 

Sergei_A

Пользователь

Сообщений: 443
Регистрация: 05.01.2013

#17

13.03.2013 00:42:26

Воспользуйтесь событием Workbook_BeforePrint
в модуль книги

Код
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim LastRow As Long
LastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
ActiveSheet.PageSetup.PrintArea = ActiveSheet.Range(Cells(1, 1), Cells(LastRow, 8)).Address
End Sub

Изменено: Sergei_A13.03.2013 00:44:00

 

marchela

Пользователь

Сообщений: 8
Регистрация: 30.11.2018

Здравствуйте!
Пожалуйста, помогите решить проблему:
Вышеуказанные примеры работают, НО
надо определить последнюю строку/столбец на листе БЕЗ учета форматов и формул — только по отображаемому значению в ячейке,
то есть:
есть на листе большая таблица и последние строки заполнены формулами, возвращающими пустую ячейку(=»»), Ваши предыдущие варианты вернут строку/столбец ячейки с последней формулой, в то время как нужно вернуть адрес ячейки только в случае, если в ячейке реально отображается какое-то значение.
Ну а по этим значениям уже задать область печати.
Спасибо за ответ!

 

Sanja

Пользователь

Сообщений: 14838
Регистрация: 10.01.2013

Согласие есть продукт при полном непротивлении сторон.

 

marchela

Пользователь

Сообщений: 8
Регистрация: 30.11.2018

#20

18.01.2019 12:13:25

Доброго дня!

Почему не в тему? У меня похожая задача. Смотрите вложение
По вышеприведенному коду

Сделал через Worksheet_SelectionChange:

Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim LastRow As Long
   LastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
   ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(LastRow, 4)).Address
End Sub

у меня работает, но только нужно реализовать выделение области БЕЗ учета форматов и формул — только по отображаемому значению в ячейке.

КАК ОПРЕДЕЛИТЬ ПОСЛЕДНЮЮ ЯЧЕЙКУ НА ЛИСТЕ ЧЕРЕЗ VBA? СПОСОБ 4

Да видел я этот пример — с реализацией туго    , помогите, пожалуйста, соединить этот код с кодом из способа 4
лист Главная — при выборе из выпадающего списка в колонке В динамически меняется информация (то 10 строк, то 40 строк и т.д.), которую и надо распечатать

Прикрепленные файлы

  • Требование-накладная-тест.rar (33.43 КБ)

Изменено: marchela18.01.2019 12:20:36

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

marchela, код следует оформлять соответствующим тегом: ищите такую кнопку (см. скрин) и исправьте своё сообщение.

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

#22

18.01.2019 12:24:26

И ещё:

Цитата
marchela написал:
а по этим значениям уже задать область печати

Т.е. Ваш вопрос лишь косвенно связан с этой темой — задание области печати.
Так что Sanja  прав: поиск последней заполненной ячейки — вопрос не для этой темы.

 

Antag

Пользователь

Сообщений: 52
Регистрация: 06.08.2022

Получится задать разные области печати на нескольких листах книги, чтобы область печати менялась в зависимости от значения одной ячейки в другом листе?

Если Главный!R6=»a» → область печати одна,
при всех других значениях Главный!R6 → область печати другая.

 

MikeVol

Пользователь

Сообщений: 229
Регистрация: 20.10.2020

Ученик

#24

24.01.2023 09:17:05

Antag  Доброго времени суток. Возможно я не понял вас правильно. Как понял. Вариант:

Код
Option Explicit

Sub Antag_Print()
    Dim i As Long, lRow As Long, lCol As Long, iRow As Long, iCol As Long

    For i = 1 To Sheets.Count

        If ThisWorkbook.Sheets(i).Name <> "Главный" Then

            If ThisWorkbook.Worksheets("Главный").Cells(6, 18) = "a" Then
                lRow = ThisWorkbook.Sheets(i).UsedRange.Row
                lCol = ThisWorkbook.Sheets(i).UsedRange.Column
                iRow = ThisWorkbook.Sheets(i).Cells(Rows.Count, lCol).End(xlUp).Row
                iCol = ThisWorkbook.Sheets(i).Cells(lRow, Columns.Count).End(xlToLeft).Column
                ThisWorkbook.Sheets(i).PageSetup.PrintArea = ThisWorkbook.Sheets(i).Range(ThisWorkbook.Sheets(i).Cells(lRow, lCol), _
                        ThisWorkbook.Sheets(i).Cells(iRow, iCol)).Address
            Else
                lRow = ThisWorkbook.Sheets(i).UsedRange.Row + ThisWorkbook.Sheets(i).UsedRange.Rows.Count - 1
                lCol = ThisWorkbook.Sheets(i).UsedRange.Column + ThisWorkbook.Sheets(i).UsedRange.Columns.Count - 1
                ThisWorkbook.Sheets(i).PageSetup.PrintArea = ThisWorkbook.Sheets(i).Range(ThisWorkbook.Sheets(i).Cells(1, 1), _
                        ThisWorkbook.Sheets(i).Cells(lRow, lCol)).Address
            End If

        End If

    Next i

End Sub

Изменено: MikeVol24.01.2023 09:23:29

 

Antag

Пользователь

Сообщений: 52
Регистрация: 06.08.2022

#25

24.01.2023 16:05:48

Цитата
написал:
Возможно я не понял вас правильно

Если Главный!R6=»a» → область печати на других (но не на всех) листах A1:G256,
при всех других значениях Главный!R6 → область печати на других (но не на всех) листах A1:M256.

Изменено: Antag24.01.2023 16:06:08

 

MikeVol

Пользователь

Сообщений: 229
Регистрация: 20.10.2020

Ученик

#26

24.01.2023 18:15:11

Antag,

Цитата
Antag написал:
Если Главный!R6=»a» → область печати на других (но не на всех) листах A1:G256

вы этого не указали в своём стартовом посте

#23

Думаю что при таких раскладах вам не составит большого труда подстроить под ваши нужды выше мной выложеный код. Необходимо изначально чётко ставить задачи, тут экстрасенсорными способностями никто не обладает. Удачи вам.

Изменено: MikeVol24.01.2023 18:16:32

 

_Boroda_

Пользователь

Сообщений: 1496
Регистрация: 27.07.2013

Контакты см. в профиле

#27

25.01.2023 09:26:46

Для листов 1 и 3. Без макросов. См. Диспетчер имен

Прикрепленные файлы

  • Print_Area_1.xlsb (13.85 КБ)

Скажи мне, кудесник, любимец ба’гов…

Обычно после настройки на листе область печати остается постоянной. В некоторых случаях вы хотите, чтобы область печати изменялась в соответствии с содержимым печати, которое вы удалили или добавили в любое время. Как этого добиться? В этой статье мы покажем вам метод создания динамической области печати в Excel.

Создание динамической области печати в Excel


стрелка синий правый пузырь Создание динамической области печати в Excel

Как показано на скриншоте ниже, предполагается, что ваша обычная область печати — A1: E5, но данные диапазона могут увеличиваться до строки 10 и столбца G. Вы можете создать динамическую область печати, выполнив следующие действия.

1. Сначала вам нужно создать динамический именованный диапазон. Нажмите Формулы > Менеджер имен. Смотрите скриншот:

2. в Менеджер имен диалогового окна, нажмите Новинки , чтобы открыть Новое имя диалоговое окно. И в диалоговом окне «Новое имя» введите Print_Area_Formula в Имя и фамилия поле и введите формулу =OFFSET($A$1,0,0,COUNTA($A$1:$A$10),COUNTA($A$1:$G$1)) в Относится к поле и, наконец, щелкните OK кнопка. Смотрите скриншот:

Внимание: в формуле, 10 австралийских доллара и $ G $ 1 означают, что область печати не будет больше, чем строка 10 и столбец G. Вы можете изменить их по своему усмотрению.

3. Когда он вернется в Менеджер имен диалоговое окно, закройте его.

4. Выберите диапазон с данными, которые вы установите в качестве области печати (в этом случае мы выбираем A1: E5), затем щелкните Макет страницы > Область печати > Установить область печати. Смотрите скриншот:

5. Нажмите Формулы > Менеджер имен для открытия Менеджер имен диалоговое окно.

6. в Менеджер имен в диалоговом окне выберите Область печати в Имя и фамилия поле, затем замените исходную формулу на = Печать_Области_Формулы (имя созданного вами динамического диапазона) в Относится к поле, а затем щелкните кнопку, чтобы сохранить изменение. Наконец закройте Менеджер имен диалоговое окно.

Теперь динамическая область печати создана. Вы можете видеть, что область печати корректируется с добавленными или удаленными данными, пока не достигнет указанной строки и столбца. Смотрите скриншот:


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (6)


Оценок пока нет. Оцените первым!

Skip to content

Как в Эксель задать область печати

На чтение 1 мин. Просмотров 2.8k.

Что делает макрос: Этот макрос позволяет автоматически задать область печати.

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как использовать

Как макрос работает

В этом простом макросе, мы используем свойство PrintArea, чтобы определить диапазон ячеек, которые будут включены при печати. Как вы можете видеть, мы просто используем свойство PrintArea с адресом UsedRange. Свойство UsedRange дает диапазон, который охватывает ячейки, которые были использованы для ввода данных.
Чтобы сохранить эту динамику, мы реализуем код в изменении событии рабочего листа:

Код макроса

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.PageSetup.PrintArea = ActiveSheet.UsedRange.Address
End Sub

Как использовать

Для реализации этого макроса, вам нужно скопировать и вставить его в окно кода события Worksheet_Change. Размещение макроса позволяет запускать каждый раз, когда вы дважды щелкаете на листе.

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. В окне проекта, найти свой проект / имя рабочей книги и нажмите на знак плюс рядом с ней, чтобы увидеть все листы.
  3. Нажмите на лист, в котором вы хотите, чтобы вызвать код.
  4. Выберите Изменить событие из событий в раскрывающемся списке.
  5. Введите или вставьте код.

Собственно вопрос в этом и заключается. Как расширить программно (C#) область печати (границы) в Excel файле?

задан 9 дек 2015 в 11:07

Razor23 Donetsk's user avatar

Используйте свойство PageSetup.PrintArea:

IPageSetup pageSetup = worksheet.PageSetup;
pageSetup.PrintArea = "A1:H42";

ответ дан 9 дек 2015 в 11:20

andreycha's user avatar

andreychaandreycha

25k4 золотых знака45 серебряных знаков81 бронзовый знак

1

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Excel задать область печати для страницы
  • Excel задать массив ячеек
  • Excel задать массив числами
  • Excel задать массив значений
  • Excel задать лист в формуле

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии