每当我在 Word 或 Excel (2007) 中执行某些操作时,这些应用程序都会尝试连接打印机。我在公司和家里都使用笔记本电脑工作。当我在家时(未连接到我公司的打印机),我有时在执行诸如在 Excel 中将单元格加粗或将网页中的段落粘贴到 Word 等操作后,必须等待几秒钟才能让 Word/Excel 响应。
在 Word 中,我可能会在底部看到一条小消息,内容类似“正在尝试连接打印机,按 Esc 键中止”。
然而
Excel 中不存在该选项
有时如果我按下 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 打开立即窗口)