Vba excel печать диапазона ячеек

 

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

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

Сообщений: 14182
Регистрация: 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

 

Юрий М

Модератор

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

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

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

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 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 КБ)

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

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim R$, RN$, N&
If ActiveSheet.Name = «Лист1» Then
‘ Блок для переопределения диапазона печати — его можно вставить в свой макрос
R = ActiveSheet.PageSetup.PrintArea ‘ эта переменная нужна только если нужно будет возвращать текущий диапазон для печати ==============
N = Cells(Rows.Count, 2).End(xlUp).Row ‘ ==============
RN = Range(«A1:F» & N).Address ‘ ==============
ActiveSheet.PageSetup.PrintArea = RN ‘ ==============
‘==============================================================================

‘Блок печати и возвращения начального диапазона для печати
Application.EnableEvents = False
Range(RN).PrintOut
ActiveSheet.PageSetup.PrintArea = R
Application.EnableEvents = True
Cancel = True
‘==============================================================================
End If
End Sub

Макрос будет запускаться перед печатью и переопределять диапазон по заполненному 2-му столбцу.
Выделенный блок можете просто вставить в свой исходный код, чтобы после его завершения происходило переопределение диапазона печати.

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim R$, RN$, N&
If ActiveSheet.Name = «Лист1» Then
‘ Блок для переопределения диапазона печати — его можно вставить в свой макрос
R = ActiveSheet.PageSetup.PrintArea ‘ эта переменная нужна только если нужно будет возвращать текущий диапазон для печати ==============
N = Cells(Rows.Count, 2).End(xlUp).Row ‘ ==============
RN = Range(«A1:F» & N).Address ‘ ==============
ActiveSheet.PageSetup.PrintArea = RN ‘ ==============
‘==============================================================================

‘Блок печати и возвращения начального диапазона для печати
Application.EnableEvents = False
Range(RN).PrintOut
ActiveSheet.PageSetup.PrintArea = R
Application.EnableEvents = True
Cancel = True
‘==============================================================================
End If
End Sub

Макрос будет запускаться перед печатью и переопределять диапазон по заполненному 2-му столбцу.
Выделенный блок можете просто вставить в свой исходный код, чтобы после его завершения происходило переопределение диапазона печати. SLAVICK

Иногда все проще чем кажется с первого взгляда.

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim R$, RN$, N&
If ActiveSheet.Name = «Лист1» Then
‘ Блок для переопределения диапазона печати — его можно вставить в свой макрос
R = ActiveSheet.PageSetup.PrintArea ‘ эта переменная нужна только если нужно будет возвращать текущий диапазон для печати ==============
N = Cells(Rows.Count, 2).End(xlUp).Row ‘ ==============
RN = Range(«A1:F» & N).Address ‘ ==============
ActiveSheet.PageSetup.PrintArea = RN ‘ ==============
‘==============================================================================

‘Блок печати и возвращения начального диапазона для печати
Application.EnableEvents = False
Range(RN).PrintOut
ActiveSheet.PageSetup.PrintArea = R
Application.EnableEvents = True
Cancel = True
‘==============================================================================
End If
End Sub

Макрос будет запускаться перед печатью и переопределять диапазон по заполненному 2-му столбцу.
Выделенный блок можете просто вставить в свой исходный код, чтобы после его завершения происходило переопределение диапазона печати. Автор — SLAVICK
Дата добавления — 15.07.2015 в 09:35

Источник

Метод Sheets.PrintOut (Excel)

Синтаксис

expression. PrintOut (From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName, IgnorePrintAreas)

выражение: переменная, представляющая объект Sheets.

Параметры

Имя Обязательный или необязательный Тип данных Описание
From Необязательный Variant Номер страницы, с которой начинается печать. Если этот аргумент опущен, печать начинается в начале.
Для Необязательный Variant Номер последней страницы для печати. Если этот аргумент опущен, печать заканчивается последней страницей.
Copies Необязательный Variant Число копий для печати. Если этот аргумент опущен, выводится одна копия.
Предварительный просмотр Необязательный Variant Значение true , чтобы Microsoft Excel вызвал предварительный просмотр перед печатью объекта. Значение false (или опущено) для немедленной печати объекта.
ActivePrinter Необязательный Variant Задает имя активного принтера.
PrintToFile Необязательный Variant Значение true для печати в файл. Если Параметр PrToFileName не указан, Excel предложит пользователю ввести имя выходного файла.
Collate Необязательный Variant Значение true для сортировки нескольких копий.
PrToFileName Необязательный Variant Если параметр PrintToFile имеет значение True, этот аргумент указывает имя файла, в который нужно напечатать.
IgnorePrintAreas Необязательный Variant Значение true для пропуска областей печати и печати всего объекта.

Возвращаемое значение

Примечания

«Страницы» в описаниях from и To относится к печатным страницам, а не к общим страницам на листе или книге.

Пример

В этом примере выводится активный лист.

В этом примере выполняется печать со страницы 2 на страницу 3.

В этом примере выводится три копии со страницы 2 на страницу 3.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

VBA Excel. Объект PageSetup (параметры страницы)

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

Описание объекта PageSetup

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

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

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

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

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

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

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

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

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

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

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

Источник

Vba excel печать диапазона ячеек

В общем надо сделать что-то в виде макроса.
Вывести сообщение: «Введите номер партии» — Вводят например цифру 1.
Еще 1 сообщение: «введите количество кип в партии» — Вводят например цифру 10.

И надо, чтоб выходило на печать 10 бумажек, в которых будет порставлено на каждой номер партии (в моем случае цифра 1 ) и по порядку кол-во кип (в моем случае 1-10)
Т.е. 1) Номер партии 1
кипа 1
2) Номер партии 1
кипа 2
3) Номер партии 1
кипа 3

В общем надо сделать что-то в виде макроса.
Вывести сообщение: «Введите номер партии» — Вводят например цифру 1.
Еще 1 сообщение: «введите количество кип в партии» — Вводят например цифру 10.

И надо, чтоб выходило на печать 10 бумажек, в которых будет порставлено на каждой номер партии (в моем случае цифра 1 ) и по порядку кол-во кип (в моем случае 1-10)
Т.е. 1) Номер партии 1
кипа 1
2) Номер партии 1
кипа 2
3) Номер партии 1
кипа 3

Сообщение В общем надо сделать что-то в виде макроса.
Вывести сообщение: «Введите номер партии» — Вводят например цифру 1.
Еще 1 сообщение: «введите количество кип в партии» — Вводят например цифру 10.

И надо, чтоб выходило на печать 10 бумажек, в которых будет порставлено на каждой номер партии (в моем случае цифра 1 ) и по порядку кол-во кип (в моем случае 1-10)
Т.е. 1) Номер партии 1
кипа 1
2) Номер партии 1
кипа 2
3) Номер партии 1
кипа 3

Заранее спасибо Автор — Silver
Дата добавления — 11.11.2013 в 06:28

KuklP Дата: Понедельник, 11.11.2013, 09:15 | Сообщение № 2
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Ответить

Silver Дата: Понедельник, 11.11.2013, 09:46 | Сообщение № 3
Скрипт Дата: Понедельник, 11.11.2013, 09:53 | Сообщение № 4

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub Procedure_1()

Dim myPartyNumber As String
‘Делаем у переменной «myKipCount» тип данных «Variant», т.к. в ней
‘в коде могут быть числа и текст.
Dim myKipCount As Variant
Dim i As Long

‘Пользователь выбирает номер партии.
‘Данные помещаются в переменную «myPartyNumber».
myPartyNumber = InputBox(«Введите номер партии:»)

‘Проверка, что пользователь что-то ввёл и не нажал «Отмена».
If myPartyNumber = «» Then
‘Выход из процедуры.
Exit Sub
End If

‘Пользователь выбирает количество кип.
myKipCount = InputBox(«Введите количество кип:»)

‘Проверка, что пользователь ввёл число, иначе в коде
‘будет ошибка при выполнении математических действий.
If IsNumeric(myKipCount) = False Then
MsgBox «Введено не число.», vbExclamation
Exit Sub
End If

‘Делаем в переменной «myKipCount» числовой тип данных,
‘хотя в этом нет необходимости, но чтобы было.
myKipCount = CLng(myKipCount)

‘Помещаем в активный лист, в ячейку «B1» номер партии.
‘Макрос будет распечатывать активный лист.
ActiveSheet.Range(«B1»).Value = myPartyNumber

‘Печать активного листа.

‘For . To . Step . Next — это цикл. Цикл используется,
‘чтобы делать одну и ту же команду несколько раз.
For i = 1 To myKipCount Step 1
‘В активный лист, в ячейку «B2» подставляем данные.
ActiveSheet.Range(«B2»).Value = i
ActiveSheet.PrintOut
Next i

Чтобы не расходовать бумагу и расходные материалы принтера, можно тестировать макрос на виртуальном принтере.
Виртуальный принтер — это программа, которая переводит Excel-лист в pdf-формат или другой формат.
Есть бесплатные виртуальные принтеры, например, doPDF v7.
После установки виртуального принтера, виртуальный принтер появится здесь (Excel 2010):
«Файл» — «Печать» — список «Принтер».

Чтобы мой макрос печатал на виртуальный принтер, есть 2 варианта:
1) сделайте (Excel 2010): «Файл» — «Печать» — в списке «Принтер» выберите виртуальный принтер — вкладка «Главная» — запустите макрос;
2) или сделайте следующее (Windows 7): «Пуск» — «Панель управления» — «Оборудование и звук» — «Устройства и принтеры» — щёлкните по виртуальному принтеру правой кнопкой мыши — «Использовать по умолчанию» — закройте и запустите программу «Excel» — запустите макрос.

Или можно в макросе указать принтер, на который надо печатать (в моём макросе нет такой команды).

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub Procedure_1()

Dim myPartyNumber As String
‘Делаем у переменной «myKipCount» тип данных «Variant», т.к. в ней
‘в коде могут быть числа и текст.
Dim myKipCount As Variant
Dim i As Long

‘Пользователь выбирает номер партии.
‘Данные помещаются в переменную «myPartyNumber».
myPartyNumber = InputBox(«Введите номер партии:»)

‘Проверка, что пользователь что-то ввёл и не нажал «Отмена».
If myPartyNumber = «» Then
‘Выход из процедуры.
Exit Sub
End If

‘Пользователь выбирает количество кип.
myKipCount = InputBox(«Введите количество кип:»)

‘Проверка, что пользователь ввёл число, иначе в коде
‘будет ошибка при выполнении математических действий.
If IsNumeric(myKipCount) = False Then
MsgBox «Введено не число.», vbExclamation
Exit Sub
End If

‘Делаем в переменной «myKipCount» числовой тип данных,
‘хотя в этом нет необходимости, но чтобы было.
myKipCount = CLng(myKipCount)

‘Помещаем в активный лист, в ячейку «B1» номер партии.
‘Макрос будет распечатывать активный лист.
ActiveSheet.Range(«B1»).Value = myPartyNumber

‘Печать активного листа.

‘For . To . Step . Next — это цикл. Цикл используется,
‘чтобы делать одну и ту же команду несколько раз.
For i = 1 To myKipCount Step 1
‘В активный лист, в ячейку «B2» подставляем данные.
ActiveSheet.Range(«B2»).Value = i
ActiveSheet.PrintOut
Next i

Чтобы не расходовать бумагу и расходные материалы принтера, можно тестировать макрос на виртуальном принтере.
Виртуальный принтер — это программа, которая переводит Excel-лист в pdf-формат или другой формат.
Есть бесплатные виртуальные принтеры, например, doPDF v7.
После установки виртуального принтера, виртуальный принтер появится здесь (Excel 2010):
«Файл» — «Печать» — список «Принтер».

Чтобы мой макрос печатал на виртуальный принтер, есть 2 варианта:
1) сделайте (Excel 2010): «Файл» — «Печать» — в списке «Принтер» выберите виртуальный принтер — вкладка «Главная» — запустите макрос;
2) или сделайте следующее (Windows 7): «Пуск» — «Панель управления» — «Оборудование и звук» — «Устройства и принтеры» — щёлкните по виртуальному принтеру правой кнопкой мыши — «Использовать по умолчанию» — закройте и запустите программу «Excel» — запустите макрос.

Или можно в макросе указать принтер, на который надо печатать (в моём макросе нет такой команды).

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub Procedure_1()

Dim myPartyNumber As String
‘Делаем у переменной «myKipCount» тип данных «Variant», т.к. в ней
‘в коде могут быть числа и текст.
Dim myKipCount As Variant
Dim i As Long

‘Пользователь выбирает номер партии.
‘Данные помещаются в переменную «myPartyNumber».
myPartyNumber = InputBox(«Введите номер партии:»)

‘Проверка, что пользователь что-то ввёл и не нажал «Отмена».
If myPartyNumber = «» Then
‘Выход из процедуры.
Exit Sub
End If

‘Пользователь выбирает количество кип.
myKipCount = InputBox(«Введите количество кип:»)

‘Проверка, что пользователь ввёл число, иначе в коде
‘будет ошибка при выполнении математических действий.
If IsNumeric(myKipCount) = False Then
MsgBox «Введено не число.», vbExclamation
Exit Sub
End If

‘Делаем в переменной «myKipCount» числовой тип данных,
‘хотя в этом нет необходимости, но чтобы было.
myKipCount = CLng(myKipCount)

‘Помещаем в активный лист, в ячейку «B1» номер партии.
‘Макрос будет распечатывать активный лист.
ActiveSheet.Range(«B1»).Value = myPartyNumber

‘Печать активного листа.

‘For . To . Step . Next — это цикл. Цикл используется,
‘чтобы делать одну и ту же команду несколько раз.
For i = 1 To myKipCount Step 1
‘В активный лист, в ячейку «B2» подставляем данные.
ActiveSheet.Range(«B2»).Value = i
ActiveSheet.PrintOut
Next i

Чтобы не расходовать бумагу и расходные материалы принтера, можно тестировать макрос на виртуальном принтере.
Виртуальный принтер — это программа, которая переводит Excel-лист в pdf-формат или другой формат.
Есть бесплатные виртуальные принтеры, например, doPDF v7.
После установки виртуального принтера, виртуальный принтер появится здесь (Excel 2010):
«Файл» — «Печать» — список «Принтер».

Чтобы мой макрос печатал на виртуальный принтер, есть 2 варианта:
1) сделайте (Excel 2010): «Файл» — «Печать» — в списке «Принтер» выберите виртуальный принтер — вкладка «Главная» — запустите макрос;
2) или сделайте следующее (Windows 7): «Пуск» — «Панель управления» — «Оборудование и звук» — «Устройства и принтеры» — щёлкните по виртуальному принтеру правой кнопкой мыши — «Использовать по умолчанию» — закройте и запустите программу «Excel» — запустите макрос.

Или можно в макросе указать принтер, на который надо печатать (в моём макросе нет такой команды).

Источник

Читайте также:  Excel присвоить ячейке имя пользователя

Adblock
detector

Макрос печати выделенной области по заполненной ячейке.

Alex{86}

Дата: Вторник, 14.07.2015, 09:50 |
Сообщение № 1

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

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

Сообщений: 4


Репутация:

0

±

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


Excel 2013

Доброго времени суток!
Уважаемые «ГУРУ» Excel и VBA, подскажите пожалуйста как написать макрос печати выделенной области по заполненной ячейке.
Пример: Если ячейка А1 имеет какое либо значение то выводить на печать область A1-F10, а если ячейка не имеет не каково значения то соответственно не делать ни каких действий.
Если есть где то похожая тема то подскажите пожалуйста, сам не нашел, заранее спасибо!

 

Ответить

_Boroda_

Дата: Вторник, 14.07.2015, 10:03 |
Сообщение № 2

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

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

Сообщений: 16618


Репутация:

6465

±

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


2003; 2007; 2010; 2013 RUS

Так нужно?
[vba]

Код

Private Sub Worksheet_Change(ByVal Target As Range)
      If Not Intersect(Target, [A1]) Is Nothing And [A1] <> «» Then Range(«A1:F10»).PrintOut
End Sub

[/vba]
Но только уверены Вы, что Вам нужно печатать при ЛЮБОМ изменении ячейки А1 (кроме случая, когда она пуста)?


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

 

Ответить

Alex{86}

Дата: Вторник, 14.07.2015, 18:34 |
Сообщение № 3

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

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

Сообщений: 4


Репутация:

0

±

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


Excel 2013

Спасибо за ответ _Boroda_
Но что то у меня нечего не выходит перекрепляю фаил с макросом для наглядности.
Задача макроса описана в файле.

К сообщению приложен файл:

___-2-.xlsm
(57.4 Kb)

 

Ответить

SLAVICK

Дата: Вторник, 14.07.2015, 19:53 |
Сообщение № 4

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

Ранг: Старожил

Сообщений: 2290


Репутация:

766

±

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


2019

На сколько я понял то нужно повесить проверку заполнения ячейки на событие before print. Чтобы менялся просто диапазон печатм при условии заполненности ячейки.
С телефона не напишу точно но что то вроде
[vba]

Код

If not Cells (1, 1)  =»» then activesheet.pagesetup.printarea = «a1:h10»

[/vba]
Если что то завтра на работе допишу :D


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICKВторник, 14.07.2015, 20:22

 

Ответить

Alex{86}

Дата: Среда, 15.07.2015, 08:59 |
Сообщение № 5

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

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

Сообщений: 4


Репутация:

0

±

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


Excel 2013

SLAVICK буду признателен! :D

 

Ответить

SLAVICK

Дата: Среда, 15.07.2015, 09:35 |
Сообщение № 6

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

Ранг: Старожил

Сообщений: 2290


Репутация:

766

±

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


2019

Вот: :D
[vba]

Код

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim R$, RN$, N&
If ActiveSheet.Name = «Лист1» Then
‘ Блок для переопределения диапазона печати — его можно вставить в свой макрос
       R = ActiveSheet.PageSetup.PrintArea ‘ эта переменная нужна только если нужно будет возвращать текущий диапазон для печати                    ==============
       N = Cells(Rows.Count, 2).End(xlUp).Row ‘                     ==============
       RN = Range(«A1:F» & N).Address ‘                             ==============
       ActiveSheet.PageSetup.PrintArea = RN ‘                       ==============
‘==============================================================================

‘Блок печати и возвращения начального диапазона для печати
     Application.EnableEvents = False
     Range(RN).PrintOut
     ActiveSheet.PageSetup.PrintArea = R
     Application.EnableEvents = True
     Cancel = True
‘==============================================================================
End If
End Sub

[/vba]

Макрос будет запускаться перед печатью и переопределять диапазон по заполненному 2-му столбцу.
Выделенный блок можете просто вставить в свой исходный код, чтобы после его завершения происходило переопределение диапазона печати.

К сообщению приложен файл:

-2-.xlsm
(61.3 Kb)


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICKСреда, 15.07.2015, 09:45

 

Ответить

_Boroda_

Дата: Среда, 15.07.2015, 09:51 |
Сообщение № 7

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

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

Сообщений: 16618


Репутация:

6465

±

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


2003; 2007; 2010; 2013 RUS

Alex{86}, так Вам нужно, чтобы печатался только диапазон А1:Fn, где n — количество заполненных строк в столбце А?
Тогда макрос для этого не нужен. Смотрите именованные диапазоны (Контрл F3) в приложенном файле. Там имя Область_печати с формулой

Код

=СМЕЩ(Лист1!$A$1;;;СЧЁТЗ(Лист1!$A:$A);6)

А макрос2 у Вас можно переписать так
[vba]

Код

Sub Макрос2()
Range(«A2:A100») = Range(«M2:M100»).Value
Range(«C2:C100») = Range(«O2:O100»).Value
Range(«E2:E100») = Range(«Q2:Q100»).Value
ActiveWindow.SelectedSheets.PrintOut
End Sub

[/vba]


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

 

Ответить

Alex{86}

Дата: Среда, 15.07.2015, 19:10 |
Сообщение № 8

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

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

Сообщений: 4


Репутация:

0

±

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


Excel 2013

Спасибо огромное _Boroda_ и SLAVICK за решения моей проблемки.
specool clap

 

Ответить

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

Цитата
Сообщение от Ципихович Эндрю
Посмотреть сообщение

Впервые об этом слышу-можно по подробней??

например, бывают ситуации, что ты задаёшь на печать и что-то не получается. Или допустим ситуация: вы пишете код, связанный с распечаткой, и код надо протестировать.
Чтобы не расходовать бумагу и др. расходные материалы, можно задавать печать на виртуальный принтер и смотреть результат. Когда вас результат устроит, можете уже задавать на реальный принтер.
Есть бесплатные виртуальные принтера, мне известен один — doPDF7.
Скачайте его, установите его у себя на компьютере. Теперь если вы откроете документ и откроете диалоговое окно «Печать», то в списке принтеров появится принтер doPDF7 — выберите его и нажмите ОК. Документ будет переведён в формат PDF.
Естественно, что реальная распечатка может отличаться от того, что у нас сделал виртуальный принтер.

Ещё есть один нюанс, PDF-файлы, сделанные с помощью doPDF7, не воспринимаются Adobe Acrobat. Например, если вы захотите перевести PDF-файл, сделанный в doPDF7, с помощью Adobe Acrobat обратно в Word, то появится сообщение, что для Adbobe Acrobat данный файл является непригодным.

Понравилась статья? Поделить с друзьями:
  • Vba excel переходит на лист
  • Vba excel переход на следующую строку
  • Vba excel переход на новую строку
  • Vba excel переход на другую строку
  • Vba excel перехват нажатия клавиш