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

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

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

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

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

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

Знаешь, если принцип работает и дело действительно в том что ты говоришь, почему бы нам не разделить конечную цель на 2 макроса? Одну кнопь нажал - пошли чб страницы. Другую кнопь нажал - пошли цв страницы. Возможно, это даже удобнее будет в каких-то случаях. Щас даже попробую поколупать макрос, хотя вряд ли чего выдет у меня с первого раза
А! Еще заметил, что описаный мною результат получен именно на большом документе. А создав док из нескольких страниц для теста, там макрос вообще ни чего не делает. Ставит в очередь на печать и сразу убирает

или формирование списка страниц на принтеры сделать не одним оператором, а двумя. Т.е.

Если есть рис. то добавляем в цв список, в противном случае - ничего. Конец

Если нет рис. то добавляем в чб список, в противном случае - ничего. Конец

как-то так по-русски

Последний раз редактировалось Stilet; 18.11.2009 в 07:52.
rain_day вне форума Ответить с цитированием
Старый 17.11.2009, 13:36   #12
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Попробуем проверять BackgroundPrintingStatus
Код:
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
'------------------------------------------------------------------
  'Делаем задержку, пока задание на печать ещё не выполнено
  Do
    DoEvents
  Loop While Application.BackgroundPrintingStatus > 0
'------------------------------------------------------------------
  ActivePrinter = PRINTER_COLOR 'Задаем цветной принтер
  'Отправляем на печать цветные страницы
  oDoc.PrintOut Range:=wdPrintRangeOfPages, Pages:=sColorPages
End Sub
Лучше день потерять — потом за пять минут долететь!©

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

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

Ё-моё, и ты ничего не увидел!
Посмотри внимательно в код, какая переменная отправляется на цветную печать? Код пока исправлять не буду
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 17.11.2009, 13:55   #15
rain_day
Пользователь
 
Регистрация: 17.11.2009
Сообщений: 14
По умолчанию

ТЫ ГЕНИИИИИИЙ!!!!
Спасибо огромное, побежал счастливый тестировать в рабочем процессе!

А мне еще такая мысля пришла. Возможно еще при этом проверять графические объекты цветны или чб? И если чб, то пришивать их к списку чб

Последний раз редактировалось Stilet; 18.11.2009 в 07:53.
rain_day вне форума Ответить с цитированием
Старый 17.11.2009, 14:17   #16
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

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

Прилагаю. Но его пришлось сохранить в формате doc вместо docx
Вложения
Тип файла: doc тест.doc (257.5 Кб, 13 просмотров)
rain_day вне форума Ответить с цитированием
Старый 17.11.2009, 15:03   #18
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

С наскока не получилось. Дело в том, что у объекта InlineShape, каковыми являются рисунки в предоставленном документе, есть свойство PictureFormat.ColorType. Но оно покажет, что рисунок ч\б только если к нему применить команду Перекрасить→Черно-белое. Если же этого не делать, тогда никак не определить.
Вернее, чистым VBA никак, но есть еще функции WinAPI, которые это могут. Но это совсем другая история
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 17.11.2009, 15:39   #19
rain_day
Пользователь
 
Регистрация: 17.11.2009
Сообщений: 14
По умолчанию

А как пришить к данному макросу хотя бы такую команду? Может и такой способ приживётся. Всё легче, чем выписывать номера страниц на листик
rain_day вне форума Ответить с цитированием
Старый 17.11.2009, 15:42   #20
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Какую команду?
Лучше день потерять — потом за пять минут долететь!©
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