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