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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2009, 08:24   #1
rain_day
Пользователь
 
Регистрация: 17.11.2009
Сообщений: 14
По умолчанию Печать цветных и черно-белых страниц на разные принтеры

Я в отчаянии
Постоянно приходится печатать документы большого объёма со страницами с изображениями (графики (внедренные объекты экселя), рисунки (jpg, tif, и др)) на цветном принтере, черно-белые страницы на обычном лазерном принтере - существует ли какая-нибудь возможность это сделать автоматически, а не выбирать страницы и вручную вбивать номера? Документы как правило около 150 стр. а цветные около 50 стр.
rain_day вне форума Ответить с цитированием
Старый 17.11.2009, 09:23   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Единственное, что могу предложить, то это проверить все страницы на наличие в них изображений. По результатам проверки сформировать два набора номеров страниц: страницы, содержащие изображения и без таковых. Ну а затем оправить на печать на разные принтеры
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 17.11.2009, 09:41   #3
rain_day
Пользователь
 
Регистрация: 17.11.2009
Сообщений: 14
По умолчанию

А как сделать такую проверку?
rain_day вне форума Ответить с цитированием
Старый 17.11.2009, 11:45   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Попробуй так, не проверял. Задай константам имена своих принтеров.
Код:
Sub SeparatePrint()
  Const PRINTER_BW = "Принтер чернобелой печати"
  Const PRINTER_COLOR = "Принтер цветной печати"
  Dim sBWPages As String 'Строка для номеров страниц на ч\б печать
  Dim sColorPages As String 'Строка для номеров страниц на цветную печать
  Dim oDoc As Document: Set oDoc = ActiveDocument 'Документ, который нужно распечатать
  Dim nPage As Long: nPage = 1 'Номер страницы
  Dim oPageRng As Range 'Диапазон отдельной страницы
  Dim nPages As Long: nPages = oDoc.Range.ComputeStatistics(wdStatisticPages) 'Количество страниц в документе
  Do
    'Переходим в начало отдельной страницы
    Set oPageRng = oDoc.Range.GoTo(wdGoToPage, wdGoToAbsolute, nPage)
    'Растягиваем диапазон на всю страницу
    If nPage < nPages Then
      oPageRng.SetRange oPageRng.Start, oDoc.Range.GoTo(wdGoToPage, wdGoToAbsolute, nPage + 1).Start
    Else
      oPageRng.SetRange oPageRng.Start, oDoc.Range.End
    End If
    
    If oPageRng.InlineShapes.Count = 0 And oPageRng.ShapeRange.Count = 0 Then 'Если нет рисунков
      sBWPages = sBWPages & nPage & "," 'Добавляем в список страниц для печати на ч\б принтер
    Else 'Если есть рисунки
      sColorPages = sColorPages & nPage & "," 'Добавляем в список страниц для печати на цветной принтер
    End If
    nPage = nPage + 1
  Loop While nPage <= nPages
  sBWPages = Left(sBWPages, Len(sBWPages) - 1)
  sColorPages = Left(sColorPages, Len(sColorPages) - 1)
  ActivePrinter = PRINTER_BW 'Задаем ч\б принтер
  'Отправляем на печать ч\б страницы
  oDoc.PrintOut Range:=wdPrintRangeOfPages, Pages:=sBWPages
  ActivePrinter = PRINTER_COLOR 'Задаем цветной принтер
  'Отправляем на печать цветные страницы
  oDoc.PrintOut Range:=wdPrintRangeOfPages, Pages:=sBWPages
End Sub
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 17.11.2009 в 12:39. Причина: Перенёс объявления констант внутрь процедуры
viter.alex вне форума Ответить с цитированием
Старый 17.11.2009, 12:35   #5
rain_day
Пользователь
 
Регистрация: 17.11.2009
Сообщений: 14
По умолчанию

Спасибо Вам за уделяемое внимание. Но куда этот код тепрь? Этот код надо вставить в новый макрос?
rain_day вне форума Ответить с цитированием
Старый 17.11.2009, 12:38   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Код немного изменил: перенес объявления констант внутрь процедуры. Весь этот код и является макросом. Вставляете его туда, где у вас все макросы, и запускаете.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 17.11.2009, 12:49   #7
rain_day
Пользователь
 
Регистрация: 17.11.2009
Сообщений: 14
По умолчанию

Да да, вот уже тестирую. Внутрь процедуры это куда?
rain_day вне форума Ответить с цитированием
Старый 17.11.2009, 12:57   #8
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от rain_day Посмотреть сообщение
Да да, вот уже тестирую. Внутрь процедуры это куда?
Как это куда? В первом варианте константы, задающие имена принтеров, были заданы вне процедуры.
Код:
Const PRINTER_BW = "Принтер чернобелой печати"
Const PRINTER_COLOR = "Принтер цветной печати"
Sub SeparatePrint()
…
End Sub
Теперь они находятся внутри процедуры:
Код:
Sub SeparatePrint()
  Const PRINTER_BW = "Принтер чернобелой печати"
  Const PRINTER_COLOR = "Принтер цветной печати"
…
End Sub
Разница в том, что в первом варианте эти константы могут использовать все процедуры в проекте, а во втором, только та, в которой они объявлены.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 17.11.2009, 13:14   #9
rain_day
Пользователь
 
Регистрация: 17.11.2009
Сообщений: 14
По умолчанию

В первом варианте результаты неоднозначные. Чб принтер действительно выдал чб страницы. А цв принтер начал печатать всё подряд с первой страницы и я отключил его. Во втором варианте ни чего не изменилось
rain_day вне форума Ответить с цитированием
Старый 17.11.2009, 13:19   #10
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от rain_day Посмотреть сообщение
В первом варианте результаты неоднозначные. Чб принтер действительно выдал чб страницы. А цв принтер начал печатать всё подряд с первой страницы и я отключил его. Во втором варианте ни чего не изменилось
Вот и хорошо! Значит, принцип правильный. Думаю дело в том, что мы меняем активный принтер, когда задание на печать еще не выполнено. Вот и сбоит. Будем думать.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Принтеры в сети HappyUser Работа с сетью в Delphi 0 16.04.2009 22:09
печать страниц в обратном порядке Олекса Microsoft Office Word 4 30.03.2009 09:45
Как узнать количество выданных на печать страниц Bogood Общие вопросы Delphi 3 13.03.2009 17:29
Раскрашивание черно-белых изображений!!! ALEX_RAS Помощь студентам 1 16.05.2008 21:57