Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

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

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос печати выделенной области по заполненной ячейке. (Макросы/Sub)
Макрос печати выделенной области по заполненной ячейке.
Alex{86} Дата: Вторник, 14.07.2015, 09:50 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

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

Автор - Alex{86}
Дата добавления - 14.07.2015 в 09:50
_Boroda_ Дата: Вторник, 14.07.2015, 10:03 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16491
Репутация: 6420 ±
Замечаний: 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 (кроме случая, когда она пуста)?
К сообщению приложен файл: 71896279.xlsm(16.1 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак нужно?
[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_
Дата добавления - 14.07.2015 в 10:03
Alex{86} Дата: Вторник, 14.07.2015, 18:34 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Спасибо за ответ _Boroda_
Но что то у меня нечего не выходит перекрепляю фаил с макросом для наглядности.
Задача макроса описана в файле.
К сообщению приложен файл: ___-2-.xlsm(57.4 Kb)
 
Ответить
СообщениеСпасибо за ответ _Boroda_
Но что то у меня нечего не выходит перекрепляю фаил с макросом для наглядности.
Задача макроса описана в файле.

Автор - Alex{86}
Дата добавления - 14.07.2015 в 18:34
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
 
Ответить
СообщениеНа сколько я понял то нужно повесить проверку заполнения ячейки на событие before print. Чтобы менялся просто диапазон печатм при условии заполненности ячейки.
С телефона не напишу точно но что то вроде
[vba]
Код
If not Cells (1, 1)  ="" then activesheet.pagesetup.printarea = "a1:h10"
[/vba]
Если что то завтра на работе допишу :D

Автор - SLAVICK
Дата добавления - 14.07.2015 в 19:53
Alex{86} Дата: Среда, 15.07.2015, 08:59 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
SLAVICK буду признателен! :D
 
Ответить
СообщениеSLAVICK буду признателен! :D

Автор - Alex{86}
Дата добавления - 15.07.2015 в 08:59
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
 
Ответить
СообщениеВот: :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-му столбцу.
Выделенный блок можете просто вставить в свой исходный код, чтобы после его завершения происходило переопределение диапазона печати.

Автор - SLAVICK
Дата добавления - 15.07.2015 в 09:35
_Boroda_ Дата: Среда, 15.07.2015, 09:51 | Сообщение № 7
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16491
Репутация: 6420 ±
Замечаний: 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]
К сообщению приложен файл: 4617987_1.xlsm(61.0 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение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_
Дата добавления - 15.07.2015 в 09:51
Alex{86} Дата: Среда, 15.07.2015, 19:10 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Спасибо огромное _Boroda_ и SLAVICK за решения моей проблемки.
specool clap
 
Ответить
СообщениеСпасибо огромное _Boroda_ и SLAVICK за решения моей проблемки.
specool clap

Автор - Alex{86}
Дата добавления - 15.07.2015 в 19:10
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос печати выделенной области по заполненной ячейке. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2022 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!