6

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

В Word у меня может быть маленькое сообщение внизу, говорящее что-то вроде: «Попытавшись подключиться к принтеру, нажмите Esc для отмены».

тем не мение

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

  2. и иногда, если я нажимаю Esc, Word вылетает.

Есть ли обходной путь?

7 ответов7

8

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

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

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

3

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

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

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

cscript //nologo SetDefaultPrinter.js

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

2

Одним из вариантов было бы что - то вроде этого , чтобы автоматически переключить принтер на основе IP - адреса. Предположительно, он может переключиться ни на что, когда вы дома.

1

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

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

oWord.ActivePrinter = NewDefaultPrinter$

oWord.Quit False

Set oWord = Nothing

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

1

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

В этом списке будут перечислены все установленные имена принтеров в окне «Немедленное» редактора Visual Basic (CTRL+G для окна «Немедленное», если вы не очень знакомы с VBA).

1

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

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

0

Другое решение - просто отключить отображение разрывов страниц на медленных вкладках. Вы можете увидеть пример этого здесь: http://blogs.mccombs.utexas.edu/the-most/2010/02/17/hidepagebreaks/

Распечатка часто происходит из-за того, что Excel пытается постоянно перераспределить ваш лист, что дорого и, как правило, не нужно. Я видел хорошие улучшения производительности, просто отключив эту опцию.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .