-
В ворде он легко устанавливается WinWord.ActivePrinter := ГордоеИмяПринтера Пишу макрос в экселе мышкой. Получается тоже самое , только к гордому имени принтера добавляется (Ne01:). Пробовал и с фигнёй в скобочках и без нее - результат один: нельзя установить свойство Printer объекта Application. Может, в экселе принтер вообще не меняется? Но это вряд ли, ведь мышкой-то он легко меняется.
-
Цитирую протокол отладочного окна (CTRL-G): ?Application.ActivePrinter
HP Color LaserJet 2600n on NE04:
Application.ActivePrinter = "hp LaserJet 3030 PCL 6"
?Application.ActivePrinter
hp LaserJet 3030 PCL 6 on NE02:
Все расчудесно работает.
-
Да, но при вызове из Дельфей - глюк! Я же не от скуки спросил. Из самого экселя всё чудно устанавливается. :(
-
Приводи код, будем посмотреть ..
-
Excel.ActivePrinter := PrintTunesForm.PrinterName; Здесь прпоисходить ошибка немогу записать свойство ActivePrinter объекта Application. Могу даже её текст найти, у меня всё в файл пишется. При этом принтер точно есть, его имя верное. С Вордом ничего подобного не происходит, только с экселем.
-
А если указывать принтер непосредственно в PrintOut - та же ошибка ?
-
А можно в PrintOut в скобочках принтер писать? Попробую сейчсас.
-
Вызов метода PrintOut совершён неверно. :(
-
Как ты получаешь список "гордых имен" ?
-
Изначально гордые имена принтеров берутся из Printer.Printers. Потом это настройка, на каком принтере распечатывать. Хранится в инишке, но при чтении пробивается, если ли такой принтер в Printer.Printers, а если его там нету, то снимается флажок и печатается на том принтере, какой Ворд с Экселем сами используют. Здесь точно нету косяка, т. к. с Вордом всё нормально работает. Глюк происходит именно с Экселем.
-
> TStas © (23.02.09 01:31) [9]
Хз .. Ёхель вообще сам по себе капризен при работе с принтерами.
Провел у себя эксперимент: у меня на раб.станции инсталлировано 5 принтеров, из которых 3 удаленных сетевых (доступ через Standard TCP/IP port) и 2 "локальных" (доступ через Virtual printer port for USB). Временной порядок их регистрации не помню.
Если в окне "Принтеры и факсы" упорядочить имена принтеров по возрастанию, то установка в Ёхеле активного принтера выполняется успешно при условии что "гордое имя" выглядит так:
Гордое Имя Принтера (NeXX:)
где XX - двузначный индекс этого принтера в списке, визуализируемом в окне "Принтеры и факсы", т.е. в моем случае принтеры индексируются Ne00 .. Ne04
Локальные принтеры, подключенные через LPT- и COM-интерфейсы, очевидно вместо постфикса NeXX будут иметь постфиксы соотв-но LPTxx и COMxx, и их индексация будет отдельная, т.е. виртуальные и сетевые принтеры имеют свою индексацию, а локальные свою.
-
Да вот не зря же я спросил. Есть у меня книжка хорошая по Ворду с Экселем работа через Дельфи. Там как раз без (Ne). Пробовал с "не" и без "не". Последнее, что сейчас попробую, в принтАут наприсать не просто PrintOut(PrinterName), а PrintOut(ActivePrinter := PrinterName). В книжке почему-то принтер присваиваится дважды: обин раз как активный принтер самому экселю, а второй раз - при вызове принтАут. Неприятность в том, что косяк происходит уже при присвоении принтрера экселю. Есть у меня такое предположение, что это происходит, потому, что на моем компе принтре-то один, а второй в списке - это виртуальный принтер Офиса. Наверно, Эксель чует, что принтер все равно один и менять его бесполезно. Лирическое отступление: А вообще Эксель капризен весьма и сильно различается в версиях. Так на одном компе программа чудно работает, а на другом, притом с теми же виндами, косячила, пока я не стал после закрытия Екселе убивать насильно через КилПроцесс. На форуме это дружно все осудили как варварство, но когда эксель сообщает вызвавшей программе, что закрыл файл, а не сделал этого - это же лживость. А из-за этого не открывается документ с тем же именем, но из папки с исходниками, точнее, он открывается, но не сохраняются изменения.
-
Заработал вот так: Excel.ActiveSheet.PrintOut( ActivePrinter := PrintTunesForm.PrinterName)
-
> второй в списке - это виртуальный принтер Офиса
И ты хочешь указать его в кач-ве активного принтера ?
А что говорит Application.ActivePrinter, если перед этим этот принтер сделать дифолтным в окне "Принтеры и факсы" ?
-
>Сергей М. Спасибо огромное, но передавать Экселю имя принтера в качестве параметра сам бы не догадался. Указавать в качестве активного принтера виртуальный я не собирался. Задача была, и она решена, вот какая: у программы (моей) должна появиться настройка, на чём печатать. Или на умалчиваемом, или на выбранном. ВЫбранные берутся из списка, а список - из Printer.Printers. Это нужно, когда принтеров много. А программа делает документы в Ворде и Экселе.
|