Ir ao conteúdo
  • Cadastre-se
daviddatal

Excel Macro para imprimir em qualquer impressora

Recommended Posts

Fiz uma macro para configurar impressão e funciona perfeitamente no meu notebook, usando o Foxit PDF Reader 6.

 

Ao testar a macro em outro computador, que não tem o Leitor de PDF Foxit, deu o seguinte erro de execução:

 

"Erro em tempo de execução 1004"

Não é possível definir a propriedade LeftHeader da classe PageSetup.

 

Quando instalo o Foxit no computador que deu erro aí não aparece mais o erro. E ainda, se a versão do Foxit for diferente daquela que está no notebook onde fiz a macro também dá erro.

O que devo fazer para generalizar, ou seja, o código não ficar vinculado à uma impressora específica (foxit pdf) e poder imprimir em qualquer impressora?

A parte do código usada para configurar a impressão foi:

 


 

Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .PrintTitleRows = "$1:$2"
        .PrintTitleColumns = ""
    End With
    Application.PrintCommunication = True
    ActiveSheet.PageSetup.PrintArea = "$A$1:$D$30"
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.196850393700787)
        .RightMargin = Application.InchesToPoints(0.196850393700787)
        .TopMargin = Application.InchesToPoints(0.196850393700787)
        .BottomMargin = Application.InchesToPoints(0.196850393700787)
        .HeaderMargin = Application.InchesToPoints(0)
        .FooterMargin = Application.InchesToPoints(0)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintSheetEnd
        .PrintQuality = 600
        .CenterHorizontally = True
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = False
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = True
        .EvenPage.LeftHeader.Text = ""
        .EvenPage.CenterHeader.Text = ""
        .EvenPage.RightHeader.Text = ""
        .EvenPage.LeftFooter.Text = ""
        .EvenPage.CenterFooter.Text = ""
        .EvenPage.RightFooter.Text = ""
        .FirstPage.LeftHeader.Text = ""
        .FirstPage.CenterHeader.Text = ""
        .FirstPage.RightHeader.Text = ""
        .FirstPage.LeftFooter.Text = ""
        .FirstPage.CenterFooter.Text = ""
        .FirstPage.RightFooter.Text = ""
    End With
    Application.PrintCommunication = True

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu nao entendi bem qual  o problema, mas configure a area de impressão manualmente, ou seja deixe pronta para imprimir, 

 

Defina a impressora que corresponde ao seu programa de pdf como padrão

 

Esse codigo imprime o arquivo

 

Sheets("Plan1").printout.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que como eu criei a macro no meu notebook, que tem como impressora padrão o Foxit PDF Reader,

ao executar a macro em outro computador que não tenha o foxit PDF Reader o excel mostra o erro abaixo:

"Erro em tempo de execução 1004"

Não é possível definir a propriedade LeftHeader da classe PageSetup.

 

Eu gostaria de usar um código que não estivesse vinculado à nenhuma impressora, que apenas configurasse a impressão da página, independente da impressora. Pois do jeito que eu fiz, a macro só funciona em computadores que tiverem o Foxit PDF Reader instalado, e como o arquivo será usado em muitos computadores preciso de um código genérico, que não dependa de uma impressora específica.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas qual o objetivo?

 

Imprimir ou criar um pdf?

 

Se o objetivo é imprimir fazendo o que eu disse ja resolve.

 

Apos configurar o arquivo vai enviar para a impressora padrão do computador que estiver o arquivo aberto.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu disse, quero Apenas configurar a impressão, deixar no jeito, mas sem imprimir.

Tem algum código que faça com que as configurações de impressão estejam disponíveis para qualquer impressora, ou que não esteja vinculada à impressora padrão?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pesquisando, vi que meu problema é igual a esse:

Problema Comunicação Impressora

 

Parece que os comandos de cabeçalho e rodapé, margens, etc estão associados à impressora selecionada no momento de gravação da macro, se trocar de impressora ou de computador o excel diz:

Erro em tempo de execução "1004":

Não é possível definir a propriedade LeftHeader da classe PageSetup

 

Esse LeftHeader é o primeiro parâmetro que aparece da classe PageSetup. Naturalmente, se eu deletá-lo o erro cairá sobre a próxima propriedade, que é CenterHeader, etc

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou fazer isso.

 

Será que teria como resolver esse problema com o comando abaixo?

 

Application.ActivePrinter = "......"

 

Entre as aspas colocar algum código que generalize a impressora ativa, ou que não vincule à nenhuma impressora...

adicionado 25 minutos depois

 

 

O arquivo:

 

Macro_Problema_Impressão.rar

 

A macro deve simplesmente configurar a página parar impressão, sem imprimir.

Nesse arquivo dá pra perceber que colei várias vezes uma pequena tabela.

Quando fiz a tabela inicialmente (sem copiá-la) e testei o código em outro computador não deu o erro.

Depois fiz várias cópias da tabela, como está no arquivo, testei e deu o erro.

 

obs: o erro aparentemente só acontece se o computador não tiver o Foxit PDF Reader.

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi, sua planilha nao vai de A1:D30 como você disse nao post inicial.

Sua planilha de trabalho é EXATAMENTE IGUAL a esta do exemplo?

 

Que configuração você quer fazer ?

 

Qual o resultado esperado?

Compartilhar este post


Link para o post
Compartilhar em outros sites
15 minutos atrás, CasaDoHardware disse:

Não entendi, sua planilha nao vai de A1:D30 como você disse nao post inicial.

Sua planilha de trabalho é EXATAMENTE IGUAL a esta do exemplo?

 

Que configuração você quer fazer ?

 

Qual o resultado esperado?

 

1) Não importa se a planiha A1:D30 é diferente da inicial, pois o problema aparece nela também.

2) Considere minha planilha de trabalho esse última (Macro_Problema_Impressão).

3) A configuração que quero fazer eu disse na última mensagem: APENAS configurar a página para impressão.

4) O resultado esperado é não ter erros na execução da macro, e que ela deixe a planilha configurada para imprimir, de acordo com os valores contidos nos itens da classe PageSetup.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Experimente esse codigo

 

Sub ConfigurarImpressão()

    Range("A1:P60").Select
    ActiveSheet.PageSetup.PrintArea = "$A$1:$P$60"
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    Application.PrintCommunication = True
    ActiveSheet.PageSetup.PrintArea = "$A$1:$P$60"
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.511811023622047)
        .RightMargin = Application.InchesToPoints(0.511811023622047)
        .TopMargin = Application.InchesToPoints(0.78740157480315)
        .BottomMargin = Application.InchesToPoints(0.78740157480315)
        .HeaderMargin = Application.InchesToPoints(0.31496062992126)
        .FooterMargin = Application.InchesToPoints(0.31496062992126)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .PrintQuality = 300
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 0
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = True
        .EvenPage.LeftHeader.Text = ""
        .EvenPage.CenterHeader.Text = ""
        .EvenPage.RightHeader.Text = ""
        .EvenPage.LeftFooter.Text = ""
        .EvenPage.CenterFooter.Text = ""
        .EvenPage.RightFooter.Text = ""
        .FirstPage.LeftHeader.Text = ""
        .FirstPage.CenterHeader.Text = ""
        .FirstPage.RightHeader.Text = ""
        .FirstPage.LeftFooter.Text = ""
        .FirstPage.CenterFooter.Text = ""
        .FirstPage.RightFooter.Text = ""
    End With
    Application.PrintCommunication = True
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .PrintTitleRows = ""
        .PrintTitleColumns = ""
    End With
    Application.PrintCommunication = True
    ActiveSheet.PageSetup.PrintArea = "$A$1:$P$60"
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.511811023622047)
        .RightMargin = Application.InchesToPoints(0.511811023622047)
        .TopMargin = Application.InchesToPoints(0.78740157480315)
        .BottomMargin = Application.InchesToPoints(0.78740157480315)
        .HeaderMargin = Application.InchesToPoints(0.31496062992126)
        .FooterMargin = Application.InchesToPoints(0.31496062992126)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .PrintQuality = 300
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = True
        .EvenPage.LeftHeader.Text = ""
        .EvenPage.CenterHeader.Text = ""
        .EvenPage.RightHeader.Text = ""
        .EvenPage.LeftFooter.Text = ""
        .EvenPage.CenterFooter.Text = ""
        .EvenPage.RightFooter.Text = ""
        .FirstPage.LeftHeader.Text = ""
        .FirstPage.CenterHeader.Text = ""
        .FirstPage.RightHeader.Text = ""
        .FirstPage.LeftFooter.Text = ""
        .FirstPage.CenterFooter.Text = ""
        .FirstPage.RightFooter.Text = ""
    End With
    Application.PrintCommunication = True
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .PrintTitleRows = "$1:$1"
        .PrintTitleColumns = ""
    End With
    Application.PrintCommunication = True
    ActiveSheet.PageSetup.PrintArea = "$A$1:$P$60"
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.511811023622047)
        .RightMargin = Application.InchesToPoints(0.511811023622047)
        .TopMargin = Application.InchesToPoints(0.78740157480315)
        .BottomMargin = Application.InchesToPoints(0.78740157480315)
        .HeaderMargin = Application.InchesToPoints(0.31496062992126)
        .FooterMargin = Application.InchesToPoints(0.31496062992126)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .PrintQuality = 300
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = True
        .EvenPage.LeftHeader.Text = ""
        .EvenPage.CenterHeader.Text = ""
        .EvenPage.RightHeader.Text = ""
        .EvenPage.LeftFooter.Text = ""
        .EvenPage.CenterFooter.Text = ""
        .EvenPage.RightFooter.Text = ""
        .FirstPage.LeftHeader.Text = ""
        .FirstPage.CenterHeader.Text = ""
        .FirstPage.RightHeader.Text = ""
        .FirstPage.LeftFooter.Text = ""
        .FirstPage.CenterFooter.Text = ""
        .FirstPage.RightFooter.Text = ""
    End With
    Application.PrintCommunication = True
    Range("A1").Select
End Sub

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

CasaDoHardware, seu código está muito repetitivo, dá pra enxugar as linhas de comando. Mas não funcionou aqui.

 

Instalei um outro leitor de pdf, o PDF Creator, testei a macro e funcionou também, assim como no caso do Foxit PDF Reader.

 

Me parece que é preciso ter algum programa de pdf instalado para o código de configurar a página para impressão funcionar normalmente.

Eu preciso que o código não dependa de programa nem de impressora, faça apenas a configuração da página para imprimir, sem imprimir.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim amigo, pelo que conclui a configuração de pagina depende da impressora, o que eu sugiro é que você faça a configuração não usando um conversor de pdf mas uma impressora fisica de sua rede.

O codigo acima eu apenas usei o conversor de macros, nao me preocupei em limpar o codigo ja que nao sabia se iria funcionar.

 

Tente fazer a gravação do codigo usando uma outra impressora como padrão.

Pode usar ate uma interna do windows.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quais são as impressoras que veem juntas na instalação do pacote office?

Vejo essas:

Microsoft XPS Document Writer

Microsoft Print to PDF

Enviar para o OneNote 2010

 

Mas tem um detalhe:

criando uma variável qualquer e atribuindo a ela o nome exato da impressora padrão:

dim modelo as String

modelo = application.ActivePrinter

 

em Verificação Imediata:

? modelo

Foxit Reader PDF Printer em Ne03:

 

Podemos notar que o excel guarda o nome da impressora e acrescenta no final uma identificação (Ne03:)

O problema é que se em outro computador a impressora padrão do Windows estiver em outra posição/identifcação (Ne01: ou Ne02: ou Ne03: ou Ne04 etc) vai dar problema.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu ainda nao lhe perguntei o porque!

 

Mas me tira uma duvida porque você quer configurar a impressão pelo vba?

 

Qual o motivo?

 

Talvez tenha uma outra ideia que possa resolver o problema 

 

Sempre que eu tenho algo que pretendo imprimir apos determinada rotina eu procuro deixar uma planilha pronta para isso e receber os dados.

Talvez seja esta a solução para seu real problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não serei eu que vou usar a planilha, se fosse eu bastaria configurar a impressão, escolher a impressora, etc.

Preciso automatizar o máximo possível, para que o usuário possa utilizar a planilha com praticidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas se você deixar formatada não havera problema.

Saber configurar uma impressão para imprimir um documento, isso é o minimo que qualquer pessoa precisa saber. (Opinião Pessoal)

 

De qualquer maneira boa sorte!!

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×