Como você evita a impressão da caixa de diálogo ao usar o método Excel PrintOut
-
09-06-2019 - |
Pergunta
Quando uso o método PrintOut para imprimir um objeto Planilha em uma impressora, a caixa de diálogo "Impressão" (mostrando o nome do arquivo, a impressora de destino, as páginas impressas e um botão Cancelar) é exibida mesmo que eu tenha definido DisplayAlerts = False.O código abaixo funciona em uma macro do Excel, mas a mesma coisa acontece se eu usar esse código em uma aplicação VB ou VB.Net (com as alterações de referência necessárias para usar o objeto Excel).
Public Sub TestPrint()
Dim vSheet As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set vSheet = ActiveSheet
vSheet.PrintOut Preview:=False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
EDITAR:A resposta abaixo esclarece mais sobre isso (que pode ser uma caixa de diálogo do Windows e não uma caixa de diálogo do Excel), mas não responde à minha pergunta.Alguém sabe como evitar que ele seja exibido?
EDITAR:Obrigado por sua pesquisa extra, Kevin.Parece que é disso que eu preciso.Só não tenho certeza se quero aceitar cegamente um código API como esse.Alguém mais tem algum conhecimento sobre essas chamadas de API e está fazendo o que o autor pretende?
Solução
Quando você diz a caixa de diálogo "Imprimindo", presumo que você se refira à caixa de diálogo "Agora imprimindo xxx em", em vez da caixa de diálogo de impressão padrão (selecione a impressora, o número de cópias, etc.).Tomando o exemplo acima e testando, esse foi o comportamento que vi - "Agora imprimindo..." foi exibido brevemente e depois fechado automaticamente.
O que você está tentando controlar pode não estar vinculado ao Excel, mas sim ao comportamento no nível do Windows.Se for controlável, você precisará a) desativá-lo, b) imprimir, c) reativá-lo.Se o seu código falhar, existe o risco de ele não ser reativado para outros aplicativos.
EDITAR:Experimente esta solução: Como você evita a impressão da caixa de diálogo ao usar o método Excel PrintOut.Parece descrever exatamente o que você procura.
Outras dicas
Se você não quiser mostrar a caixa de diálogo de impressão, basta fazer um teste macro como segue;não mostrará nenhuma caixa de diálogo de impressão e detectará a impressora padrão e imprimirá imediatamente.
sub test()
activesheet.printout preview:= false
end sub
Execute esta macro e ela imprimirá a planilha atualmente ativa sem exibir a caixa de diálogo de impressão.
As chamadas de API no artigo vinculado por Kevin Haines ocultam a caixa de diálogo Impressão da seguinte forma:
- Obtenha o identificador da janela de diálogo Impressão.
- Envie uma mensagem para a janela para dizer para não redesenhar
- Invalidar a janela, o que força um redesenho que nunca acontece
- Diga ao Windows para pintar novamente a janela, o que faz com que ela desapareça.
Isso é simplificado demais, para dizer o mínimo.
As chamadas de API são seguras, mas você provavelmente desejará garantir que a atualização da tela da caixa de diálogo Impressão esteja definida como True se seu aplicativo falhar.