Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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

 

Editado por gustavodbg
Ferramenta code adicionada ao código.

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.

 

Editado por daviddatal

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

Configurar a impressão você pode usar o gravador de macros, e fazer as configurações apenas no excel, sem nenhum programa externo.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
 

Gravar a macro eu sei fazer, mas qual o código para fazer configurações apenas no excel, sem nenhum programa externo?

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

 

Editado por daviddatal

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz assim:

 

Disponibilize seu arquivo!

 

Explique o que o arquivo deve fazer e como deve ficar.

 

 

Editado por CasaDoHardware

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.

 

 

 

 

Editado por daviddatal

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.

Editado por daviddatal

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!!

 

 

Editado por CasaDoHardware

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






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

×