Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2009, 17:46   #1
OgE®_M@G
Форумчанин
 
Аватар для OgE®_M@G
 
Регистрация: 28.06.2008
Сообщений: 124
Вопрос Печать данных

Здравствуйте УВАЖАЕМЫЕ. У меня тут такая проблема. Можно ли напечатать через макрос именно те диапазоны листа на которых существуют данные (диапазоны могут меняться) с этим как раз таки и проблема не могу прописать это через макрос. Помогите пожалуйста.
OgE®_M@G вне форума Ответить с цитированием
Старый 01.03.2009, 18:22   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Да, можно.
Пример файла + подробное описание, что и как должно печататься.

Выделите цветом на листе (листах) области, которые надо выводить на печать.

PS: Через меню Вид - Представления можно вручную настроить несколько вариантов вывода листа на печать.
Для каждого из представлений через меню Файл - Область печати - Задать можно выбрать диапазон, который будет выводиться на печать.

При добавлении строк эта область печати автоматически увеличивается в размерах.
Так что можно попробовать обойтись без макросов.
EducatedFool вне форума Ответить с цитированием
Старый 01.03.2009, 18:23   #3
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Можно.
1. Нажав контрол-F, находим 1-ю клетку с любыми (*) данными.
2. Комбинацией контрол-шифт-End выделяем всю область с данными.
3. Контрол-P (пи) - вызываем диалог печати.

Очевидно, что эти действия можно записать в макрос, а затем подредактировать.

Код:
Sub iCanPrintOnlyFlesh()

'Выделяет область листа книги *.xls,'
'содержащую все данные этого листа от первой непустой СТРОКИ.'
'По желанию печатает.'

Cells(1, 1).Activate

If IsEmpty(ActiveCell) Then
    Cells.Find(What:="*", SearchOrder:=xlByRows).Activate
End If
'теперь мы стоим на первой (по строкам таблицы Excel) непустой клетке'

Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
'Прямоугольник с данными выделен. Далее - предлагаем напечатать.'

If MsgBox("Напечатать?", vbQuestion + vbMsgBoxRight + vbYesNo) = vbYes Then
    On Error GoTo MESSA
    Selection.PrintOut:  Exit Sub 'предлагает напечатать выделенное'
MESSA:
    MsgBox "Зайдите после обеда." 'это если нажать кнопку "Отмена"'
End If

End Sub
Кстати, а почему бы просто не выделять перед печатью нужный фрагмент?
(А дав команду печатать, отметить там (в диалоге) "выделенный диапазон".)

Последний раз редактировалось Sasha_Smirnov; 02.03.2009 в 00:40. Причина: код (с учётом нажатия кнопки "Отмена" в диалоге).
Sasha_Smirnov вне форума Ответить с цитированием
Старый 01.03.2009, 18:46   #4
OgE®_M@G
Форумчанин
 
Аватар для OgE®_M@G
 
Регистрация: 28.06.2008
Сообщений: 124
По умолчанию

Вот файл с диапазонами ячеек
Вложения
Тип файла: rar Печатьданных.rar (1.6 Кб, 25 просмотров)
OgE®_M@G вне форума Ответить с цитированием
Старый 01.03.2009, 18:49   #5
OgE®_M@G
Форумчанин
 
Аватар для OgE®_M@G
 
Регистрация: 28.06.2008
Сообщений: 124
По умолчанию

Спасибо Sasha_Smirnov я завтра попробую вроде бы должно получиться.
OgE®_M@G вне форума Ответить с цитированием
Старый 01.03.2009, 18:53   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Можно использовать такой макрос:
Код:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Cancel = True: ActiveSheet.UsedRange.PrintOut
End Sub
Или такой: (лучше использовать именно этот вариант)
Код:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    On Error Resume Next
    ActiveSheet.PageSetup.PrintArea = ActiveSheet.UsedRange.Address
End Sub
В этих случаях ничего запускать перед печатью не требуется - макрос запустится сам.

Поместить макрос надо в модуль кода "Эта книга"

Цитата:
Сообщение от OgE®_M@G Посмотреть сообщение
Да кстати тут еще не понимаю почему принтер диапазоны печатает (например один и тот же диапазон) просто копий например 2-3 с задержкой то есть сначала одну копию потом вторую в ворде такого нет это как нить исправить можно.
У Вас что, кнопка с запятой на клавиатуре сломалась?
Ничего не понял ...

PS: Не надо плодить посты - есть кнопка Правка

Последний раз редактировалось EducatedFool; 01.03.2009 в 19:01.
EducatedFool вне форума Ответить с цитированием
Старый 01.03.2009, 18:56   #7
OgE®_M@G
Форумчанин
 
Аватар для OgE®_M@G
 
Регистрация: 28.06.2008
Сообщений: 124
По умолчанию

Да кстати тут еще не понимаю почему принтер диапазоны печатает (например один и тот же диапазон) просто копий например 2-3 с задержкой то есть сначала одну копию потом вторую в ворде такого нет это как нить исправить можно.
OgE®_M@G вне форума Ответить с цитированием
Старый 01.03.2009, 18:58   #8
OgE®_M@G
Форумчанин
 
Аватар для OgE®_M@G
 
Регистрация: 28.06.2008
Сообщений: 124
По умолчанию

Спасибо что откликнулись EducatedFool я завтра попробую.
OgE®_M@G вне форума Ответить с цитированием
Старый 01.03.2009, 20:34   #9
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Таки-да, запятая поломалась
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Печать <<>>KaRaPuz<<>> Общие вопросы Delphi 3 31.05.2008 20:59
Печать lacost Общие вопросы C/C++ 2 09.12.2007 22:55
печать Илюха Общие вопросы Delphi 2 23.10.2007 21:15