Как проследить отправку документа на печать?

Программирование на Visual Basic for Applications
Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Как проследить отправку документа на печать?

Сообщение Rojohn » 18.04.2006 (Вт) 19:16

Привет, уважаемые!

Пытаюсь распечатать документ без показа на экран. Если пишу так:
Код: Выделить всё
Dim w1 As Word.Application, w2 As Word.Document

  With w2
     .PrintOut True
     .Close False
  End With
  Set w2 = Nothing
  w1.Quit False
  Set w1 = Nothing


Но в этом случае Word закрывается раньше, чем документ успевает отправиться на печать. Появляется значек принтера с пустым заданием. Подскажите, как сделать закрытие Word только после отправки документа на печать? Может таймер или DoEvents? Только у меня что-то не получилось...

Спасибо за ответы!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 18.04.2006 (Вт) 19:22

Как я и обещал, никакого кода, Rojohn, только пинком... Соответствующую галку в параметрах печати видел? Нет? А она там...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Сообщение Rojohn » 18.04.2006 (Вт) 20:05

Спасибо и на этом GSerg :)
Правда принтера щас под руками нет, но предполагаю, что это:

w1.Options.PrintBackground = True

Завтра буду пробовать...

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Сообщение Rojohn » 19.04.2006 (Ср) 13:12

Попробовал, немного видоизменил и всё равно, без передачи управления на другую операцию (в данном случае окно MsgBox) печать не начинается:

Код: Выделить всё
  w1.Options.PrintBackground = True
  w2.PrintOut True
  Do While w1.BackgroundPrintingStatus > 0
      MsgBox "Бланк <" & CStr(rsBlancP![BLANC_TITLE]) & "> был отправлен на печать!"
  Loop
  w2.Close False
  Set w2 = Nothing
  w1.Quit False
  Set w1 = Nothing


А как бы обойтись без MsgBox-а :?:

GSerg: Нужен небольшой, но точный пинок :wink:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 19.04.2006 (Ср) 13:28

Мне сложно оценить авторский замысел, ибо роль msgbox-а в таком цикле мне не ясна.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Сообщение Rojohn » 19.04.2006 (Ср) 13:39

GSerg писал(а):Мне сложно оценить авторский замысел, ибо роль msgbox-а в таком цикле мне не ясна.


Его роль в том, чтобы появиться и тем самым дать возможность документу отправиться на печать. Если его убрать, то отправка документа на печать не успевает завершиться и печать не происходит (открывается принтер с пустыми заданиями, т.е. без заданий).
Т.е. надо как-то ждать завершения отправки на печать и закрывать Word только после этого.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 19.04.2006 (Ср) 13:48

Моё мнение о необходимости Rojohnу изучать основы самого VB прежде, чем использовать его на прикладных задачах, всё укрепляется и укрепляется...
Я бы сказал, в данном случае мы имеем дело с человеком, не понимающим отличие True от False, ибо только так можно составить подобный цикл... Впрочем, медитировать следует над первой строчкой кода. Выкинув цикл.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Сообщение Rojohn » 19.04.2006 (Ср) 14:07

Спасибо GSerg, опять выручил... Дело в том, что я неправильно перевёл MSDN :) Точнее не очень врубился в смысл PrintBackground.
Как оказалось можно выкинуть не только цикл, а ещё и пресловутую первую строчку, т.к. в самом методе PrintOut первым параметром идёт как раз то, что нужно... Так что вот что получилось:
Код: Выделить всё
w2.PrintOut False
w2.Close False
Set w2 = Nothing
w1.Quit False
Set w1 = Nothing


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 41

    TopList