Come gestire la stampante predefinita

Sul sistema di Bruno, Excel rifiuta di stampare su qualsiasi stampante diversa da quella impostata come predefinita per il sistema. Ciò accade solo in Excel, non in Word o in qualsiasi altra applicazione installata. Quindi, per stampare deve cambiare temporaneamente la stampante predefinita con quella che desidera, stampare e poi ricordarsi di reimpostare la stampante in seguito. Bruno si chiede perché non può scegliere altre stampanti.

Potrebbero esserci diverse cause per questo problema. Un abbonato ha riferito di avere riscontrato lo stesso problema, ma che si è verificato solo dopo la migrazione dell’ufficio a Windows 8 a 64 bit e l’utilizzo di Windows PrintServer. Nel loro caso, hanno scoperto che era un attributo nascosto nelle code della stampante a causare il problema e hanno potuto risolverlo solo parlando con il supporto Microsoft.

Altri hanno segnalato il problema che si verificava quando nel sistema venivano installati particolari componenti aggiuntivi (uno in particolare, Microsoft Office Labs Search Command, è stato menzionato alcune volte). La disabilitazione del componente aggiuntivo ha risolto il problema.

Se nessuna delle soluzioni suggerite funziona nel tuo caso, puoi provare a stampare tramite macro. Perché? Perché puoi facilmente modificare la stampante attiva nella macro e quindi ripristinarla. Tutto viene eseguito tramite l’uso della proprietà ActivePrinter. Puoi determinare il nome della stampante attiva corrente e assegnarlo a una variabile, cambiare la stampante, quindi eseguire la stampa e infine ripristinare la stampante:

 

Dim sActive As String
sActive = Application.ActivePrinter  'salva la stampante attiva attuale
Application.ActivePrinter = "XYZ SuperPrinter"
' esegui le tue stampe
Application.ActivePrinter = sActive  'ripristina la vecchia stampante

 

L’unica cosa che devi fare è assicurarti di sostituire “XYZ SuperPrinter” con il nome effettivo della stampante che desideri utilizzare. Puoi scoprire il nome della stampante impostandolo come predefinito (in Windows) e poi, all’interno della finestra Immediata del VBE, stampando il nome della stampante:

 

? Application.ActivePrinter

 

Segna il nome, facendo attenzione alla spaziatura e alle maiuscole, e questo sarà il nome che potrai utilizzare nella macro di stampa.

La macro non fa altro che modificare la stampante “attiva”, quella che potresti modificare facilmente dalla procedura di stampa, anche premendo i tasti Ctrl + P.

Nel caso questo non dovesse funzionare per te, potresti provare a modificare proprio la stampante “predefinita” di Windows.

In questo caso, la macro è un po’ più complessa:

 

Sub ToggleDefaultPrinter()
    Const sNewDef = "Microsoft Stampa in PDF", sNewOnNe = "Ne03:"
    Const sMyName = "Gestione stampante predefinita"
    Const Q = """", QQ = Q & Q, NL = vbNewLine, BL = NL & NL
    Dim oShell As Object
    Dim sLocale As String, sDefPrn As String, sPrnMgr As String
    Dim sSetDef As String, sCmdOne As String, sCmdTwo As String
    Dim sMsg As String, sScript As String, sPath As String
    Set oShell = CreateObject("WScript.Shell")
    sLocale = oShell.RegRead("HKCU\Control Panel\International\LocaleName")
    sDefPrn = oShell.RegRead("HKCU\Software\Microsoft\Windows NT\" _
        & "CurrentVersion\Windows\Device")
    sDefPrn = Trim(Split(sDefPrn, ",")(0))
    sPrnMgr = "%windir%\System32\Printing_Admin_Scripts\" & sLocale _
        & "\prnmngr.vbs"
    sSetDef = "cscript.exe " & sPrnMgr & " -t -p "
    sCmdOne = "cmd.exe /c " & sSetDef & QQ & sNewDef & QQ
    sCmdTwo = "cmd.exe /c " & sSetDef & QQ & sDefPrn & QQ
    'fai attenzione alle seguenti virgolette
    sMsg = """La nuova stmapante predefinita è"" & NL & """ & sNewDef _
        & """ & BL & ""Clicca OK per ripristinare la vecchia stampante"" & NL & """ _
        & sDefPrn & """"
    'evita modifiche al seguente VBScript
    sScript = "NL = vbNewLine: BL = NL & NL" & NL _
        & "Set oShell = CreateObject(""WScript.Shell"")" & NL _
        & "oShell.Run " & Q & sCmdOne & Q & ", 0, True" & NL _
        & "nButton = oShell.Popup(" & sMsg & ", , " & Q & sMyName & Q _
        & ", (1+64+4096))" & NL _
        & "If nButton = 1 Then oShell.Run " & Q & sCmdTwo & Q & ", 0, True"
    sPath = Environ("Temp") & "\~" & sMyName & ".vbs"
    Open sPath For Output Lock Write As #1: Print #1, sScript: Close #1
    oShell.Run "WScript.exe " & Q & sPath & Q, 0, False
    'non ripulire sPath
    Set oShell = Nothing
    Application.ActivePrinter = sNewDef & " su " & sNewOnNe
End Sub

 

 

Aggiorna Const sNewDef e sNewOnNe con il nome e “Ne-port” per la tua nuova stampante predefinita. Se hai un server di stampa, potrebbe essere necessario modificare il valore di sSetDef nella macro; vedi https://ss64.com/nt/prnmngr.html per maggiori riferimenti.

Quando si esegue ToggleDefaultPrinter, la vecchia stampante predefinita verrà modificata in sNewDef seguita da un popup simile allo screenshot seguente e la stampante attiva di Excel verrà modificata di conseguenza. Il popup persisterà finché non verrà chiuso; nel frattempo è possibile stampare sulla nuova stampante attiva (predefinita) con Excel nel solito modo. Infine, fai clic sul pulsante OK del popup per ripristinare la vecchia stampante predefinita, oppure su Annulla per mantenere quella nuova; Tuttavia, la stampante attiva di Excel non cambierà.

 

Come gestire la stampante predefinita 1

 

 

 

Tags: , , , , , , , ,

Ti è stato utile?