如何防止Word / Excel尝试访问打印机?


6

每当我在Word或Excel(2007)中执行某些操作时,这些应用程序都会尝试访问打印机。我在工作和家里的笔记本电脑上工作。当我在家(没有连接到我的工作的打印机)时,我有时需要等待很多秒才能使Word / Excel在执行诸如在Excel中使用单元格粗体或将网页中的段落粘贴到Word之后的响应。

在Word中我可能在底部有一条小消息,上面写着“试图连接到打印机,按Esc中止”。

然而

  1. Excel中不存在该选项

  2. 有时如果我按Esc,Word会崩溃。

有解决方法吗?

Answers:


8

我的默认打印机是通过CutePDF安装的PDF打印机,免费:)

只要我定义了本地打印机,并且它是默认的,一切都很好。

我已经看到了你在切换字体时所描述的确切行为,我认为这是因为有些打印机有允许的字体,而Word正在检查它们是否真的会在打印机上呈现(虽然为什么这是必要的,直到你实际打印为超越我)。


刚做了那个改变,但我现在已经连接到网络了。我会检查一下它是否有效,谢谢。
Roee Adler

快乐你们都设置:)
warren

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

将默认打印机更改为本地定义的打印机可能会有所帮助。

应用程序在更改字体样式时与打印机交互没有明显的(至少是合理的)理由,但如果发生这种情况,则至少本地打印机不会跨越未连接的网络。


我没有本地打印机,我真的很喜欢我将我的默认打印机定义为工作(我打印很多)
Roee Adler

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

请注意,您的PC上的端口可能会有所不同,您可以运行以下代码来检查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编辑器的立即窗口中列出所有已安装的打印机名称(如果您不熟悉VBA,则为立即窗口的CTRL + G)


1

虽然您可以在Excel 2007中检查ActivePrinter属性,但由于某种原因(即使您可以在Word VBA脚本中)也无法设置它。以下是Excel VBA中的解决方法:

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

oWord.ActivePrinter = NewDefaultPrinter$

oWord.Quit False

Set oWord = Nothing

如果默认打印机当前设置为网络打印机,则更改默认打印机特别有用,因为如果VBA宏修改工作簿(删除列等)会出现延迟 - 它似乎在每次更改时检查打印机。为防止这种情况,需要在工作簿修改过程中将默认打印机设置为本地打印机,然后再重新打印。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.