Окно выбора принтера !

Программирование на Visual Basic for Applications
MItya
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 08.06.2005 (Ср) 16:35

Окно выбора принтера !

Сообщение MItya » 19.01.2007 (Пт) 16:05

Люди, подскажите как в этом листинге сделать чтобы не сразу печаталось, а выскочило окошко выбора принтера.
Код: Выделить всё
Sub cmdPrint_Click()
   Dim objDoc
   Set objDoc = GetWordDoc("C:\doc.dot")
   Call FillFields (objDoc)
   objDoc.Application.Options.PrintBackground = True
   objDoc.Printout
   objDoc.Close wdDoNotSaveChanges
   Call RestoreWord
   Set objDoc = Nothing
End Sub

Чудовище под кроватью
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 27.11.2006 (Пн) 14:46
Откуда: А из ника не ясно?

Re: Окно выбора принтера !

Сообщение Чудовище под кроватью » 19.01.2007 (Пт) 18:58

MItya писал(а):Люди, подскажите как сделать чтобы выскочило окошко выбора принтера.

Код: Выделить всё
Application.Dialogs(xlDialogPrinterSetup).Show
'или:
Application.Dialogs(xlDialogPrint).Show
У-у-у!!

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 19.01.2007 (Пт) 19:06

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

http://msdn2.microsoft.com/en-us/librar ... (office.10).aspx
Привет,
KL

MItya
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 08.06.2005 (Ср) 16:35

Re: Окно выбора принтера !

Сообщение MItya » 22.01.2007 (Пн) 10:24

Чудовище под кроватью писал(а):
MItya писал(а):Люди, подскажите как сделать чтобы выскочило окошко выбора принтера.

Код: Выделить всё
Application.Dialogs(xlDialogPrinterSetup).Show
'или:
Application.Dialogs(xlDialogPrint).Show


пришет: "Переменная не определена: 'xlDialogPrint'" :(

Чудовище под кроватью
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 27.11.2006 (Пн) 14:46
Откуда: А из ника не ясно?

Сообщение Чудовище под кроватью » 22.01.2007 (Пн) 12:46

MItya
У меня все работает. А ты точно в коде все правильно написал?
Странно.
Попробуй тогда:
Код: Выделить всё
Application.Dialogs(8).Show
У-у-у!!

MItya
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 08.06.2005 (Ср) 16:35

Сообщение MItya » 22.01.2007 (Пн) 13:14

Чудовище под кроватью
пишет: "Объект не поддерживает это свойство или метод: 'Application.Dialogs'"
А ты на VBA пробуешь ?
мне на VBS нужно, там наверно по другому.

Чудовище под кроватью
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 27.11.2006 (Пн) 14:46
Откуда: А из ника не ясно?

Сообщение Чудовище под кроватью » 22.01.2007 (Пн) 13:24

MItya
Что за приложение? Word?
Я на VBA пробовал, но это тут ни при чем. - Это не оператор VBA.
Попробуй в ObjectBrowser найти Dialogs.
Последний раз редактировалось Чудовище под кроватью 22.01.2007 (Пн) 13:29, всего редактировалось 2 раз(а).
У-у-у!!

inq
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 185
Зарегистрирован: 12.04.2006 (Ср) 7:50
Откуда: 78

Сообщение inq » 22.01.2007 (Пн) 13:25

MItya

objDoc.Dialogs(88 ).show ??
Последний раз редактировалось inq 22.01.2007 (Пн) 14:10, всего редактировалось 2 раз(а).
подписи нет и не будет

MItya
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 08.06.2005 (Ср) 16:35

Сообщение MItya » 22.01.2007 (Пн) 14:08

Чудовище под кроватью
не знает он такого слова "Dialogs" :(

Чудовище под кроватью
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 27.11.2006 (Пн) 14:46
Откуда: А из ника не ясно?

Сообщение Чудовище под кроватью » 22.01.2007 (Пн) 15:23

MItya
Что за приложение у тебя? Из пакета MS Office? Или ты просто отдельную программу сам написал на VB?
Проверь - может, ты в Object Browser выбрал одну из библиотек (тогда он ищет только в ней), в этом случае выбери All Libraries.
Какие вообще библиотеки подцеплены?
У-у-у!!

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 22.01.2007 (Пн) 15:32

MItya писал(а):мне на VBS нужно, там наверно по другому.


Однако VBS <> VBA
Весь мир матрица, а мы в нем потоки байтов!

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 23.01.2007 (Вт) 8:14

что-то типа того:

Код: Выделить всё
Option Explicit

Dim oNetwork, sPrintPath
Set oNetwork = CreateObject("WScript.Network")
oNetwork.AddWindowsPrinterConnection "\\server\printer1"
oNetwork.AddWindowsPrinterConnection "\\server\printer2"
oNetwork.AddWindowsPrinterConnection "\\server\printer3"
oNetwork.SetDefaultPrinter "\\server\printer1"

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 23.01.2007 (Вт) 8:28

Nicky, и ты думаешь, что это выведет окно выбора принтера?
Весь мир матрица, а мы в нем потоки байтов!

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 23.01.2007 (Вт) 9:03

!Viper!, естественно, нет. Просто своего готового кода у меня не было, поэтому нашел, через что из vbs можно работать с принтером. Имхо для MItya уже это будет откровением :)

зы: там же стоит дисклаймер "что-то типа того"

MItya
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 08.06.2005 (Ср) 16:35

Сообщение MItya » 23.01.2007 (Вт) 9:21

Nicky писал(а):!Viper!, естественно, нет. Просто своего готового кода у меня не было, поэтому нашел, через что из vbs можно работать с принтером. Имхо для MItya уже это будет откровением :)

зы: там же стоит дисклаймер "что-то типа того"


откровения в этом я не нашел
у тебя же опять дефолтный принтер ставится.
в этом случае у меня и Printout хорошо работал.
мне же нужно выбирать на что печатать.

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 23.01.2007 (Вт) 10:06

Нда, там нет такого функционала
Все намного проще :)
Код: Выделить всё
Set cd = CreateObject("MSComDlg.CommonDialog")
cd.ShowPrinter

MItya
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 08.06.2005 (Ср) 16:35

Сообщение MItya » 23.01.2007 (Вт) 12:06

Nicky писал(а):Нда, там нет такого функционала
Все намного проще :)
Код: Выделить всё
Set cd = CreateObject("MSComDlg.CommonDialog")
cd.ShowPrinter

СУПЕР !!!! заработало !!! спасибо !

одна засадка осталась:
код:
Код: Выделить всё
   Set objDoc = GetWordDoc("C:\doc.dot")
   Call FillFields (objDoc)
   Set cd = CreateObject("MSComDlg.CommonDialog")
   cd.ShowPrinter
   objDoc.Application.Options.PrintBackground = True
   objDoc.Printout
   objDoc.Close wdDoNotSaveChanges
   Call RestoreWord
   Set objDoc = Nothing

Раньше все в фоновом режиме работало.
А теперь после печати остается пусное окно Word.

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 23.01.2007 (Вт) 12:14

Скрыто от глаз посторонних сего воплощение: GetWordDoc
ADD: может заНофенить нами объект привнесенный?

MItya
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 08.06.2005 (Ср) 16:35

Сообщение MItya » 23.01.2007 (Вт) 17:16

Nicky писал(а):Скрыто от глаз посторонних сего воплощение: GetWordDoc
ADD: может заНофенить нами объект привнесенный?


полный код программы:
Код: Выделить всё
Sub cmdPrint_Click()
   Dim objDoc
   Dim cd
   Set objDoc = GetWordDoc("C:\doc.dot")
   Call FillFields (objDoc)
   Set cd = CreateObject("MSComDlg.CommonDialog")
   cd.ShowPrinter
   objDoc.Application.Options.PrintBackground = True
   objDoc.Printout
   objDoc.Close wdDoNotSaveChanges
   Call RestoreWord
   Set objDoc = Nothing
End Sub
Sub FillFields(objDoc)
   Dim colFields
   Set colFields = objDoc.FormFields
   colFields("field1").Result = Item.LastModificationTime
   colFields("field2").Result=Item.UserProperties("Creator")
   colFields("field3").Result = Item.UserProperties("Firma")
   Set colFields = Nothing
End Sub
Function GetWordDoc(strTemplatePath)
   Dim objWord
   On Error Resume Next
   m_blnWeOpenedWord = False
   Set objWord = GetObject(, "Word.Application")
   If objWord Is Nothing Then
      Set objWord = CreateObject("Word.Application")
      m_blnWeOpenedWord = True
   End If
   m_blnWordPrintBackground = objWord.Options.PrintBackground
   If strTemplatePath = "" Then
      strTemplatePath = "Normal.dot"
   End If
   Set GetWordDoc = objWord.Documents.Add(strTemplatePath)
   Set objWord = Nothing
End Function
Sub RestoreWord()
   Dim objWord
   On Error Resume Next
   Set objWord = GetObject(, "Word.Application")
   objWord.Options.PrintBackground = m_blnWordPrintBackground
   If m_blnWeOpenedWord Then
      objWord.Quit
   Else
      objWord.Visible = True
   End If
   Set objWord = Nothing
End Sub

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 24.01.2007 (Ср) 8:30

m_blnWeOpenedWord как объявлена?

MItya
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 08.06.2005 (Ср) 16:35

Сообщение MItya » 24.01.2007 (Ср) 10:23

Nicky писал(а):m_blnWeOpenedWord как объявлена?


Блин, верно! :)
у меня в начале кода была грамматическая ошибка в
Dim m_blnWeOpenedWord

теперь все закрывается

кстати заметил еще 1 недостаточек:
Если уже открыто одно приложение Word, то
при показе окна выбора принтера внизу экрана видно что
приложений Word уже 2.
Правда то окно, которое печатается потом пропадает.
Но нельзя ли сделать чтобы оно не показывалось вообще ?


Вернуться в VBA

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

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

    TopList