powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Выбор принтера в Excel2003
9 сообщений из 9, страница 1 из 1
Выбор принтера в Excel2003
    #38004876
Татьяна...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток, профессионалы.

У меня установлены два принтера (лазерный и матричный),
для печати на нужном принтере, делаю так
Код: vbnet
1.
2.
    Application.ActivePrinter = "Samsung ML-1860 Series (Ne05:)"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True


или
Код: vbnet
1.
2.
3.
    Application.ActivePrinter = "Epson LX-300+ (Ne08:)"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
        "Epson LX-300+ (Ne04:)", Collate:=True


Иногда возникает проблема, если USB шнур ошибочно был установлен не в то гнездо, то требуется делать исправления в коде.

Подскажите, есть ли возможность выбирать (делать активным) принтер, тот который нужен в данный момент?
что то наподобие вот этого
Код: vbnet
1.
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True


но именно нужный принтер.
Если да, то подскажите как это реализовать, без привязки к параметру (Ne__:)

P.S. принтер Samsung ML-1860 Series всегда активный, а
принтер Epson LX-300+ делать активным в нужный момент, после чего опять активировать принтер Samsung
...
Рейтинг: 0 / 0
Выбор принтера в Excel2003
    #38006119
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Выбор принтера в Excel2003
    #38061836
Татьяна...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
F, прошу прощения что так поздно отвечаю.
Всем доброго времени суток.
ссылка не работает, поиск результатов не дает
подскажите, если не трудно
...
Рейтинг: 0 / 0
Выбор принтера в Excel2003
    #38061947
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вы будете постоянно перетыкать лазерник (кстати. почему так)? - то проблема, конечно, решаема, но отнюдь не простыми методами.

Вы бы лучше рассказали, отчего и почему вам надо из одного приложения печатать на разных принтерах, и, при этом, ваши пользователи не могут воспользоваться стандартным диалогом выбора принтера самого Excel?
...
Рейтинг: 0 / 0
Выбор принтера в Excel2003
    #38061974
Татьяна...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM, оба принтера используются для печати на спецбланках (чаще всего)
лазерный - для простых бланков
матричный - для печати на спецбланках с копирующей подложкой (как в ГИБДД заполнение
протоколов - верхний лист (оригинал), в дело, нижний лист (копию) представителю)
при этом лазерный после выполнения всех печатей должен оставаться по умолчанию.
Здесь нашла похожее, но не разобралась
...
Рейтинг: 0 / 0
Выбор принтера в Excel2003
    #38062255
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно, что у вас ссылка не открылась. У меня открывается.
...
Рейтинг: 0 / 0
Выбор принтера в Excel2003
    #38063374
Татьяна...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
F, вот что я вижу
502 Bad Gateway (вверху на чистом экране)
...
Рейтинг: 0 / 0
Выбор принтера в Excel2003
    #38063434
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.planetaexcel.ru/forum.php?thread_id=5185 Александр
04.08.2008, 16:48 Как получить список принтеров
Задача следующая:
Нужно распечатать с помощью макроса документ. Всё просто, НО
как задать активный принтер???
Application.activePrinter="имя принтера" не работает

он требует номер порта Ne00: , Ne01: и тд.

Вопрос :
Откуда узнать номер порта для конкретного принтера?

P.S. В реестре есть записи, где принтеру присваивается порт, но неужели нет возможностиузнать из Excel?

[ответить]
[цитировать]
Лузер™
04.08.2008, 17:57
Ответ очевиден: Экселем прочитать реестр.
VBA: Как получить значение нужной записи из раздела в реестре Windows ?
http://www.msoffice.nm.ru/faq/macros/miscellaneous2.htm#faq381
VBA: Как получить список всех значений и всех записей указанного раздела ?
http://www.msoffice.nm.ru/faq/macros/miscellaneous2.htm#faq382

[ответить]
[цитировать]
Лузер™
04.08.2008, 18:11
Со ссылками поторопился.
там есть комментарий:
Данная инструкция позволяет работать только с одним разделом реестра, а именно HKEY_USERS\...\VB and VBA Program Settings\...
Это написано про SaveSetting, но, боюсь, это относится и к GetAllSettings
Но сути дела не меняет: Читать ветку реестра.

[ответить]
[цитировать]
Pavel55
04.08.2008, 19:02
Может как-нибудь так, см. пример


К сообщению прикреплен файл: post_26604.xls
[ответить]
[цитировать]
Александр
04.08.2008, 19:14
Пример не канает.
с портом определяется только активный принтер!
а мне нужно узнать порты неактивых, чтобы сделать один из них активным!
есть еще предложения?

[ответить]
[цитировать]
Pavel55
04.08.2008, 21:07
А вот так? (проверить не могу, дома нет принтеров) )


К сообщению прикреплен файл: post_26613.xls
[ответить]
[цитировать]
ZVI
04.08.2008, 21:19 Re: Как получить список принтеров
---
См. приложение.
VB-код взят из Интернета (ссылка есть в коде формы).
Адаптирован под VBA.
---
ZVI


К сообщению прикреплен файл: post_26614.rar
[ответить]
[цитировать]
Александр
04.08.2008, 23:26
Pavel55
Спасибо!
То что надо!

[ответить]
[цитировать]
Александр
05.08.2008, 07:57
Народ, огромная просьба...
Можете макрос из последнего сообщения пашки выложить текстом?
Я вчера дома смотрел, а сейчас на работе. У нас стоит антивирусна прокси сервере который не позволяет скачивать файлы с макросами

[ответить]
[цитировать]
dsapa
05.08.2008, 08:47
Option Explicit

Private Declare Function GetProfileString Lib "kernel32" _
Alias "GetProfileStringA" (ByVal lpAppName As String, _
ByVal lpKeyName As String, ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long) As Long

Sub Test()
Dim vaList
'Get all printers
vaList = PrinterFind
'Show m
MsgBox Join(vaList, vbLf), , "List of printers"
'Get all printers with A3 paper size
vaList = PrinterFind(Match:="A3")
'Switch to the first "A3 paper size" found
If UBound(vaList) = -1 Then
MsgBox "Printer not found"
ElseIf MsgBox("from " & vbTab & ": " & ActivePrinter & vbLf & _
"to " & vbTab & ": " & vaList(0), _
vbOKCancel, "Switch Printers") = vbOK Then
Application.ActivePrinter = vaList(0)
End If
End Sub

Public Function PrinterFind(Optional Match As String) As String()
Dim n%, lRet&, sBuf$, sCon$, aPrn$()
Const lLen& = 1024, sKey$ = "devices"
'------------------------------------------------------------------
'written by keepITcool

'requires xl2000 or newer.
'returns a zerobased array of complete localized printer strings
'results are filtered on Match string, if no result the ubound = -1
'------------------------------------------------------------------
'Split ActivePrinter string to get localized word for "on"
aPrn = Split(Excel.ActivePrinter)
sCon = " " & aPrn(UBound(aPrn) - 1) & " " '
'Read all installed printers (1k bytes s/b enough)
sBuf = Space(lLen)
lRet = GetProfileString(sKey, vbNullString, vbNullString, sBuf, lLen)
If lRet = 0 Then
Err.Raise vbObjectError + 513, , "Can't read Profile"
Exit Function
End If
'Split buffer string
aPrn = Split(Left(sBuf, lRet - 1), vbNullChar)
'Filter array on Match
If Match <> vbNullString Then aPrn = Filter(aPrn, Match, -1, 1)
For n = LBound(aPrn) To UBound(aPrn)
'Add 16bit portname for each Printer
sBuf = Space(lLen)
lRet = GetProfileString(sKey, aPrn(n), vbNullString, sBuf, lLen)
aPrn(n) = aPrn(n) & " (" & Mid(sBuf, InStr(sBuf, ",") + 1, lRet - InStr(sBuf, ",") - 1) & ":)"
Next
'Return the result
PrinterFind = aPrn
End Function

[ответить]
[цитировать]
Александр
05.08.2008, 08:48
Спасибо

[ответить]
[цитировать]
Евгений
04.02.2011, 16:14
Sheets("Dogovor").Select
Range("A1:I147").Select
ActiveSheet.PageSetup.PrintArea = "$A$1:$I$147"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="doPDF v7", Collate:=True

Вот такой кусок кода работает отлично, причем не используя заумные фунции.
В справке по разделу PrintOut Method есть описание, число копий, и АКТИВНЫЙ ПРИНТЕР. Единственное, что необходимо указать точное имя... в моем случае это
doPDF v7. Это виртуальный принтер принтер для конвертации экселя в PDF формат.

[ответить]
[цитировать]
_Лена_
16.04.2012, 20:02
написала себе, делюсь!!!!

задать нужный принтер по маске:
единственное, что нужно - задать значение МаскаПринтера.
будет искать по соответствию *МаскаПринтера*

------------------------------
Option Explicit

Private Declare Function GetProfileString Lib "kernel32" _
Alias "GetProfileStringA" (ByVal lpAppName As String, _
ByVal lpKeyName As String, ByVal lpDefault As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long) As Long

Sub Test()
Dim СписокП, n, МаскаПринтера
МаскаПринтера = "Adobe"
СписокП = PrinterFind
For n = 0 To UBound(СписокП)
If СписокП(n) Like "*" & МаскаПринтера & "*" Then
Debug.Print СписокП(n)
Application.ActivePrinter = СписокП(n)
Exit For
End If
Next
End Sub

Public Function PrinterFind(Optional Match As String) As String()
Dim n%, lRet&, sBuf$, sCon$, aPrn$()
Const lLen& = 1024, sKey$ = "devices"
aPrn = Split(Excel.ActivePrinter)
sCon = " " & aPrn(UBound(aPrn) - 1) & " " '
sBuf = Space(lLen)
lRet = GetProfileString(sKey, vbNullString, vbNullString, sBuf, lLen)
If lRet = 0 Then
Err.Raise vbObjectError + 513, , "Can't read Profile"
Exit Function
End If
aPrn = Split(Left(sBuf, lRet - 1), vbNullChar)
If Match <> vbNullString Then aPrn = Filter(aPrn, Match, -1, 1)
For n = LBound(aPrn) To UBound(aPrn)
sBuf = Space(lLen)
lRet = GetProfileString(sKey, aPrn(n), vbNullString, sBuf, lLen)
aPrn(n) = aPrn(n) & " (" & Mid(sBuf, InStr(sBuf, ",") + 1, lRet - InStr(sBuf, ",") - 1) & ":)"
Next
PrinterFind = aPrn
End Function

[ответить]
[цитировать]
Hugo
Число сообщений: 11588
16.04.2012, 20:26
Спасибо, обязательно кому-то пригодится.
Только я бы в общем случае сперва запоминал текущий принтер в переменную, потом делал активным нужный виртуальный пдф, печатал на него, затем возвращал принтер назад.
_______________________
hugo nxt ru webmoney: E265281470651 Z422237915069 R418926282008
[ответить]
[цитировать]
anvg
Число сообщений: 531
17.04.2012, 03:15
Ещё пять копеек
Public Sub GetPrintersInfo()
On Error Resume Next
Dim objWMIService As Object
Dim objPrinters As Object
Dim objPrinter As Object
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set objPrinters = objWMIService.ExecQuery("Select * from Win32_Printer", , 48)
For Each objPrinter In objPrinters
Debug.Print "Printer: " & objPrinter.Caption & vbTab & "Port: " & objPrinter.PortName
Next objPrinter
End Sub
Детали тут
http://msdn.microsoft.com/en-us/library/windows/desktop/aa394363%28v=vs.85%29.aspx
...
Рейтинг: 0 / 0
Выбор принтера в Excel2003
    #38063473
Татьяна...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndreTM, спасибо, а также спасибо F
практически готовое решение задачи
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Выбор принтера в Excel2003
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]