Макрос печати диапазона excel

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. Введите или вставьте код.

Макрос печати

BlackRaven

Дата: Вторник, 29.05.2018, 08:05 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Доброго времени суток! Столкнулся со следующей задачей:
Необходим (для удобства) макрос печати. Но не простой, а с выделением области печати, принудительной горизонтальной ориентации и печати выделенного диапазона на 1 лист.

Простой макрос печати диапазона есть:
[vba]

Код

Sub Name()
With ThisWorkbook
.DisplayDrawingObjects = xlHide
.Worksheets(1).Range(«A1:O23»).PrintOut
.DisplayDrawingObjects = xlAll ‘xlPlaceholders
End With
End Sub

[/vba]
Что нужно добавить для горизонтальной ориентации и печати выделенного диапазона на 1 лист?

Заранее большое человеческое спасибо! )))

P.S. с ориентацией справился (вроде). Добавил следующую строку ниже .DisplayDrawingObjects = xlHide:
[vba]

Код

.ActiveSheet.PageSetup.Orientation = xlLandscape

[/vba]

Сообщение отредактировал BlackRavenВторник, 29.05.2018, 08:22

 

Ответить

Pelena

Дата: Вторник, 29.05.2018, 08:37 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Для

печати выделенного диапазона на 1 лист

Макрорекодер записал
[vba]

Код

ActiveSheet.PageSetup.FitToPagesWide = 1
ActiveSheet.PageSetup.FitToPagesTall = 1

[/vba]


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

BlackRaven

Дата: Вторник, 29.05.2018, 08:51 |
Сообщение № 3

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Pelena, СПАСИБО огромное! Вроде все работает.

Итого получилось так:

[vba]

Код

Sub name()
With ThisWorkbook
DisplayDrawingObjects = xlHide
ActiveSheet.PageSetup.Orientation = xlLandscape
Worksheets(6).Range(«A1:O23»).PrintOut
ActiveSheet.PageSetup.FitToPagesWide = 1
ActiveSheet.PageSetup.FitToPagesTall = 1
DisplayDrawingObjects = xlAll ‘xlPlaceholders
End With
End Sub

[/vba]

Данный макрос на определенном листе выделяет необходимый диапазон и выводит его на печать в альбомной ориентации на одном листе.

А с точки зрения правильности и т.д. и т.п. он правильно прописан, или кой чего мне на руки нужно сделать?

 

Ответить

sboy

Дата: Вторник, 29.05.2018, 09:14 |
Сообщение № 4

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

Замечаний:
0% ±


Excel 2010

с точки зрения правильности

Вы печатаете, а потом устанавливаете размеры
Примерно так надо поправить
[vba]

Код

Sub name()
ThisWorkbook.DisplayDrawingObjects = xlHide
    With ActiveSheet.PageSetup
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        .Orientation = xlLandscape
    End With
    Range(«A1:O23»).PrintOut
ThisWorkbook.DisplayDrawingObjects = xlAll ‘xlPlaceholders
End Sub

[/vba]


Яндекс: 410016850021169

 

Ответить

_Boroda_

Дата: Вторник, 29.05.2018, 09:25 |
Сообщение № 5

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

с точки зрения правильности

1. В одной строке у Вас работа с шестым листом, а в строках ниже и выше — с активным. Если активен шестой лист, то все нормально. А если нет?
2. Если написано [vba][/vba], то это значит, что мы работаем с той книгой, где находится макрос. With что-то подразумевает, что внутри блока With — End With мы будем обращаться к этому что-то, но писать его не будем. Запись примерно такая
[vba]

Код

With ThisWorkbook
       .DisplayDrawingObjects = xlHide
End With

точка перед DisplayDrawingObjects означает, что перед ним как бы написано то, про что мы написали With. Если без With, то вот так [vba]

Код

ThisWorkbook.DisplayDrawingObjects = xlHide

[/vba]. Короче, почитайте справку про With https://msdn.microsoft.com/ru-ru….%3Dtrue
Кстати, ThisWorkbook здесь вообще не нужен. А вот ActiveSheet нужен
[vba]

Код

Sub nameu8()
    DisplayDrawingObjects = xlHide
    With ActiveSheet
        .PageSetup.Orientation = xlLandscape
        .Range(«A1:O23»).PrintOut
        .PageSetup.FitToPagesWide = 1
        .PageSetup.FitToPagesTall = 1
    End With
    DisplayDrawingObjects = xlAll
End Sub

[/vba]
3. Крайне нежелательно называть что-либо (макросы, функции, объекты, переменные, …) именами, зарезервированными в Excel или в VBA. У Вас макрос называется «name». Не нужно так делать. Назовите как-нибудь иначе. Хотя бы «name_»


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

BlackRaven

Дата: Вторник, 29.05.2018, 10:43 |
Сообщение № 6

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

_Boroda_, про имя — я знаю, спасибо (просто тут обозначил как Name. При запуске Вашего макроса — да, печатает выделенный фрагмент, но на 4-х листах. А у меня задача впихнуть невпихуемое (эти 4 листа на 1). Иными словами действия: «Выделить диапазон-настройка печати-альбомная ориентация-напечатать выделенный фрагмент-вписать лист на 1 страницу» должны проводиться в автоматическом режиме…

 

Ответить

sboy

Дата: Вторник, 29.05.2018, 11:02 |
Сообщение № 7

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

Замечаний:
0% ±


Excel 2010

Вы печатаете, а потом устанавливаете размеры


Яндекс: 410016850021169

 

Ответить

BlackRaven

Дата: Вторник, 29.05.2018, 11:08 |
Сообщение № 8

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

sboy, да, читал Ваше замечание по этому поводу. Но Ваш код также печатает на 4-х листах)))

 

Ответить

_Boroda_

Дата: Вторник, 29.05.2018, 11:14 |
Сообщение № 9

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Да, конечно, еще нужно поменять местами. К сожалению проверить наглядно сейчас не могу, поэтому только теоретически всё


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

BlackRaven

Дата: Вторник, 29.05.2018, 11:16 |
Сообщение № 10

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

_Boroda_, дак проверить не вопрос (сам сразу проверяю), вот только я еще пытаюсь понять суть написания макросов и учусь на пробах и ошибках. Что с чем поменять местами подскажете?

 

Ответить

sboy

Дата: Вторник, 29.05.2018, 11:26 |
Сообщение № 11

Группа: Друзья

Ранг: Участник клуба

Сообщений: 2566


Репутация:

724

±

Замечаний:
0% ±


Excel 2010

Но Ваш код также печатает на 4-х листах

проверил, сжимает до 1 листа нормально


Яндекс: 410016850021169

 

Ответить

_Boroda_

Дата: Вторник, 29.05.2018, 11:32 |
Сообщение № 12

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

проверить не вопрос (сам сразу проверяю)

Мне не нужно, чтобы Вы проверяли. Мне нужно, чтобы я проверял перед тем, как сюда код выложить.

Что с чем поменять местами подскажете?

Это я про то, про что Сергей sboy писал


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

BlackRaven

Дата: Вторник, 29.05.2018, 13:11 |
Сообщение № 13

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

sboy, _Boroda_, Спасибо вам огромное. У меня действительно не вкидывало в 1 страницу. После добавления «ZOOM» все стало как нужно!

Итого вот какую версию я оставил:
[vba]

Код

Sub УПВПНР()
ThisWorkbook.DisplayDrawingObjects = xlHide
    With ActiveSheet.PageSetup
        .Orientation = xlLandscape
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    End With
    Range(«A1:O23»).PrintOut
ThisWorkbook.DisplayDrawingObjects = xlAll ‘xlPlaceholders
End Sub

[/vba]

Нужно вплотную заняться изучением макросов, чтоб другим мозг не выносить))))
ЕЩЕ РАЗ СПАСИБО!!!

 

Ответить

 

Всем доброго дня!  
Подскажите, пожалуйста! Выделяю мышкой некоторую область и нужен макрос, который задаёт    
областью печати выделенную область и отправляет её на печать.  
Руками макросы писать не умею. Пробовал выделять область, а потом макрорекордером, не получается. В коде макроса записываются конкретные ячейки выделенные перед запуском макрорекордера, а надо, чтобы: выделил произвольную область — нажал кнопку — она распечаталась.  
В поиске ничего про это не нашёл.  
Заранее спасибо!

 

Макрос такой у меня получается, но как сделать, чтобы было равно не «$C$3:$H$25»,    
а выделенной области?  

  Sub Макрос1()  
   ActiveSheet.PageSetup.PrintArea = «$C$3:$H$25»  
   ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True  
End Sub

 

vlanib

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

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

 

{quote}{login=vlanib}{date=03.05.2010 10:01}{thema=}{post}Selection.PrintOut{/post}{/quote}  
Поподробнее, пожалуйста.  
В какое место макроса это надо вставить?

 

vlanib

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

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

Всё просто.  

  Sub Макрос1()  
Selection.PrintOut  
End Sub

 

{quote}{login=vlanib}{date=03.05.2010 10:06}{thema=}{post}Всё просто.  

  Sub Макрос1()  
Selection.PrintOut  
End Sub{/post}{/quote}  
Да, и правда просто! Вроде получается всё, как хотелось.  
Спасибо огромное, vlanib!!!  
И чтобы я делал без этого замечательного форума…

 

Ирина

Гость

#7

04.12.2012 01:50:39

1. На листе создала управляющую кнопку, записала макрос (выделила диапазон, нажала кнопку форма). Когда нажимаю на кнопку, запрашивает названия столбцов и не создает форму. Когда проделываю эту операцию без кнопки, все работает?  

  2. Первая кнопка подает на печать выделенный диапазон. К моему компьютеру не подключен принтер. А как изменить запись макроса, чтобы фрагмент печатался принтером по умолчанию на любом компютере, если это возможно?

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

  • post_382584.xlsm (31.16 КБ)

avenger24

1 / 1 / 0

Регистрация: 02.04.2015

Сообщений: 84

1

04.06.2015, 09:33. Показов 1535. Ответов 13

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Есть 3 диапазона ,
первый диапозон можно использовать как верхний колонтитул.
2 центральная таблица с расчётами
3 маленькая таблица итого.

Все идеально помещается на 1 страницу. Но хочу выполнять этот макрос программно (
Пишу

(для начало пробовал с 2 диапозонами)

Visual Basic
1
2
3
4
Sub
Application.Union(Range("A4:D15"), Range("G21:I23")).Select
Selection.PrintOut Preview:=True
End Sub

Но каждый диапозон печатается на отдельной странице(



0



15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

04.06.2015, 09:48

2

avenger24, а почему нужно печатать отдельные диапазоны, а не весь лист? На листе есть еще данные, которые не надо печатать?
Если можно выделить один прямоугольный диапазон для печати, выделите его, или установите границы области печати в режиме «Страничный».
Если ненужные данные находятся между нужными диапазонами, можно либо временно сделать их невидимыми (белый шрифт, нет границ), либо скопировать нужные данные на новый лист, распечатать его и удалить.



0



1 / 1 / 0

Регистрация: 02.04.2015

Сообщений: 84

04.06.2015, 09:55

 [ТС]

3

Казанский,
На 1 листе находятся 3 таблицы которые идут по вертикале по порядку.
эти таблицы это 2 диапазон.
а 1 и 3 диапозон для таблиц одинаковый.

Ясное дело , можно делать все руками) как впринципе я сейчас делаю , но я работаю над приложением для полной оптимизации , чтобы мои коллеги тоже могли быстро выполнять мою работу)

Я рассматривал вариант над скрытием не нужного текста , но думаю что печатный лист будем иметь неадекватную форму)



0



Модератор

Эксперт MS Access

11342 / 4661 / 748

Регистрация: 07.08.2010

Сообщений: 13,508

Записей в блоге: 4

04.06.2015, 10:05

4

у меня мелькнула идея —через снимок
но что то не получилось
==========
сама я делаю подобное , формируя НТМ
—согласовано/утверждаю
—основная часть
………..
……….
—подписи

любое количество диапазонов и печатаю вордом, там слить листы просто



0



1 / 1 / 0

Регистрация: 02.04.2015

Сообщений: 84

04.06.2015, 10:06

 [ТС]

5

shanemac51, я вот что-то уже час шарюсь в интернете и ничего подходящего(((

Думаю , может через Word? но это 1 лишнее действие



0



Модератор

Эксперт MS Access

11342 / 4661 / 748

Регистрация: 07.08.2010

Сообщений: 13,508

Записей в блоге: 4

04.06.2015, 10:32

6

нажать на кнопку не велика работа

если в диапазоне только обычный текст —не заморачиваюсь, пишу программно, не обращая внимания на форматирование исходника(екселя) —ведь основная цель —

автоподгонка таблицы(таблиц) по ширине листа и шапка текущей таблицы на каждом листе, если таблица не влезает на лист



0



1 / 1 / 0

Регистрация: 02.04.2015

Сообщений: 84

04.06.2015, 10:47

 [ТС]

7

shanemac51,

я подскажите как отправить из экселя в ворд не тольлько текст , но и форматы ячейки?

может быть у вас какие-нибудь маленькие примерчики есть?)))) спасибо!



0



Модератор

Эксперт MS Access

11342 / 4661 / 748

Регистрация: 07.08.2010

Сообщений: 13,508

Записей в блоге: 4

04.06.2015, 11:00

8

можно диапазон(ы) сохранить в файл в формате НТМ
а в ворде их слить не проблема

Добавлено через 2 минуты
единственное ограничение —документы Консультант+
там очень много узких столбиков —могут быть проблемы(в ворде только 63 столбика)



0



1 / 1 / 0

Регистрация: 02.04.2015

Сообщений: 84

04.06.2015, 11:35

 [ТС]

9

shanemac51, хотелось бы конечно , без лишнихт телодвижений ( потому что процедура такая будет выполняться постоянно . а не 1 раз в неделю(



0



Модератор

Эксперт MS Access

11342 / 4661 / 748

Регистрация: 07.08.2010

Сообщений: 13,508

Записей в блоге: 4

04.06.2015, 11:41

10

хоть 100 раз в день
можно ведь сделать настаиваемой на любое количество диапазонов



0



Модератор

Эксперт MS Access

11342 / 4661 / 748

Регистрация: 07.08.2010

Сообщений: 13,508

Записей в блоге: 4

04.06.2015, 11:51

11

поместите все в C:TEMP, распакуйте
—открыть ex.xlsm
—макрос а_150604
—затем открыть еx.doc
—выделить все +f9

можно вставить открытие ворда в макрос
а поместив макрос в personal.xls можно будет с макросом работать из любого файла



1



1 / 1 / 0

Регистрация: 02.04.2015

Сообщений: 84

05.06.2015, 06:27

 [ТС]

12

shanemac51,
Спасибо большое.
Конечно , если бы я только один пользовался файлом. То вариант в полне бы подошел)
А так мне показалось очень трудно и мутарно для простого смертного))
Спасибо вам все равно большое))

Сейчас попробую , создавать Word документ через копи паст автоматизировано , при этом обрамление тоже передаётся



0



Модератор

Эксперт MS Access

11342 / 4661 / 748

Регистрация: 07.08.2010

Сообщений: 13,508

Записей в блоге: 4

05.06.2015, 07:22

13

вы зря боитесь за других —если поймете вы, поймут и другие(вызвать макрос в ексель,выделить и нажать f9 в ворде—невелика сложность)



0



1 / 1 / 0

Регистрация: 02.04.2015

Сообщений: 84

05.06.2015, 07:31

 [ТС]

14

shanemac51,
Ну если вариантов не будет. То , конечно , воспользуюсь таким )

да и вообще не получается пока нормально копи пастить таблицы из эксель в ворд(

При 2 копи пасте , 2 таблица удаляет первую))



0



Параметры печатной страницы в 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


Понравилась статья? Поделить с друзьями:
  • Макрос печати выделенной области в excel
  • Макрос проверки данных excel
  • Макрос переноса листов в другую книгу excel
  • Макрос при создании документа word
  • Макрос переноса всех данных с одного файла в другой excel