VBA – Verificar se impressora padrão está desligada

Mais uma obra do nosso fórum. Numa discussão pra lá de produtiva, os usuários TARSA e Basole postaram dois blocos de código que permite pelo VBA obter o status da impressora padrão do computador. Tem para todos os gostos, sendo uma UDF e uma macro mais tradicional:

Versão TARSA:

Public Function PrinterOffline(Optional pstrPrinter As String = "Default") As Boolean
	Dim strWhere As String
	Dim objWMI As Object
	Dim objPrinters As Object
	Dim objPrinter As Object
 
	Set objWMI = GetObject("winmgmts:\\.\root\CIMV2")
	If LCase$(pstrPrinter) = "default" Then
		strWhere = "Default = True"
	Else
		strWhere = "Name = '" & pstrPrinter & "'"
	End If
	Set objPrinters = objWMI.ExecQuery("SELECT * FROM Win32_Printer WHERE " & strWhere)
	For Each objPrinter In objPrinters
		PrinterOffline = objPrinter.WorkOffline
		Exit For
	Next
	Set objPrinter = Nothing
	Set objPrinters = Nothing
	Set objWMI = Nothing
End Function

Versão Basole:

Sub Check_Printer_Status()
    Dim strComputer As String
    Dim objWMIService
    Dim colInstalledPrinters
    Dim objPrinter
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
                                  & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colInstalledPrinters = objWMIService.ExecQuery _
                               ("Select * from Win32_Printer where Default = 'True'")
 
    For Each objPrinter In colInstalledPrinters
        Select Case objPrinter.printerstatus
        Case 3
            MsgBox "A impressora está ociosa"
        Case 4
            MsgBox "Impressora esta imprimindo"
        Case 5
            MsgBox "A impressora está aquecendo"
        Case Else
            MsgBox "A impressora está desativada"
        End Select
    Next
End Sub

Indo mais no detalhe, caso haja interesse, o código está fazendo uso do WMI (Windows Management Instrumentation), utilizado não só gerenciar para impressoras mas também todo o hardware do computador. O mais curioso é que você usa sintaxe SQL para fazer as consultas às informações do hardware. Um prato cheio para quem conhece. 🙂

O link do post: http://www.tomasvasquez.com.br/forum/viewtopic.php?f=20&t=5428

Valeu pessoal! São vocês é que fazem o fórum ser o que ele é!