Доброго времени суток! Уважаемые "ГУРУ" Excel и VBA, подскажите пожалуйста как написать макрос печати выделенной области по заполненной ячейке. Пример: Если ячейка А1 имеет какое либо значение то выводить на печать область A1-F10, а если ячейка не имеет не каково значения то соответственно не делать ни каких действий. Если есть где то похожая тема то подскажите пожалуйста, сам не нашел, заранее спасибо!
Доброго времени суток! Уважаемые "ГУРУ" Excel и VBA, подскажите пожалуйста как написать макрос печати выделенной области по заполненной ячейке. Пример: Если ячейка А1 имеет какое либо значение то выводить на печать область A1-F10, а если ячейка не имеет не каково значения то соответственно не делать ни каких действий. Если есть где то похожая тема то подскажите пожалуйста, сам не нашел, заранее спасибо!Alex{86}
На сколько я понял то нужно повесить проверку заполнения ячейки на событие before print. Чтобы менялся просто диапазон печатм при условии заполненности ячейки. С телефона не напишу точно но что то вроде [vba]
Код
If not Cells (1, 1) ="" then activesheet.pagesetup.printarea = "a1:h10"
[/vba] Если что то завтра на работе допишу
На сколько я понял то нужно повесить проверку заполнения ячейки на событие before print. Чтобы менялся просто диапазон печатм при условии заполненности ячейки. С телефона не напишу точно но что то вроде [vba]
Код
If not Cells (1, 1) ="" then activesheet.pagesetup.printarea = "a1:h10"
[/vba] Если что то завтра на работе допишу SLAVICK
Иногда все проще чем кажется с первого взгляда.
Сообщение отредактировал SLAVICK - Вторник, 14.07.2015, 20:22
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-му столбцу. Выделенный блок можете просто вставить в свой исходный код, чтобы после его завершения происходило переопределение диапазона печати.
Вот: [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-му столбцу. Выделенный блок можете просто вставить в свой исходный код, чтобы после его завершения происходило переопределение диапазона печати.SLAVICK
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]
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