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

 

Всем доброго дня!  
Подскажите, пожалуйста! Выделяю мышкой некоторую область и нужен макрос, который задаёт    
областью печати выделенную область и отправляет её на печать.  
Руками макросы писать не умею. Пробовал выделять область, а потом макрорекордером, не получается. В коде макроса записываются конкретные ячейки выделенные перед запуском макрорекордера, а надо, чтобы: выделил произвольную область — нажал кнопку — она распечаталась.  
В поиске ничего про это не нашёл.  
Заранее спасибо!

 

Макрос такой у меня получается, но как сделать, чтобы было равно не «$C$3:$H$25»,    
а выделенной области?  

  Sub Макрос1()  
   ActiveSheet.PageSetup.PrintArea = «$C$3:$H$25»  
   ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True  
End Sub

 

vlanib

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

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

 

{quote}{login=vlanib}{date=03.05.2010 10:01}{thema=}{post}Selection.PrintOut{/post}{/quote}  
Поподробнее, пожалуйста.  
В какое место макроса это надо вставить?

 

vlanib

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

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

Всё просто.  

  Sub Макрос1()  
Selection.PrintOut  
End Sub

 

{quote}{login=vlanib}{date=03.05.2010 10:06}{thema=}{post}Всё просто.  

  Sub Макрос1()  
Selection.PrintOut  
End Sub{/post}{/quote}  
Да, и правда просто! Вроде получается всё, как хотелось.  
Спасибо огромное, vlanib!!!  
И чтобы я делал без этого замечательного форума…

 

Ирина

Гость

#7

04.12.2012 01:50:39

1. На листе создала управляющую кнопку, записала макрос (выделила диапазон, нажала кнопку форма). Когда нажимаю на кнопку, запрашивает названия столбцов и не создает форму. Когда проделываю эту операцию без кнопки, все работает?  

  2. Первая кнопка подает на печать выделенный диапазон. К моему компьютеру не подключен принтер. А как изменить запись макроса, чтобы фрагмент печатался принтером по умолчанию на любом компютере, если это возможно?

Прикрепленные файлы

  • post_382584.xlsm (31.16 КБ)

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

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

SysUnit, спасибо, но к сожалению не подойдет. Мне нужно универсальное решение. Ваш вариант подойдет только как частный случай: крайний левый столбец можно определить по 4 строке, нижнюю строку — по 1 столбцу. Мне нужно

универсальное

решение, которое сработает на

любом листе

с любым раскладом данных и форматов ячеек (заранее неизвестном программисту), такое же надёжное, как UsedRange, или как .SpecialCells(xlCellTypeLastCell), но с иным вложенным в него смыслом.

toiai, ваше решение, если приглядеться и проверить всегда выдает диапазон, совпадающий с UsedRange :) Ведь .SpecialCells(xlCellTypeLastCell) является правым нижним краем диапазона .UsedRange

Сейчас подумал, можно сформулировать задачу как поиск модификации UsedRange, нечувствительной к форматированию — только на слое данных (формул, включая значения). Я раньше уже решал эту задачу итерационно, но это кажется мне нерациональным и медленным путем. Суть том, чтобы начать с .SpecialCells(xlCellTypeLastCell) брать диапазоны от .Range(.Cells(lr, 1), .Cells(lr, lc)), их свойство .Text сравнивать с «», двигаться вверх до тех пор, пока не дойдем до данных (непустых значений), как найдем последнюю строку. Тем же методом двигаемся влево проверяя столбцы. Такой метод работает, но не лишен недостатков: 1) на практике итерации могут дико тормозить процесс; 2) свойство .Text не увидит формул, возвращающих пустое значение.

Мне всегда казалось, что раз «Страничный режим» умеет показывать то, что мне надо, значит это уже реализовано в Excel наиболее эффективным образом. Другой вопрос в том, есть ли доступ через объектную модель Excel к параметрам такой области?

Добрый день!

Есть кнопка, которая запускает следующий макрос:

Sub SaveThisBook3()
Dim FolderName2 As Range
  Set FolderName2 = ThisWorkbook.Worksheets(«Лист1»).Range(«G1»)
Dim PathToSave As String, FolderName As String, FellPathToSave As String
Dim fs As Object
PathToSave = «P:2010» ‘<————— Здесь укажи путь к папке в которую нужно сохранить книгу
FolderName = FolderName2 ‘<————— Здесь задай название папки
FellPathToSave = PathToSave & FolderName & «»
Set fs = CreateObject(«Scripting.FileSystemObject»)
If Not fs.FolderExists(FellPathToSave) Then
   fs.CreateFolder (FellPathToSave)
End If
Application.ThisWorkbook.SaveAs FellPathToSave & «Приход » & Left(Now, 10) & «.xlsx»
End Sub

Этот макрос привязан к кнопке, при нажатию на которую создается в указанном каталоге новая папка, имя которой берется из ячейки и туда же, под тем же именем, сохраняется сам файл.

Мне нужно добавить в этот макрос печать — чтобы после того, как папка создалась, файл распечатался. В крайнем случае, чтобы автоматом вызывался диалог печати.

Спасибо.


В Excel есть такая замечательная штука как Запись макроса (Сервис -> Макрос -> …). Выполнив после начала записи определённые действия, например такие как печать, сохранение, добавление листов, данных в ячейки… да чего угодно, можно получить готовенький код макроса.

Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли


Спасибо!

Попробовал записать, вот что получилось:

Sub mAcros1()

‘ mAcros1 Макрос
‘ mm


    Application.Run Range()
    Application.ActivePrinter = «\192.168.1.45PRINTERCC245 (Ne02:)»
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
        «\192.168.1.45PRINTERCC245 (Ne02:)», Collate:=True
End Sub

Выдает ошибку:

Copmpile error: argument not optimal


Во-первых, свою процедуру нельзя называть Range() (это зарезервированное имя Excel), а, во-вторых, программный запуск другого макроса должен выглядеть так:

Application.Run "Книга1!My_Range"

Или что за действие там у тебя первой строкой перед печатью должно происходить?

Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли


Я тыкаю на кнопку, которая создает каталог и сохраняет туда файл, а потом вызываю диалог печати и печатаю содерждимое файла.


Предлагаю поменять последовательность с такой:

Sub Макрос1()
  'Нажатие кнопки
  'Печать
End Sub

Private Sub CommandButton1_Click()
  'Сохранение файла
End Sub

на такую:

Sub Макрос1()
  'Раньше здесь был код, записанный макрорекордером.
  'Теперь же, когда мы узнали как нужно автоматически запускать на печать,
  'код более не требуется
End Sub

Private Sub CommandButton1_Click()
  'Сохранение файла
  'Печать
End Sub

Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли


C VBA сталкиваюсь первый раз! создал кнопку прописал макрос:

Sub Кнопка2_Щелчок()
Dim FolderName2 As Range
  Set FolderName2 = ThisWorkbook.Worksheets(«НСС»).Range(«Y1»)
Dim PathToSave As String, FolderName As String, FellPathToSave As String
Dim fs As Object
PathToSave = «D:2010»
FolderName = FolderName2
FellPathToSave = PathToSave & FolderName & «»
Set fs = CreateObject(«Scripting.FileSystemObject»)
If Not fs.FolderExists(FellPathToSave) Then
   fs.CreateFolder (FellPathToSave)
End If
Application.ThisWorkbook.SaveAs FellPathToSave & «VedomostNSS_» & Left(Now, 10) & «.xlsm»
End Sub

все отлично работает, но мне необходимо чтобы к имени файла добавлялось не просто дата а еще и время. В Y1 у меня стоит функция =СЕГОДНЯ(), если меняю на =TDATA(), то выдает ошибку. В чем причина ???


Цитата: Gery от 29.07.2010, 14:29
но мне необходимо чтобы к имени файла добавлялось не просто дата а еще и время.

Чтобы вместе со временем нужно просто заменить эту строку:

Application.ThisWorkbook.SaveAs FellPathToSave & "VedomostNSS_" & Left(Now, 10) & ".xlsm"

На такую:

Application.ThisWorkbook.SaveAs FellPathToSave & "VedomostNSS_" & Now & ".xlsm"
Но лучше заменять двоеточия и точки на что-нибудь другое. Например так:

Application.ThisWorkbook.SaveAs FellPathToSave & "VedomostNSS_" & Format(Now, "DD_MM_YYYY HH_MM_SS") & ".xlsm"

P.S. Хотя и для только даты можно было написать короче:

Application.ThisWorkbook.SaveAs FellPathToSave & "VedomostNSS_" & Date & ".xlsm"

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…
www.excel-vba.ru
Просто СПАСИБО [+оказать+]
Считаешь СПАСИБО мало? Яндекс.Деньги: 41001332272872; WM: R298726502453


Спасибо, Prist! ТЫ МЕГА МОЗГ!!


Понравилась статья? Поделить с друзьями:
  • Макрос переноса листов в другую книгу excel
  • Макрос при создании документа word
  • Макрос переноса всех данных с одного файла в другой excel
  • Макрос при расчетах в excel
  • Макрос перемещения ячейки excel