如何防止 Word/Excel 尝试连接打印机?

如何防止 Word/Excel 尝试连接打印机?

每当我在 Word 或 Excel (2007) 中执行某些操作时,这些应用程序都会尝试连接打印机。我在公司和家里都使用笔记本电脑工作。当我在家时(未连接到我公司的打印机),我有时在执行诸如在 Excel 中将单元格加粗或将网页中的段落粘贴到 Word 等操作后,必须等待几秒钟才能让 Word/Excel 响应。

在 Word 中,我可能会在底部看到一条小消息,内容类似“正在尝试连接打印机,按 Esc 键中止”。

然而

  1. Excel 中不存在该选项

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

有解决方法吗?

答案1

我的默认打印机是通过以下方式安装的 PDF 打印机可爱PDF,免费:)

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

我在切换字体时看到了你描述的确切行为,我思考这是因为有些打印机有允许的字体,而 Word 正在检查它们是否真的能在打印机上呈现(尽管为什么这是必要的,直到你实际上打印超出了我的能力范围)。

答案2

我认为避免这种情况的唯一方法是使用非远程的默认打印机。这里有一个简单的 JScript,它将您的默认打印机设置为“Microsoft XPS Document Writer”(假设您已安装它),它始终是本地的非硬件打印机。

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

将其保存为SetDefaultPrinter.js,然后您可以使用命令行运行它:

cscript //nologo SetDefaultPrinter.js

...或者您可以将其保存到桌面并双击运行它。

答案3

一个选择是根据 IP 地址自动切换打印机。当您在家时,它大概可以切换到无。

答案4

您可以向您的 personal.xls/normal.dot 模块添加一个程序ThisWorkbook/ThisDocument,该程序可以检测您是否在家并适当地设置打印机默认值。

我没有测试过,但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 打开立即窗口)

相关内容