Você está na página 1de 12

Docmd.OpenReport Turbinado - Alteração de margens, papel, ... https://www.usandoaccess.com.br/tutoriais/openreport_alteracoes-marge...

Usando Access
Home Vídeos Tutoriais Dicas Ribbons Suporte Downloads Contato Artigo

Sair do login Usuário: carlos josé

Docmd.OpenReport Turbinado - Alterações das margens, papel, ...

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.

Podemos especificar configurações ColorMode, Cópias, Frente e Verso, Orientação, PaperBin,


para uma determinada impressora: Tamanho de papel e PrintQuality
MargemEsquerda, MargemDireita, MargemSuperior,
Podemos especificar como o Access
BottomMargin, ColumnSpacing, RowSpacing, DataOnly,
deve formatar a aparência dos dados
DefaultSize, ItemLayout, ItemsAcross, ItemSizeHeight e
em páginas impressas:
ItemSizeWidth
Podemos retornar informações do
sistema sobre determinada DeviceName, DriverName e Port
impressora:

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!

Construindo uma padronização.

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

(public), tornando possível o acesso em qualquer parte do projeto.

Public setPrinter As typPrinter

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

Observe que ao inserir o ponto, todas as variáveis são listadas.

O próximo passo foi o de criar uma função para preencher as variáveis com os valores que determinei
como padrão.

Public Function fncPadraoPrinter()


'Valores em centímetros
setPrinter.FormatoPapel = acPRPSA4 'Formato A4
setPrinter.MargemDireita = 1.5
setPrinter.margemEsquerda = 1.5
setPrinter.MargemSuperior = 1.5
setPrinter.MargemInferior = 1.5
setPrinter.NumeroDeCopias = 1
setPrinter.Orientacao = acPRORPortrait 'Orientação Retrato
setPrinter.AlturaPapel = 29.7
setPrinter.LarguraPapel = 21
End Function

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.

Veja na figura, o comando ExecutarCódigo chamando pela função fncPadraoPrinter:

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

A função poderia também ser chamada através de um formulário de navegação ou de um formulário de


login, ao invés da macro AutoExec.

Técnicas para alterar as configurações de um relatório:

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.

Docmd.OpenReport "NomeDoRelatório", acViewDesign

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.

Docmd.OpenReport "NomeDoRelatório", acViewPreview ,,,acHidden

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:

Vamos supor que precisemos alterar as margens direita e esquerda:

reports("NomeRelatório").printer.LeftMargin = 2 * 567 'margem esquerda com 2cm


reports("NomeRelatório").printer.RightMargin = 1 * 567 'margem direita com 1cm

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.

Docmd.OpenReport "NomeDoRelatório", acViewPreview 'Visalizar Impressão

ou

Docmd.OpenReport "NomeDoRelatório", acViewNormal 'Imprimir direto

Usuário escolhendo a impressora:

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:

Private Sub Form_Load()


Dim objPrinter As Object
'Adicione nome das impressoras na ListBox
For Each objPrinter In Printers
Me!ListaImpressoras.AddItem objPrinter.DeviceName
Next
'Seleciona a impressora padrão do Windows
Me!ListaImpressoras.Value = Application.printer.DeviceName
End Sub

Observe na figura, o resultado do carregamento da ListBox:

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

Criado a função fncImprimir()

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.

Veja abaixo a função completa:

Public Function fncImprimir(NomeRelatorio As String, _


Optional ModoPreview As AcView = acViewPreview, Optional Filtro As String, _
Optional ModoJanela As AcWindowMode = acWindowNormal, _
Optional ModoZoom As vbZoom = 100, Optional Impressora As Variant = acDefault)

On Error GoTo TratarErro


Const tw = 566.8934 'corresponde a 1 centímetro no VBA
DoCmd.SetWarnings False

'Abre o relatório no modo Visualizar Impressão e oculto


DoCmd.OpenReport NomeRelatorio, acViewPreview, , Filtro, acHidden
With Reports(NomeRelatorio)
'----------------------------------
'Seleciona a impressora a ser usada
'----------------------------------
If Impressora = acDefault Then
'Impressora padrão
Set .printer = Application.Printers(.Application.printer.DeviceName)
Else
'impressora selecionada pelo usuário
Set .printer = Application.Printers(Impressora)
End If
'-------------------------------------
'Alterando as configurações de layout
'-------------------------------------
.printer.PaperSize = setPrinter.FormatoPapel
If setPrinter.FormatoPapel = acPRPSUser Then
.printer.DefaultSize = False
.printer.ItemSizeHeight = setPrinter.AlturaPapel * tw
.printer.ItemSizeWidth = setPrinter.LarguraPapel * tw
Else
.printer.DefaultSize = True
End If
.printer.Orientation = setPrinter.Orientacao
.printer.TopMargin = setPrinter.MargemSuperior * tw
.printer.LeftMargin = setPrinter.margemEsquerda * tw
.printer.RightMargin = setPrinter.MargemDireita * tw
.printer.BottomMargin = setPrinter.MargemInferior * tw
End With
'---------------------------------
'Libera o relatório para o usuário
'----------------------------------
If ModoPreview <> acViewNormal Then
DoCmd.OpenReport NomeRelatorio, ModoPreview, , Filtro
DoCmd.Maximize
Select Case ModoZoom
Case 50
DoCmd.RunCommand acCmdZoom50
Case 75
DoCmd.RunCommand acCmdZoom75
Case 100
DoCmd.RunCommand acCmdZoom100
Case Else
DoCmd.RunCommand acCmdZoom100
End Select
Else
DoCmd.OpenReport NomeRelatorio, acViewNormal, , Filtro
End If

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

Carregando um relatório no modo Visualizar Impressão. A função fncImprimir() aplicará os valores


padronizados da função fncPadraoPrinter(),

'Usará as configurações padrão, estabelecida na função fncPadraoPrinter()


Call fncImprimir("NomeDoRelatório", acViewPreview)

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

'A função também me permiti aplicar uma filtragem e alterar o zoom


Call fncImprimir("NomeDoRelatório", acViewPreview, "nome like 'ca*'", , Z75)

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:

'Imprimir na impressora selecionada da listbox


Call fncImprimir("NomeRealtório", acViewNormal, , , , Me!ListaImpressoras.ListIndex)

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.

Altere os valores da função fncPadraoPrinter() , conforme a sua necessidade de padronizaçã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...

Os dez artigos mais visitados

MontaRibbons v.7.0 - Assistente completo para criar ribbons no Access

Vídeo - Controle personalizado de Acesso de Usuários

Vídeo - Segurança máxima, usando o OPEN

Uma ajuda para quem está começando um negócio ou um projeto

Vídeo - Aprenda sobre filtragens

Adquira o kit UsandoAccess e aprenda em alta velocidade

Vídeo - Programação de relatórios - Parte 1

Desabilitando a faixa(ribbon) superior do Access

Integrando o Access com Servidor MySQL - Introdução

Como carregar o seu menu sem que ele vá para lista de suplementos

| Home | Vídeos | Tutoriais | Dicas | Ribbons | Suporte | Downloads | Contato | Artigo |

37 comentários

Edu Cav 07/06/2018 08:08:46

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 ?

Wellington Buglia Soares 25/02/2016 17:26:45

Senhores, boa tarde.


segue abaixo um comando para copiar para um outro formulario esta ok, porem quando dou o duplo click não consigo ao abrir
o formulario fechar o outro simultaneamente. Alguem poderia ajudar?

segue:
Private Sub Lista4_DblClick(Cancel As Integer)

DoCmd.OpenForm "FRM_AGENDA" 'ABRE FORMULARIO AGENDA


Form_FRM_AGENDA.FRM_SUB_AGENDA.SetFocus 'FOCA A TELA NO FORMULARIO SUB_AGENDA
Form_FRM_SUB_AGENDA.Recordset.AddNew ' PROCURA UMA NOVO CAMPO DE PREENCHIMENTO
Form_FRM_SUB_AGENDA.TXTCOD_CLIENTE.SetFocus ' FOCA NO CAMPO COD_CLIENTE
Form_FRM_SUB_AGENDA.TXTCOD_CLIENTE.Value = Form_FRM_PESQUISA_ANIMAL.Lista4.Column(0) ' O CAMPO DO FORM
SUB-AGENDA RECEBE VALOR DO FORMULARIO PESQUISA_ANIMAL COLUNA 0
Form_FRM_SUB_AGENDA.TXTCOD_ANIMAL.Value = Form_FRM_PESQUISA_ANIMAL.Lista4.Column(1) ' O CAMPO DO FORM
SUB-AGENDA RECEBE VALOR DO FORMULARIO PESQUISA_ANIMAL COLUNA 1
'================
Form_FRM_SUB_AGENDA.TXTANIMAL = DLookup("ANIMAL", "TAB_CAD_ANIMAL", "COD_ANIMAL=" &
Form_FRM_SUB_AGENDA.COD_ANIMAL)
Form_FRM_SUB_AGENDA.TXTRAÇA = DLookup("RAÇA", "TAB_CAD_ANIMAL", "COD_ANIMAL=" &
Form_FRM_SUB_AGENDA.COD_ANIMAL)
Form_FRM_SUB_AGENDA.TXTESPECIE = DLookup("ESPECIE", "TAB_CAD_ANIMAL", "COD_ANIMAL=" &
Form_FRM_SUB_AGENDA.COD_ANIMAL)
Form_FRM_SUB_AGENDA.TXTCONVENIO = DLookup("CONVENIO", "TAB_CAD_ANIMAL", "COD_ANIMAL=" &
Form_FRM_SUB_AGENDA.COD_ANIMAL)
'================
Form_FRM_SUB_AGENDA.TXTCLIENTE = DLookup("CLIENTE", "TAB_CAD_CLIENTE", "COD_CLIENTE=" &
Form_FRM_SUB_AGENDA.COD_CLIENTE)
Form_FRM_SUB_AGENDA.TXTTELEFONE = DLookup("TELEFONE", "TAB_CAD_CLIENTE", "COD_CLIENTE=" &
Form_FRM_SUB_AGENDA.COD_CLIENTE)
Form_FRM_SUB_AGENDA.TXTCELULAR = DLookup("CELULAR", "TAB_CAD_CLIENTE", "COD_CLIENTE=" &
Form_FRM_SUB_AGENDA.COD_CLIENTE)
Form_FRM_SUB_AGENDA.TXTCELULAR1 = DLookup("CELULAR1", "TAB_CAD_CLIENTE", "COD_CLIENTE=" &
Form_FRM_SUB_AGENDA.COD_CLIENTE)
DoCmd.Close acForm, Form_FRM_PESQUISA_ANIMAL

Bruno Gordino 02/04/2015 17:47:34

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

Sr. Avelino as minhas desculpas pelo comentário anterior.

A mensagem de erro pois estava a usar o exemplo sem 1º deixar correr a macro.

Coloquei o "=fncPadraoPrinter()" no "Load" do "Form" e ficou impecável.

Cumprimentos e até uma próxima.

Muito Obrigado .

Bruno Gordino 02/04/2015 16:16:29

Sr. Avelino muito obrigado por tudo o que me tem ensinado.

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

Isto só acontece no 1º clique pois na segunda tentativa já abre bem.

Consegue me ajudar a dar a volta a isto?

Muito Obrigado .

Avelino Sampaio 24/03/2014 06:19:04

Itamar,

essas impressoras vem com uma Dll própria. Vc não tem o manual desta ?

Bom, copie e cole o endereço abaixo no seu navegador e dê uma garimpada:

http://comunidade.itlab.com.br/eve/forums?a=search&reqWords=Bematech

Bom estudo!

Itamar Jorge da Silva 23/03/2014 13:31:35

Como faço para imprimir no papel 80x30 bobina impressora Bematech MP4200TH?

Avelino Sampaio 10/02/2014 10:38:46

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

wagnergilson@hotmail.com 10/02/2014 10:17:22

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.

Avelino Sampaio 10/02/2014 09:43:20

Wagner

Ao abrir o PDF anexo, está de acordo com o relatório ?


Qual é versão do seu Access ? 32 ou 64 bits ? Está atualizado com o pacote SP?
Para teste, experimente outro relatório simples e envie para o seu proprio email. Aguardo pelas respostas acima e por esse
teste.

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

wagnergilson@hotmail.com 10/02/2014 08:30:34

Bom dia meninos.


Tô tentando há vários dias enviar um relatório do access para um email e não dá certo. Uso o comando docmd, mas não tô
conseguindo. Como devo proceder? Estou usando o comando: DoCmd.SendObject acSendReport, "comunicação interna teste",
"pdf", "dtfiscalizacao@der.mg.gov.br", "dtfiscalizacao@der.mg.gov.br", , "Registro de ocorrência", "Segue o registro solicitado"
Abre o outlook e ao clicar em enviar, dá a mensagem de " o microsoft access parou de funcionar" e encerra a aplicação.

Avelino Sampaio 06/02/2014 11:38:10

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

Regis da Silva 06/02/2014 11:25:46

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.

Marcelo Arruda 19/12/2013 19:09:21

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.

Hugo 24/09/2013 06:52:58

Eu uso esse código só para fazer uma impressão rapida dos equipamentos

If MsgBox("Impressão da Ficha?", vbOKCancel + vbQuestion, "Confirmação") = vbOK Then


DoCmd.PrintOut acSelection
End If

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?

Hugo 24/09/2013 06:41:33

Boas,

Não dá para configurar a folha para horizontal em código?

Cleber 19/09/2013 10:45:57

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!

Avelino Sampaio 18/09/2013 07:18:09

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!

cleber 17/09/2013 11:07:21

Olá Prof. Avelino,


Obrigado. Sempre me surpreende com suas dicas!
No seu exemplo, incluí as linhas a seguir:
.LarguraPapel = 7.5
.AlturaPapel = 17.5
Porém, o papel não fica formatado nessas medidas que inclui. Onde será que estou errando?
Grato!

Nelson Braga 26/06/2013 10:09:16

Amigo,
Você é FANTÁSTICO.
O quanto eu ja tinha batido cabeça pra encontrar esses comandos.

Muito obrigado mesmo!!!

MARCIO MELO - RJ 16/05/2013 14:52:13

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.

Sou mais Brasil!

Forte abraço.

Thel 29/04/2013 09:55:42

Distraído digitei errado uma linha de comando:

Onde se lê:

DoCmd.PrintOut acPages, CurrentRecord, CurrentRecord, 1, Copias

Lê-se:

DoCmd.PrintOut acPages, CurrentRecord, CurrentRecord, 1

Obrigado!

Thel 28/04/2013 20:40:53

Prezados amigos,

Resolvi o meu problema e posto aqui a solução para ajudar outras pessoas:

1 - No evento AO CLICAR do botão IMPRIMIR digite este código:

Private Sub BotaoImprimir_Click()

' Prepara a impressão para LAYOUT PAISAGEM:


Forms("SeuFormulário").Printer.Orientation = acPRORLandscape

' Prepara a impressão para TIPO DE PAPEL A4:


Forms("SeuFormulário").Printer.PaperSize = acPRPSA4

' Manda imprimir somente o registro que está sendo visualizado no formulário:
DoCmd.PrintOut acPages, CurrentRecord, CurrentRecord, 1, Copias

' Macro criada para voltar ao formulário de consulta após a impressão,


' senão a tela de visualização do formulário fica escondida após a impressão e
' não aparece novamente.

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!

Thel 27/04/2013 12:59:28

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.

Avelino Sampaio 27/04/2013 06:51:20

Thel,

experimente a sequencia de código para o seu botão:

docmd.OpenForm "NomeFormulário",acPreview
forms("NomeFormulário").Printer.Orientation =acPRORLandscape
forms("NomeFormulário").Printer.PaperSize =acPRPSA4

Sucesso!

Thel 26/04/2013 19:29:03

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.

Avelino Sampaio 30/03/2013 08:09:29

Carlos,

copie e cole no seu navegador o endereço abaixo e garimpe o desejado:

http://comunidade.itlab.com.br/eve/forums?a=search&reqWords=margens+Access+2000

Sucesso!

Carlos 28/03/2013 19:22:41

Boa noite
Voce tem este exemplo em access 2000

MARCIO MELO - RJ 15/08/2012 15:59:51

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

Sou mais Brasil!

Parabéns, Forte abraço! mestre Avelino

Sidney Brito 03/06/2012 22:26:24

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!

Roni 31/03/2012 09:17:11

Avelino,

Muito obrigado pela dica!

Vou adaptar ao meu projeto. Mais uma vez, parabéns pelo excelente exemplo.

Muito mais sucesso pra você!

Avelino Sampaio 30/03/2012 16:43:36

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

Call fncImprimir("NomeDoRelatório", acViewPreview)

Sucesso!

Avelino Sampaio 30/03/2012 16:37:06

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!

Avelino Sampaio 30/03/2012 16:33:53

Marcelo e Norberto,

fico muito grato pelos comentários!

Sucesso!

Roni 30/03/2012 16:18:17

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...?

Ou não é essa a finalidade do código?

De qualquer forma fiquei muito empolgado com mas esse excelente exemplo.

Parabéns por mais esta grande obra!

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

Alex Gondim Lima 30/03/2012 12:59:23

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.

Norberto Rost 30/03/2012 12:02:32

Avelino, tu não vais acreditar:


Ontem eu estava estudando esta coleção no vba para um trabalho, e tive a ideia de criar um exemplo para o fórum Maximo.
Então pensei: vou sugerir pro Avelino criar um exemplo para o site dele, e agora de manhã vejo a tua newsletter no meu email.
Que coincidência!
Quanto ao tutorial, dispensa comentários, sendo da tua autoria.
Abraço!

Marcelo David 30/03/2012 09:57:47

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

Envie seu comentário:

Nome:

E-mail (não será exibido no comentário):

Comentário:

Digite o número cento e noventa e oito

comentar

© 1999 Pontocom Serviços Tecnológicos

12 of 12 22/06/2020 10:46

Você também pode gostar