Как я могу препятствовать тому, чтобы Word/Excel пытался достигнуть принтера?

Каждый раз, когда я выполняю определенные операции в Word или Excel (2007), эти приложения пытаются достигнуть принтера. Я работаю над ноутбуком на работе и дома. Когда я дома (не подключенный к принтеру моей работы), я иногда должен ожидать много секунд Word/Excel для становления быстро реагирующим после работающих операций, таких как создание ячейки, полужирной в Excel или вставке абзаца от веб-страницы до Word.

В Word I может иметь маленькое сообщение в нижней части, говоря что-то как "Попытка соединиться с принтером, нажать Esc для прерывания".

Однако

  1. Та опция не существует в Excel

  2. и Иногда если я действительно нажимаю Esc, катастрофические отказы Word.

Существует ли обходное решение?

6
задан 15.03.2014, 05:54

6 ответов

Мой принтер по умолчанию является принтером PDF, установленным через CutePDF, который свободен :)

Пока мне определили локальный принтер, и это - значение по умолчанию, все прекрасно.

Я видел точное поведение, которое Вы описываете при переключении шрифтов, и я думаю, что это - потому что некоторые принтеры имеют допустимые шрифты, и Word проверяет, чтобы видеть, представят ли они на самом деле на принтере (хотя то, почему это необходимо, пока Вы на самом деле не печатаете, вне меня).

8
ответ дан 07.12.2019, 15:32

Я думаю единственный способ избежать, чтобы это было при наличии принтера по умолчанию, который не является удаленным. Вот простой JScript, который установит Ваш принтер по умолчанию к "Microsoft XPS Document Writer" (предполагающий, что Вам установили его), который всегда является локальным неаппаратным принтером.

var network = new ActiveXObject("WScript.Network");
network.SetDefaultPrinter("Microsoft XPS Document Writer");

Сохраните это как SetDefaultPrinter.js и можно или выполнить его с помощью командной строки:

cscript //nologo SetDefaultPrinter.js

... или Вы могли просто сохранить его на свой рабочий стол и дважды щелкнуть для выполнения его.

3
ответ дан 07.12.2019, 15:32

Одна опция была бы чем-то вроде этого для автоматического переключения принтера на основе IP-адреса. Это, по-видимому, не могло переключиться ни на один, когда Вы дома.

2
ответ дан 07.12.2019, 15:32

Это могло бы помочь изменить Ваш принтер по умолчанию на тот, который определяется локально.

Нет очевидного (мне, по крайней мере) рациональной причины приложения для взаимодействия с принтером при изменении стиля шрифта, но если, именно это происходит затем, по крайней мере, локальный принтер не будет через не связанную сеть.

1
ответ дан 07.12.2019, 15:32

Вы могли добавить процедуру к 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),

1
ответ дан 07.12.2019, 15:32

Пока можно проверить свойство ActivePrinter в Excel 2007, Вы не можете установить его по некоторым причинам (даже при том, что Вы можете, одним словом, сценарий VBA). Вот обходное решение в Excel VBA:

Set oWord = CreateObject(Class:="Word.Application")

oWord.ActivePrinter = NewDefaultPrinter$

oWord.Quit False

Set oWord = Nothing

Особенно полезно изменить принтер по умолчанию, если это в настоящее время устанавливается на сетевой принтер, поскольку задержки испытаны, если макрос VBA изменяет рабочую книгу (удалите столбцы и т.д.) - это, кажется, проверяет принтер с каждым внесенным изменением. Для предотвращения этого, принтер по умолчанию должен быть установлен к локальному принтеру во время процесса модификации рабочей книги, затем обратно снова впоследствии.

1
ответ дан 07.12.2019, 15:32

Теги

Похожие вопросы