Каждый раз, когда я выполняю определенные операции в Word или Excel (2007), эти приложения пытаются достигнуть принтера. Я работаю над ноутбуком на работе и дома. Когда я дома (не подключенный к принтеру моей работы), я иногда должен ожидать много секунд Word/Excel для становления быстро реагирующим после работающих операций, таких как создание ячейки, полужирной в Excel или вставке абзаца от веб-страницы до Word.
В Word I может иметь маленькое сообщение в нижней части, говоря что-то как "Попытка соединиться с принтером, нажать Esc для прерывания".
Однако
Та опция не существует в Excel
и Иногда если я действительно нажимаю Esc, катастрофические отказы Word.
Существует ли обходное решение?
Мой принтер по умолчанию является принтером PDF, установленным через CutePDF, который свободен :)
Пока мне определили локальный принтер, и это - значение по умолчанию, все прекрасно.
Я видел точное поведение, которое Вы описываете при переключении шрифтов, и я думаю, что это - потому что некоторые принтеры имеют допустимые шрифты, и Word проверяет, чтобы видеть, представят ли они на самом деле на принтере (хотя то, почему это необходимо, пока Вы на самом деле не печатаете, вне меня).
Я думаю единственный способ избежать, чтобы это было при наличии принтера по умолчанию, который не является удаленным. Вот простой JScript, который установит Ваш принтер по умолчанию к "Microsoft XPS Document Writer" (предполагающий, что Вам установили его), который всегда является локальным неаппаратным принтером.
var network = new ActiveXObject("WScript.Network");
network.SetDefaultPrinter("Microsoft XPS Document Writer");
Сохраните это как SetDefaultPrinter.js
и можно или выполнить его с помощью командной строки:
cscript //nologo SetDefaultPrinter.js
... или Вы могли просто сохранить его на свой рабочий стол и дважды щелкнуть для выполнения его.
Одна опция была бы чем-то вроде этого для автоматического переключения принтера на основе IP-адреса. Это, по-видимому, не могло переключиться ни на один, когда Вы дома.
Это могло бы помочь изменить Ваш принтер по умолчанию на тот, который определяется локально.
Нет очевидного (мне, по крайней мере) рациональной причины приложения для взаимодействия с принтером при изменении стиля шрифта, но если, именно это происходит затем, по крайней мере, локальный принтер не будет через не связанную сеть.
Вы могли добавить процедуру к ThisWorkbook/ThisDocument
модуль Вашего personal.xls/normal.dot, который обнаружил бы, если бы Вы были дома и установили значение по умолчанию принтера соответственно.
Я не протестировал это, но USERDOMAIN
(индекс 30) должен подойти с этой целью. Следующий код должен дать Вам общее представление о том, что требуется, чтобы делать это.
Sub checkDomain()
Dim desiredPrinter As String
If Environ(30) = "USERDOMAIN=YOURWORKDOMAIN" Then
'Set work default printer
desiredPrinter = "\\NetworkAddress\Work Printer on Ne04:"
Else
'Set home default printer
desiredPrinter = "Microsoft XPS Document Writer on Ne01:"
End If
If Not Application.ActivePrinter = desiredPrinter Then
Application.ActivePrinter = desiredPrinter
End If
End Sub
Обратите внимание, что порты будут, вероятно, отличаться на Вашем ПК, можно выполнить следующий код для проверки то, что VBA думает, что принтеры называют.
Sub PrinterList()
Dim objWMIService
Dim colInstalledPrinters
Dim objPrinter
Dim strPrinterName As String
Dim strComputer As String
strPrinterName = Application.ActivePrinter
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery("Select * from Win32_Printer ")
For Each objPrinter In colInstalledPrinters
If objPrinter.PrinterStatus = 1 Or objPrinter.PrinterStatus = 2 Or objPrinter.PrinterStatus = 7 Then
Debug.Print "offline:" & objPrinter.Name
Else
If InStr(strPrinterName, objPrinter.Name) Then
Debug.Print objPrinter.Name & "*"
Else
Debug.Print objPrinter.Name
End If
End If
Next
End Sub
Это перечислит все установленные названия принтера в окне Immediate Visual Basic Editor (CTRL+G для окна Immediate, если Вы не будете очень знакомы с VBA),
Пока можно проверить свойство ActivePrinter в Excel 2007, Вы не можете установить его по некоторым причинам (даже при том, что Вы можете, одним словом, сценарий VBA). Вот обходное решение в Excel VBA:
Set oWord = CreateObject(Class:="Word.Application")
oWord.ActivePrinter = NewDefaultPrinter$
oWord.Quit False
Set oWord = Nothing
Особенно полезно изменить принтер по умолчанию, если это в настоящее время устанавливается на сетевой принтер, поскольку задержки испытаны, если макрос VBA изменяет рабочую книгу (удалите столбцы и т.д.) - это, кажется, проверяет принтер с каждым внесенным изменением. Для предотвращения этого, принтер по умолчанию должен быть установлен к локальному принтеру во время процесса модификации рабочей книги, затем обратно снова впоследствии.