... Pague apenas R$67,00 uma única vez e tenha acesso por 1 ano aos vídeos e arquivos exemplos do site ...

Clique aqui e obtenha mais detalhes.


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

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 para uma determinada impressora: ColorMode, Cópias, Frente e Verso, Orientação, PaperBin, Tamanho de papel e PrintQuality
Podemos especificar como o Access deve formatar a aparência dos dados em páginas impressas: MargemEsquerda, MargemDireita, MargemSuperior, BottomMargin, ColumnSpacing, RowSpacing, DataOnly, DefaultSize, ItemLayout, ItemsAcross, ItemSizeHeight e ItemSizeWidth
Podemos retornar informações do sistema sobre determinada impressora: DeviceName, DriverName e Port


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

Este conjunto de variáveis criadas dentro desta chave Type é passado para uma variável global (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.

Lista de variáveis do tipo Type

 

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:

Chamando função pela macro

 

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:

Lista coleção Printer

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:

Lista das impressoras

 

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

Utilizando a função na prática

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.

Formulário setPrinter

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

Bom estudo!


 

 


36 comentários

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

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!

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.

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!

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

Marcelo e Norberto,

fico muito grato pelos comentários!

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

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

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!

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

Carlos   28/03/2013 19:22:41

Boa noite
Voce tem este exemplo em access 2000

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!

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

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

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.

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

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!

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

Cleber,

qual formato de papel está usando ? Verifique se a impressora aceita formato de papel definido pelo usuário.

Sucesso!

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!

Hugo   24/09/2013 06:41:33

Boas,

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

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?

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.

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.

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

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

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

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

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

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!

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 .

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

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 .

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


Envie seu comentário: