Usando Access
Home Vídeos Tutoriais Dicas Ribbons Suporte Downloads Contato Artigo
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos
apresentados abaixo. Você pode comprar em até 10x no Cartão de Crédito.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Do Access 2002 (XP) em diante foi incorporada, no VBA, a coleção PRINTER que permite realizar
várias configurações para a impressão de relatórios.
Volta e meia há a necessidade de se redefinir o formato do papel (A4, Carta, Ofício, ...), as margens,
a orientação (retrato ou paisagem) e ainda permitir que o usuário escolha a impressora a ser utilizada.
Graças à coleção PRINTER é possível personalizar as configurações para cada um dos relatórios!
Para uma boa parte dos relatórios, costumo aplicar uma mesma padronização de Layout. Exemplo:
Formato A4
Margens de 1 centímetro
Orientação retrato
Outros.
Esses valores são armazenados em um determinado local para que sejam consultados quando a
impressão ou a visualização de um relatório for solicitada.
Para armazenar os diversos tipos de valores, crio variáveis dentro da palavra chave TYPE, que tem a
seguinte estrutura:
Type typPrinter
FormatoPapel As AcPrintPaperSize
Este conjunto de variáveis criadas dentro desta chave Type é passado para uma variável global
1 of 12 22/06/2020 10:46
Docmd.OpenReport Turbinado - Alteração de margens, papel, ... https://www.usandoaccess.com.br/tutoriais/openreport_alteracoes-marge...
Orientacao As AcPrintOrientation
NumeroDeCopias As Byte
margemEsquerda As Single
MargemDireita As Single
MargemSuperior As Single
MargemInferior As Single
AlturaPapel As Single
LarguraPapel As Single
End Type
A variável pública setPrinter agora é detentora de todas a variáveis criadas na chave Type. Para
acessar qualquer uma das variáveis, basta usar o ponto após o nome da variável setPrinter. Exemplo:
setPrinter.NumeroDeCopias = 1
O próximo passo foi o de criar uma função para preencher as variáveis com os valores que determinei
como padrão.
Quando o aplicativo é encerrado, os valores inseridos nas variáveis, pela função acima, são perdidos. É
necessário, então, carregar estes valores, sempre que iniciarmos o aplicativo. Isso é feito através da
macro AutoExec, que irá executar a função fncPadraoPrinter() para alimentar as variáveis.
2 of 12 22/06/2020 10:46
Docmd.OpenReport Turbinado - Alteração de margens, papel, ... https://www.usandoaccess.com.br/tutoriais/openreport_alteracoes-marge...
Para alterar um relatório, via código, é preciso que este esteja carregado no modo Visualizar Impressão
ou no modo Designer. Para ter acesso ao modo Designer, selecionamos esta opção no argumento
View do comando de abertura do relatório.
Esta técnica, de abrir o modo Designer pelo código, não é muito empregada, porque ele impedirá de
gerar arquivos com extensão ACCDE (MDE).
Usaremos então a abertura do relatório no modo Visualizar Impressão e com a opção oculto.
Mantemos o relatório oculto até se concluir todas as modificações.
Podemos agora alterar as configurações de impressão, com a coleção PRINTER, que está à nossa
disposição. Veja a lista das propriedades, na figura abaixo:
Ao terminar as alterações, basta chamar o relatório no modo Visualizar Impressão, para o usuário
poder visualizar ou no modo Normal, que será enviado direto para a impressora.
ou
Com a coleção PRINTER podemos listar as impressoras e assim oferecer ao usuário a opção para a
escolha.
Veja o código abaixo, que preenche uma ListBox, com o nome das impressoras:
3 of 12 22/06/2020 10:46
Docmd.OpenReport Turbinado - Alteração de margens, papel, ... https://www.usandoaccess.com.br/tutoriais/openreport_alteracoes-marge...
Com todos esses ingredientes vistos até aqui, montei uma função para ser usada toda vez que precisar
imprimir um relatório. Esta função estará substituindo o uso do comando Docmd.OpenReport
diretamente.
Sair:
Call fncPadraoPrinter 'restabelece as configurações padrão
DoCmd.SetWarnings True
Utilizando a função na prática
4 of 12 22/06/2020 10:46
Docmd.OpenReport Turbinado - Alteração de margens, papel, ... https://www.usandoaccess.com.br/tutoriais/openreport_alteracoes-marge...
Exit Function
TratarErro:
If Err.Number = 2501 Then
MsgBox "O relatório não contém dados...", vbInformation, "Aviso"
Else
'fecha o relatório que estava oculto
DoCmd.Close acReport, NomeRelatorio, acSaveNo
'informa sobre o erro desconhecido
MsgBox "Erro: " & Err.Number & vbCrLf & Err.Description, vbCritical, _
"Aviso", Err.HelpFile, Err.HelpContext
End If
DoCmd.Restore 'Restaura formulário que está em maximizado
Resume sair
End Function
Agora, vamos imaginar que eu precise alterar a orientação e as margens do papel. Primeiro altero os
valores na variável setPrinter, para depois chamar pela função fncImprimir()
'---------------------------------
'Altera configurações de impressão
'---------------------------------
With setPrinter
.MargemDireita = 1 'margens em centímetros
.margemEsquerda = 0.5
.MargemInferior = 1
.MargemSuperior = 0.5
.Orientacao = acPRORLandscape 'orientação paisagem
End With
Viu como ficou fácil e rápido configurar um relatório com esta função?
Imagine que você tenha oferecido ao usuário a possibilidade da troca de impressora. Observe que o
valor selecionado da ListBox é passado na função:
Arquivo Exemplo:
Temos alguns botões no formulário para você poder ver em ação a coleção PRINTER. Altere os valores
destes botões e veja os resultados na prática.
Para adaptar as funções ao seu projeto, basta copiar o módulo mod_imprimir. Não esqueça que
deverá chamar pela função fncPadraoPrinter() através da Macro AutoExec ou por um formulário que
carregue na inicialização.
Download
setPrinter.zip
Bom estudo!
5 of 12 22/06/2020 10:46
Docmd.OpenReport Turbinado - Alteração de margens, papel, ... https://www.usandoaccess.com.br/tutoriais/openreport_alteracoes-marge...
Como carregar o seu menu sem que ele vá para lista de suplementos
37 comentários
Bom dia !
Tenho um sistema que gera vários relatórios de tamanhos, formas e orientações diferentes !
Como fazer tudo isto funcionar em cada um deles !
Terei de criar um botão para cada relatório ?
segue:
Private Sub Lista4_DblClick(Cancel As Integer)
6 of 12 22/06/2020 10:46
Docmd.OpenReport Turbinado - Alteração de margens, papel, ... https://www.usandoaccess.com.br/tutoriais/openreport_alteracoes-marge...
A mensagem de erro pois estava a usar o exemplo sem 1º deixar correr a macro.
Muito Obrigado .
Estou com um problema, tenho o Office 2010 64 bits, abri uma BD em branco e importei todos os objectos deste exemplo e ao
clicar a 1ª vez no "Imprimir relatório no padrão" dá o seguinte erro:
Erro:5
Invalid procedure call or argument
Muito Obrigado .
Itamar,
essas impressoras vem com uma Dll própria. Vc não tem o manual desta ?
http://comunidade.itlab.com.br/eve/forums?a=search&reqWords=Bematech
Bom estudo!
Como faço para imprimir no papel 80x30 bobina impressora Bematech MP4200TH?
Wagner
meu office é 2013 de 32 bits e fiz alguns ensaios com sendObjetct e não tive problemas.
O Office 2013 veio com alguns Erros que são corrijidos com atualizações oferecidas. Vá na guia ARQUIVO do Access e clique
em CONTA. Do lado direito, clique no botão "Opções de atualizações" clique em "Habilitar atualizações". Se não der resultado,
baixe e instale esta atualização:
http://support.microsoft.com/kb/2767861
Essa atualização acima ajusta o erro de funcionamento com a extensão ACCDR. Pode ser que traga acertos para outros itens.
No aguardo
Avelinoi, abre o outlook com o relatório anexado, com o assunto e para quem estou enviando. Quando clico em enviar no
outlook não dá nenhuma mensagem mas não envia. Quando gero novamente ele abre o outlook e ao clicar em enviar dá a
mensagem "o microsoft parou de funcionar". uso 64 bits e office 2013.
Wagner
7 of 12 22/06/2020 10:46
Docmd.OpenReport Turbinado - Alteração de margens, papel, ... https://www.usandoaccess.com.br/tutoriais/openreport_alteracoes-marge...
Regis,
Se ele está duplicando o valor ao imprimir, vc tem que zerar as variáveis no evento "ao imprimir" do RODAPE. Exemplo: Se
tiver uma variável de nome SomaDespesas
somaDespesas = 0
Aguardo
Avelino dá pra definir a impressora com o relatório fechado? Ou seja, antes de abrir o relatório? Porque o meu relatório calcula
os valores via vba (dum outro post seu), mas se eu abrir 2 vezes o relatório ele duplica todos os valores.
Olá Avelino,
Não pude deixar de ler todos estes posts, mas assim mesmo fiquei com uma dúvida, pois quando abro um relatório, às vezes o
mesmo perde as configurações de páginas, me refiro às margens esquerda, direita, superior e inferior, porém com este seu
post vejo uma saída, pois independente de ter ou estar configurado, eu posso via vba forçar as margens do relatórios, porém
não estou conseguindo fazer isso com o seu exemplo, por favor me ajude se puder, pois no meu caso eu utilizo o seguinte
comando para abrir o relatório com um argumento:
stDocName = "RltCertificado2013"
DoCmd.OpenReport stDocName, acViewPreview, , , , strdtpersonalcertif
mas onde coloco as informações certas e em que instância da abertura do mesmo para que consiga sucesso.
Grato.
Eu uso esse código só para fazer uma impressão rapida dos equipamentos
O meu problema é que a tabela tem muitos campos e na impressão tem que sai duas folhas para acabar de mostrar os resto
dos campos, portante eu queria mudar a folha de vertical para horizontal é possível?
Boas,
Olá Prof.,
Estou tentando imprimir cheques em uma impressora a laser, tamanho, 7,5 cm x 17,5 cm. A impressora aceita formato
personalizado.
Obrigado!
8 of 12 22/06/2020 10:46
Docmd.OpenReport Turbinado - Alteração de margens, papel, ... https://www.usandoaccess.com.br/tutoriais/openreport_alteracoes-marge...
Cleber,
qual formato de papel está usando ? Verifique se a impressora aceita formato de papel definido pelo usuário.
Sucesso!
Amigo,
Você é FANTÁSTICO.
O quanto eu ja tinha batido cabeça pra encontrar esses comandos.
Olá, Avelino
Uma abordagem para acrescentar mais funcionalidade, no meu trabalho tem uma impressora nova da Lexmark modelo X656de
que tem a capacidade de imprimir frente e verso sem precisar virar a folha manualmente, tenho relatório independente que
precisar se impresso frente e verso tem como concatenar esses relatórios via código para utilizar a função, pois na prática
relatórios de duas folhas num mesmo documento usando a propriendade da impressora consigo realizar esse tipo de
impressão, porém em relatórios de 1 pagina e um outro também com uma página tenho de fazer esse processo manualmente.
Forte abraço.
Onde se lê:
Lê-se:
Obrigado!
Prezados amigos,
Resolvi o meu problema e posto aqui a solução para ajudar outras pessoas:
' Manda imprimir somente o registro que está sendo visualizado no formulário:
DoCmd.PrintOut acPages, CurrentRecord, CurrentRecord, 1, Copias
9 of 12 22/06/2020 10:46
Docmd.OpenReport Turbinado - Alteração de margens, papel, ... https://www.usandoaccess.com.br/tutoriais/openreport_alteracoes-marge...
DoCmd.RunMacro "EncerraImpressao"
End Sub
2 - Crie uma macro e salve com o nome EncerraImpressao com as seguintes linhas:
Ação Fechar; tipo de objeto Formulário, nome do objeto SeuFormulário; salvar não.
Ação AbrirFormulário; nome do Formulário SeuFormulárioPrincipal (deve ser diferente do formulário que está com o botão
IMPRIMIR); Exibir formulário.
Créditos:
Avelino (Site Usando Access)
Natopb (Fórum Script Brasil)
Schoen (Fórum Comunidade ITLAB)
Fórum Máximo Access
Obrigado!
Avelino,
Funcionou perfeitamente!
Agora eu queria que o form e o registro que está aparecendo no form fosse impresso através da caixa de impressora (para
escolher a impressora) sem precisar visualizar o form antes ou então que o form e o registro que está aparecendo fosse
impresso diretamente para a impressora padrão. Há como?
Abraços.
Thel,
docmd.OpenForm "NomeFormulário",acPreview
forms("NomeFormulário").Printer.Orientation =acPRORLandscape
forms("NomeFormulário").Printer.PaperSize =acPRPSA4
Sucesso!
Avelino,
Você tem algum código VBA que ao clicar no botão imprimir de um formulário seja impresso diretamente para a impressora, na
orientação PAISAGEM, papel A4, aquele registro visualizado no formulário?
Abraços.
Carlos,
http://comunidade.itlab.com.br/eve/forums?a=search&reqWords=margens+Access+2000
Sucesso!
Boa noite
Voce tem este exemplo em access 2000
Adorei mais esse artigo, como sempre super empolgante, conforme o colega acima, vou tentar aplicar a função de imprimir em
frente e verso numa impressora nova que chegou no meu trabalho com esse poder de virar a folha, imagino criar um campo
onde eu marcar significa que quero a impressao automatizada dos relatórios que tenho de imprimir um e depois o outro no
10 of 12 22/06/2020 10:46
Docmd.OpenReport Turbinado - Alteração de margens, papel, ... https://www.usandoaccess.com.br/tutoriais/openreport_alteracoes-marge...
verso, se tiver uma dica... são dois relatórios distintos, imagino que antes de imprimir tenho de selecionar a impressora,
preparar informando que qro impressão frente e verso e ai disparar uma impressão depois a outra... vou fzer uns testes...
kkk...
Prezado Avelino,
Estou necessitando configurar um relatório para imprimir frente e verso e gostaria de saber como faço para aplicar margens
espelho (a exemplo do que é possível no Word).
Forte abraço!
Avelino,
Vou adaptar ao meu projeto. Mais uma vez, parabéns pelo excelente exemplo.
Roni,
a função fornecida neste artigo, atende perfeitamente este seu caso. Imagine então que vc tenha no seu formulário os campos
para o usuário definir as margens direita e esquerda. basta então montar o código da seguinte forma:
With setPrinter
.MargemDireita = me!CampoMargemDireita
.margemEsquerda = me!CampoMargemEsquerda
End With
Sucesso!
Alex,
vou te passar um email de um colega seu de profissão, que fez um programa fantático de controle de inquéritos. Quem sabe
ele te forneça o aplicativo ou te forneça dicas de construção.
Sucesso!
Marcelo e Norberto,
Sucesso!
Avelino,
Me desculpe a falta de conhecimento, mas, como o usuário final definiria as configurações que deseja para imprimir o relatório.
Por exemplo: Margem Esquerda = 2,5 cm; Margem Direita = 2,5 cm; Orientação = Retrato e etc...?
De qualquer forma fiquei muito empolgado com mas esse excelente exemplo.
11 of 12 22/06/2020 10:46
Docmd.OpenReport Turbinado - Alteração de margens, papel, ... https://www.usandoaccess.com.br/tutoriais/openreport_alteracoes-marge...
Mestre Avelino fiz um banco utilizando o maestro no que tange cadastro de ocorrencia policial, como sou oficial de policia vai
quebrar um galho aqui no interior da bahia, mas ta com muitos defeitos queria saber quanto vc cobra para otimizar o banco de
dados e como envia-lo para vc dá uma olhadinha.
Quanta possibilidade de programação o Access tem! Ainda mais quando o VBA está em mãos tão profissionais quanto as do
Avelino. Parabéns!!
Nome:
Comentário:
comentar
12 of 12 22/06/2020 10:46