Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
VBA. Задание области печати переменными
 
Здравствуйте!
Надо задать область печати по последней заполненной ячейке. Приведенный ниже макрос корректно определяет последнюю строку и столбец. Ячейка в строке, по которой определяется последний столбец имеет длинный текст, который выходит за границу ячейки/столбца и не смотря на правильно определенный и заданный номер последнего столбца область печати задается не по указанному столбцу, а по краю длинного текста.
Что с этим делать, подскажите?
Код
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
Изменено: jfd - 29 Янв 2013 18:11:55
 
Не хватило самой малости
Код
ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(LastRow, LastClm)).Address
 
Спасибо, все заработало как надо.
Но почему не работало если подставлялись правильные значения строк и столбцов диапазона?
 
Потому что свойство PrintArea принимает в качестве аргумента текст(т.е. адрес диапазона), а не сам диапазон как объект.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Добрый всем вечер.
Подскажите, пожалуйста, как изменить данный макрос, чтобы область печати задавать по последней не пустой строке (или ячейке) только определенного диапазона столбцов, например А:Н.
Использую режим разметки страницы, необходимо выводить на печать только первую страницу и те, которые расположены под ней (при их заполнении), без страниц, расположенных справа от первой.
Заранее всем большое спасибо!
 
Код
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
 
Выдает ошибку - переменная не определена(
 
Dim LastRow As Long
 
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 до Нх, где х - номер строки, содержащей последнюю непустую ячейку в столбах А-Н.
Файл прилагаю
 
Не думал, что у Вас первый столбец пустой, по-этому всегда лучше сразу кидать пример

Код
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
 
Спасибо, Сергей, то что нужно.
 
Кажется самый простой вариант
Код
Sub PrintArea11()
PageSetup.PrintArea = Range(Cells(1, 1), Cells(Cells.SpecialCells(xlLastCell).Row, 8)).Address
End Sub
 
А нельзя ли совсем обнаглеть и сделать так, чтобы область печати автоматически задавалась по последней строке определенного заданного диапазона (напр. А:Н). Т.е. вставляю данные, задействован диапазон А1:Н50, область печати - такая же, добавляю еще 40 строк, область печати автоматически увеличивается на эти 40 строк, удаляю 30 строк, и область на это же количество уменьшается...
Может это как-то через Worksheet_Change можно сделать?
 
Сделал через 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 макрос начинает реагировать на ввод данных в столбцы, выходящие за определенный мной диапазон А:Н, что не есть гуд.
 
Воспользуйтесь событием 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_A - 13 Мар 2013 00:44:00
Страницы: 1
Читают тему (гостей: 1)