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?

Foi útil?

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:

  1. Obtenha o identificador da janela de diálogo Impressão.
  2. Envie uma mensagem para a janela para dizer para não redesenhar
  3. Invalidar a janela, o que força um redesenho que nunca acontece
  4. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top