Propósito

✔ Programação GLOBAL® - Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog devem ser tratados como consultoria freelance. Queiram contatar-nos: brazilsalesforceeffectiveness@gmail.com | ESTE BLOG NÃO SE RESPONSABILIZA POR QUAISQUER DANOS PROVENIENTES DO USO DOS CÓDIGOS AQUI POSTADOS EM APLICAÇÕES PESSOAIS OU DE TERCEIROS.

VBA Access | 🖨️ Como Listar Tipos de Papel e Bandejas Suportados pela Impressora - How to List Printer-Supported Paper Types and Trays

VBA Access | 🖨️ Como Listar Tipos de Papel e Bandejas Suportados pela Impressora


Estas funções VBA permitem uma gestão avançada de impressoras no Access, tornando tarefas de administração e suporte mais simples e eficientes. Experimente integrá-las ao seu fluxo de trabalho e otimize sua produtividade.


Manipulando Impressoras e Impressões: 


Se este conteúdo for útil, compartilhe e siga para mais dicas!


Trabalhar com impressoras no VBA oferece possibilidades poderosas, como listar tipos de papéis e bandejas suportados. Essas informações são valiosas para garantir a configuração correta e resolver problemas de impressão.


Benefícios

  • Diagnóstico de configurações de impressão.
  • Identificação rápida de problemas.
  • Suporte técnico mais eficiente.

O Código

Aqui estão as funções avançadas para listar papéis e bandejas suportados pelas impressoras no VBA.


' **Sub ListSupportedPapers**

' Lista todos os tipos de papéis suportados pela impressora padrão e exibe em uma mensagem.

Sub ListSupportedPapers()

    ' Declarações de variáveis

    Dim paperCount As Long       ' Contador de tipos de papel

    Dim i As Long                ' Contador para loop

    Dim deviceName As String     ' Nome da impressora

    Dim devicePort As String     ' Porta da impressora

    Dim paperNamesBuffer As String ' Buffer para armazenar os nomes dos papéis

    Dim paperName As String      ' Nome individual do papel

    Dim paperNumbers() As Integer ' Array de números dos papéis

    Dim message As String        ' Mensagem de saída


    On Error GoTo ErrorHandler   ' Configuração de tratamento de erros


    ' Obter nome e porta da impressora padrão

    deviceName = Application.Printer.DeviceName

    devicePort = Application.Printer.Port


    ' Obter o número de tipos de papel suportados

    paperCount = DeviceCapabilities(deviceName, devicePort, DC_PAPERNAMES, ByVal vbNullString, DEFAULT_VALUES)

    

    If paperCount > 0 Then

        ' Redimensiona o array para comportar o número de papéis

        ReDim paperNumbers(1 To paperCount)

        

        ' Prepara o buffer para nomes dos papéis (64 bytes por papel)

        paperNamesBuffer = String(64 * paperCount, vbNullChar)

        

        ' Obter os nomes dos papéis

        DeviceCapabilities deviceName, devicePort, DC_PAPERNAMES, ByVal paperNamesBuffer, DEFAULT_VALUES

        

        ' Obter os números dos papéis

        DeviceCapabilities deviceName, devicePort, DC_PAPERS, paperNumbers(1), DEFAULT_VALUES

        

        ' Monta a mensagem com as informações dos papéis

        message = "Papéis suportados pela impressora '" & deviceName & "':" & vbCrLf

        For i = 1 To paperCount

            paperName = Trim(Left(Mid(paperNamesBuffer, (i - 1) * 64 + 1, 64), InStr(1, Mid(paperNamesBuffer, (i - 1) * 64 + 1, 64), vbNullChar) - 1))

            message = message & paperNumbers(i) & " - " & paperName & vbCrLf

        Next i

    Else

        message = "Nenhum papel encontrado para a impressora '" & deviceName & "'."

    End If

    

    ' Exibe a mensagem

    MsgBox message, vbInformation, "Tipos de Papéis"


    Exit Sub


ErrorHandler:

    MsgBox "Erro: " & Err.Description, vbCritical, "Erro " & Err.Number

End Sub


' **Sub ListSupportedBins**
' Lista todas as bandejas de papéis suportadas pela impressora especificada e exibe em uma mensagem.
Sub ListSupportedBins(printerName As String)
    ' Declarações de variáveis
    Dim binCount As Long         ' Contador de bandejas
    Dim i As Long                ' Contador para loop
    Dim deviceName As String     ' Nome da impressora
    Dim devicePort As String     ' Porta da impressora
    Dim binNamesBuffer As String ' Buffer para armazenar os nomes das bandejas
    Dim binName As String        ' Nome individual da bandeja
    Dim binNumbers() As Integer  ' Array de números das bandejas
    Dim message As String        ' Mensagem de saída

    On Error GoTo ErrorHandler   ' Configuração de tratamento de erros

    ' Obter nome e porta da impressora especificada
    deviceName = Application.Printers(printerName).DeviceName
    devicePort = Application.Printers(printerName).Port

    ' Obter o número de bandejas suportadas
    binCount = DeviceCapabilities(deviceName, devicePort, DC_BINNAMES, ByVal vbNullString, DEFAULT_VALUES)
    
    If binCount > 0 Then
        ' Redimensiona o array para comportar o número de bandejas
        ReDim binNumbers(1 To binCount)
        
        ' Prepara o buffer para nomes das bandejas (24 bytes por bandeja)
        binNamesBuffer = String(24 * binCount, vbNullChar)
        
        ' Obter os nomes das bandejas
        DeviceCapabilities deviceName, devicePort, DC_BINNAMES, ByVal binNamesBuffer, DEFAULT_VALUES
        
        ' Obter os números das bandejas
        DeviceCapabilities deviceName, devicePort, DC_BINS, binNumbers(1), DEFAULT_VALUES
        
        ' Monta a mensagem com as informações das bandejas
        message = "Bandejas suportadas pela impressora '" & deviceName & "':" & vbCrLf
        For i = 1 To binCount
            binName = Trim(Left(Mid(binNamesBuffer, (i - 1) * 24 + 1, 24), InStr(1, Mid(binNamesBuffer, (i - 1) * 24 + 1, 24), vbNullChar) - 1))
            message = message & binNumbers(i) & " - " & binName & vbCrLf
        Next i
    Else
        message = "Nenhuma bandeja encontrada para a impressora '" & deviceName & "'."
    End If
    
    ' Exibe a mensagem
    MsgBox message, vbInformation, "Bandejas de Impressão"

    Exit Sub

ErrorHandler:
    MsgBox "Erro: " & Err.Description, vbCritical, "Erro " & Err.Number
End Sub


O código a seguir deve ser passado para a seção de declarações gerais de um módulo.

' Declaration for the DeviceCapabilities function API call. 

Private Declare Function DeviceCapabilities Lib "winspool.drv" _ 

    Alias "DeviceCapabilitiesA" (ByVal lpsDeviceName As String, _ 

    ByVal lpPort As String, ByVal iIndex As Long, lpOutput As Any, _ 

    ByVal lpDevMode As Long) As Long 

     

' DeviceCapabilities function constants. 

Private Const DC_PAPERNAMES = 16 

Private Const DC_PAPERS = 2 

Private Const DC_BINNAMES = 12 

Private Const DC_BINS = 6 

Private Const DEFAULT_VALUES = 0


Como Funciona

  1. Listagem de Papéis: A função ListSupportedPapers obtém os nomes e números de papéis suportados pela impressora padrão.
  2. Listagem de Bandejas: A função ListSupportedBins exibe as bandejas de papel suportadas por uma impressora especificada.
  3. Mensagens Informativas: Os resultados são apresentados de forma clara em uma caixa de mensagem.

Exemplos de Uso

  • Auditoria de Impressoras: Geração de relatórios sobre papéis e bandejas disponíveis.
  • Diagnóstico Técnico: Identificar incompatibilidades de papel ou bandejas.
  • Automação de Configuração: Configurar impressoras de forma automática em sistemas integrados.

👉 Não se esqueça de seguir André Bernardes no Linkedin. Clique aqui e me contate via What's App. 

Comente e compartilhe este artigo!

brazilsalesforceeffectiveness@gmail.com


 Série de Livros nut Project 

DONUT PROJECT: VBA - Projetos e Códigos de Visual Basic for Applications (Visual Basic For Apllication)eBook - DONUT PROJECT 2024 - Volume 03 - Funções Financeiras - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 02 - Conectando Banco de Dados - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 01 - André Luiz Bernardes

Nenhum comentário:

Postar um comentário

diHITT - Notícias