VBA Excel - conoscere stato della stampante

Anonimo
2014-05-06T08:12:39+00:00

Ciao a tutti,

ho un problema che non riesco a risolvere.

Ho scritto un'applicazione VBA (usato il VBA "per motivi storici") con la quale - tra le altre cose - eseguo delle stampe. Ho trovato una routine per estrarre tutte le stampanti installate, ma non riesco a sapere se la singola stampante è attiva oppure no.

In particolare, mi trovo con stampanti "doppie" (tipo: SAMSUNG-ML2160 Series (Copia 1) su NE003:", ecc. - talora "triple"), per cui se scelgo, ad esempio, la prima, in realtà poi non si produce la stampa (perchè, fisicamente - credo - il cavo non è attaccato su NE003: ma su qualche altro NExxx:). Pensavo di risolvere con "ActivePrinter", ma non funziona (mi restituisce il nome della stampante, ma poi ... è quella sbagliata).

Come potrei fare per risolvere questo problema?

Grazie in anticipo e buona giornata

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2014-05-07T06:37:31+00:00

Ho provato, ma ... non viene! In particolare, OpenPrinter mi dà "0". Pazienza, ringrazio per le sollecite risposte e vedrò come fare (ma possibile non ci sia una soluzione semplice?).

Buon lavoro

Perché il nome della stampante non è corretto, Utilizza il codice allegato per ottenere l'elenco delle stampanti installate sul tuo pc e lo status (che però non è quello che serve a te).

Maggiori dettagli qui.

Andrea.


Public Sub PrintersInstalled()

Dim wmi As Object, prn As Object

  On Error GoTo Uffa

  Set wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\.\root\cimv2")

  For Each prn In wmi.ExecQuery("Select * from Win32_Printer")

    Debug.Print prn.name, prn.PrinterStatus, prn.Status

  Next

Uffa:

  Set wmi = Nothing:  Set prn = Nothing

End Sub


La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

7 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2014-05-06T14:15:12+00:00

    Tanto per darti un'idea ...

    Mente fresca, eh!

    Bentornato.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2014-05-06T14:00:59+00:00

    Grazie, Andrea. L'avevo visto, ma non so come recuperare il PI2Status da passare a "CheckPrinterStatus(PI2Status As Long)" - non sono espertissimo in queste interfacce! Probabilmente è la strada giusta, ma ... mi manca un pezzo!

    Buona giornata

    Tanto per darti un'idea ...

    Andrea.


    Public Function PrinterStatusDescription(PrinterName As String) As String

    Dim pDefaults As PRINTER_DEFAULTS

    Dim lResult As Long, hPrinter As Long, BytesNeeded As Long, BytesUsed As Long

    Dim StatusCode As Long

      pDefaults.DesiredAccess = PRINTER_ACCESS_USE

      lResult = OpenPrinter(PrinterName, hPrinter, pDefaults)

      If lResult Then

        Call GetPrinter(hPrinter, 2, ByVal 0&, 0, BytesNeeded)

        If Err.LastDllError = ERROR_INSUFFICIENT_BUFFER Then

          ReDim Buffer(0 To BytesNeeded - 1) As Byte

          lResult = GetPrinter(hPrinter, 2, Buffer(0), BytesNeeded, BytesUsed)

          If lResult Then

            Call CopyMemory(StatusCode, Buffer(72), 4)

            PrinterStatusDescription = CheckPrinterstatus(StatusCode)

          End If

        Else

          Debug.Print Err.LastDllError

        End If

        Call ClosePrinter(hPrinter)

      End If

    End Function


    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2014-05-06T09:02:23+00:00

    Grazie, Andrea. L'avevo visto, ma non so come recuperare il PI2Status da passare a "CheckPrinterStatus(PI2Status As Long)" - non sono espertissimo in queste interfacce! Probabilmente è la strada giusta, ma ... mi manca un pezzo!

    Buona giornata

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2014-05-06T08:35:51+00:00

    Ciao a tutti,

    ho un problema che non riesco a risolvere.

    Ho scritto un'applicazione VBA (usato il VBA "per motivi storici") con la quale - tra le altre cose - eseguo delle stampe. Ho trovato una routine per estrarre tutte le stampanti installate, ma non riesco a sapere se la singola stampante è attiva oppure no.

    In particolare, mi trovo con stampanti "doppie" (tipo: SAMSUNG-ML2160 Series (Copia 1) su NE003:", ecc. - talora "triple"), per cui se scelgo, ad esempio, la prima, in realtà poi non si produce la stampa (perchè, fisicamente - credo - il cavo non è attaccato su NE003: ma su qualche altro NExxx:). Pensavo di risolvere con "ActivePrinter", ma non funziona (mi restituisce il nome della stampante, ma poi ... è quella sbagliata).

    Come potrei fare per risolvere questo problema?

    Grazie in anticipo e buona giornata

    Ciao Ivo,

    vedi se questo può essere d'aiuto:

    http://support.microsoft.com/kb/202480

    Andrea.

    La risposta è stata utile?

    0 commenti Nessun commento