Здравствуйте! Надо задать область печати по последней заполненной ячейке. Приведенный ниже макрос корректно определяет последнюю строку и столбец. Ячейка в строке, по которой определяется последний столбец имеет длинный текст, который выходит за границу ячейки/столбца и не смотря на правильно определенный и заданный номер последнего столбца область печати задается не по указанному столбцу, а по краю длинного текста. Что с этим делать, подскажите?
Код
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
Добрый всем вечер. Подскажите, пожалуйста, как изменить данный макрос, чтобы область печати задавать по последней не пустой строке (или ячейке) только определенного диапазона столбцов, например А:Н. Использую режим разметки страницы, необходимо выводить на печать только первую страницу и те, которые расположены под ней (при их заполнении), без страниц, расположенных справа от первой. Заранее всем большое спасибо!
Sub PrintArea()
LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(LastRow, 8)).Address
End Sub
Что-то не могу понять - область печати в обоих случаях - диапазон А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
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
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
Здравствуйте! Пожалуйста, помогите решить проблему: Вышеуказанные примеры работают, НО надо определить последнюю строку/столбец на листе БЕЗ учета форматов и формул - только по отображаемому значению в ячейке, то есть: есть на листе большая таблица и последние строки заполнены формулами, возвращающими пустую ячейку(=""), Ваши предыдущие варианты вернут строку/столбец ячейки с последней формулой, в то время как нужно вернуть адрес ячейки только в случае, если в ячейке реально отображается какое-то значение. Ну а по этим значениям уже задать область печати. Спасибо за ответ!
Почему не в тему? У меня похожая задача. Смотрите вложение По вышеприведенному коду
Сделал через 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 строк и т.д.), которую и надо распечатать
marchela написал: а по этим значениям уже задать область печати
Т.е. Ваш вопрос лишь косвенно связан с этой темой - задание области печати. Так что Sanja прав: поиск последней заполненной ячейки - вопрос не для этой темы.
Получится задать разные области печати на нескольких листах книги, чтобы область печати менялась в зависимости от значения одной ячейки в другом листе?
Если Главный!R6="a" → область печати одна, при всех других значениях Главный!R6 → область печати другая.
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
Если Главный!R6="a" → область печати на других (но не на всех) листах A1:G256, при всех других значениях Главный!R6 → область печати на других (но не на всех) листах A1:M256.
Antag написал: Если Главный!R6="a" → область печати на других (но не на всех) листах A1:G256
вы этого не указали в своём стартовом посте #23 Думаю что при таких раскладах вам не составит большого труда подстроить под ваши нужды выше мной выложеный код. Необходимо изначально чётко ставить задачи, тут экстрасенсорными способностями никто не обладает. Удачи вам.