Referenciar objetos Forms e Reports e às suas propriedades
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito, através do Paypal.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Veremos como o Access usa a sintaxe especializada do VBA para se referir aos controles, propriedades e métodos de formulários e relatórios. Até os programadores mais experientes costumam tropeçar em algumas destas formas de escrita. Portanto fique bem atento aos detalhes que serão aqui apresentados!
Coleções Forms e Reports
O Access usa as coleções Forms e Reports para identificar os objetos que desejamos nos referir.
Exemplos para se referir a um objeto formulário e a um objeto relatório:
forms!NomeDoFormulário reports!NomeDoRelatório
Observe que é usado o operador bang (!) para separar o nome da coleção (forms/reports) do nome de um objeto da coleção (NomeDoFormulário/NomeDoRelatório).
Cuidado com os nomes de formulários e relatórios que incluem espaços, pois nestes casos é necessário o uso de colchetes ([...]).
forms![Nome do Formulário] reports![Nome do Relatório]
Procure utilizar nomes sem espaços. Exemplos de nomes para os objetos:
frmContaCorrente, rltHorasExtras, tblItensPedidos, qryResumoTrimestre, ...
Uma outra forma de escrita que nos permite um grau de flexibilidade na definição dos nomes dos objetos, é o de fazer uso de parênteses.
forms("Nome do formulário") reports("Nome do Relatório")
A flexibilidade vem do fato de podermos utilizar uma variável ou um argumento de uma função para indicar o nome do objeto.
forms(NomeDeUmaVariável) reports(NomeDeUmArgumentoDeUmaFunção)
Veja um exemplo prático, no uso de parênteses, na função fncImprimir() deste artigo.
Referenciando os controles
Podemos usar o ponto(.) ou o bang(!) para fazer referência aos controles. Eu prefiro o bang(!), deixando o ponto para referenciar propriedades e métodos.
forms!NomeDoFormulário!NomeDoControle reports!NomeDoRelatório!NomeDoControle
Vale ressaltar que para o caso dos nomes que incluem espaços, não podemos esquecer de usar os colchetes([...]).
forms![Nome do Formulário]![Nome do Controle] reports![Nome do Relatório]![Nome do Controle]
Outra forma de referenciar os controles é usar os parênteses, que permitem também fazer uso de variável ou argumento de uma função.
forms("Nome do formulário")!(NomeDeUmaVariável ou NomeDeUmArgumento) Reports("Nome do relatório")!(NomeDeUmaVariável ou NomeDeUmArgumento)
Veja neste artigo sobre bingo, o uso de variável para indicar o nome do controle.
Uso do Me
Quando estivermos programando no módulo VBA do formulário ou do relatório, podemos reduzir a sintaxe com o auto-identificador Me
No módulo VBA do formulário Me é o mesmo que forms!NomeDoFormulário No módulo VBA do relatório Me é o mesmo que reports!NomeDoRelatório
Veja como fica ao referenciarmos um controle, usando o Me:
me!NomeDoControle
Para nome de controle contendo espaços: me![nome do controle] usando os parênteses. me!("Nome do controle")
Podemos omitir o bang(!) ao usarmos o parênteses
me("Nome do controle")
Referenciando propriedades e métodos
Usamos o ponto(.) para referenciarmos propriedades ou métodos de um controle ou de um objeto(forms/reports).
Observe como fica a sintaxe, alterando a propriedade visible de um controle:
forms!NomeDoFormulário!NomeDoControle.visible = false reports!NomeDoRelatório!NomeDoControle.visible = false
Estando no módulo VBA de um formulário ou de um relatório, use o ME
me!NomeDoControle.visible = false me!NomeDoControle.visible = false Usando o método requery, do formulário. me.requery
Referenciando um subformulário (a mesma regra se aplica para subrelatório)
A chave para entender esta sintaxe é observar que o subformulário está encapsulado ao CONTROLE SUBFORMULÁRIO (caixa que recebe o subformulário), do formulário principal.
O CONTROLE SUBFORMULÁRIO possui a propriedade FORM que nos permite ter acesso aos controles, propriedades e métodos do subformulário.
Forms!nomeDoFormulárioPrincipal!NomeDoControleSubformulário.FORM!NomeDoControleSub
Na referência ao controle, podemos omitir da sintaxe, a propriedade FORM, ficando com uma escrita mais enxuta. Veja:
Forms!nomeDoFormulárioPrincipal!NomeDoControleSubformulário!NomeDoControleSub
Quando formos referenciar uma propriedade ou método do subformulário, deveremos manter a propriedade FORM na sintaxe.
Forms!nomeDoFormulárioPrincipal!NomeDoControleSubformulário.FORM.Recalc
Muita atenção para não cair numa pegadinha! Observe que indicamos na sintaxe o nome do CONTROLE SUBFORMULÁRIO (parte em vermelho) e não o nome do subformulário.
Veja na imagem abaixo, a lista de propriedades de um CONTROLE SUBFORMULÁRIO. Observe as propriedades Nome e Objeto de Origem. A propriedade Objeto de origem aponta para o subformulário (sfrmItensPedidos) que será encapsulado. Porém, é a propriedade Nome que é usada na sintaxe, que neste exemplo, foi configurado com o nome Amizade.
Conclusão: neste exemplo, a sintaxe para chegar a um controle do subformulário sfrmItensPedidos é:
Forms!NomeDoFormulárioPrincipal!AMIZADE!NomeDoControleSub
Na prática, procuraremos manter o nome do CONTROLE SUBFORMULÁRIO igual ao nome do subformulário.
Se estivermos no módulo VBA do formulário principal, poderemos reduzir a escrita para:
me!AMIZADE!NomeDoControleSub
Referenciando um controle do formulário principal, a partir de um subformulário (a mesma regra se aplica aos relatórios)
Se estivermos no módulo VBA do subformulário, bastará usarmos a propriedade PARENT para termos acesso aos controles, propriedades e métodos do formulário principal. Exemplo:
Parent!NomeDoControle
Se o controle possuir espaços
parent![nome do controle]
Ou usando o parênteses
parent!("nome do controle")
Podemos também acessar propriedades e métodos dos controles, do formulário principal. Exemplo: usando a propriedade visible de um controle.
parent!NomeDoControle.visible = false
Usando a sintaxe em consultas, macros e em lista de propriedades
Isso mesmo! Podemos utilizar a sintaxe fora do ambiente VBA. Para estes casos, devemos utilizar a sintaxe completa.
Veja na imagem abaixo, a sintaxe sendo utilizada na linha de critérios da consulta:
O valor do campo Material do formulário é utilizado na consulta para realizar a filtragem. Só funciona com o formulário aberto.
Na imagem abaixo, observamos o campo de um subformulário recebendo o valor de um campo do formulário principal. Sintaxe utilizada diretamente pela lista de propriedades do campo.
Podemos também utilizar o parent na lista de propriedades e assim obtermos uma escrita mais reduzida.
Fonte do Controle |=parent!DataEntrega
Quadros resumo
Segue, abaixo, uma lista resumo que retrata as formas de sintaxe possíveis.
Quadro 1
Se está no VBA do formulário principal | |
Apontando para o RecordSource do | |
Formulário Principal | Me.RecordSource |
Subformulário 1 | Me!NomeControleSub1.form.RecordSource |
Subformulário 2 |
Me!NomeControleSub1!NomeControleSub2.Form.RecordSource |
Apontando para um Controle do | |
Formulário Principal | Me!NomeControle |
Subformulário 1 | Me!NomeControleSub!NomeControle |
Subformulário 2 |
Me!NomeControleSub1!NomeControleSub2!NomeControle |
SourceObject de um controle sub | |
Formulário Principal | N/A |
Subformulário 1 | Me!NomeControleSub1.SourceObject |
Subformulário 2 | Me!NomeControleSub1!NomeControleSub2.SourceObject |
Quadro 2
Se está no VBA do SubFormulário 1 | |
Apontando para o RecordSource do | |
Formulário Principal | Parent.RecordSource |
SubFormulário 1 | Me.RecordSource |
SubFormulário 2 | Me!NomeControleSub2.Form.RecordSource |
Apontando para um Controle do | |
Formulário Principal | Parent!NomeControle |
SubFormulário 1 | Me!NomeControle |
SubFormulário 2 | Me!NomeControleSub2!NomeControle |
SourceObject de um controle sub | |
Formulário Principal | N/A |
SubFormulário 1 | N/A |
SubFormulário 2 | Me!NomeControleSub2.SourceObject |
Quadro 3
Se está no VBA do subformulário 2 | |
Apontando para o RecordSource do | |
Formulário Principal | Parent.Parent.RecordSource |
SubFormulário 1 | Parent.RecordSource |
SubFormulário 2 | Me.RecordSource |
Apontando para um Controle do | |
Formulário Principal | Parent.Parent!NomeControle |
Subformulário 1 | Parent!NomeControle |
SubFormulário 2 | Me!NomeControle |
SourceObject de um controle sub | |
Formulário Principal | N/A |
SubFormulário 1 | N/A |
SubFormulário 2 | N/A |
Quadro 4
Por fora do Formulário Principal | |
Apontando para o RecordSource do | |
Formulário Principal | Forms!FormPrincipal.RecordSource |
SubFormulário 1 | Forms!FormPrincipal!ControleSub1.Form.RecordSource |
SubFormulário 2 |
Forms!FormPrincipalControleSub1!ControleSub2.Form.RecordSource |
Apontando para um Controle do | |
Formulário Principal | Forms!FormPrincipal!NomeControle |
SubFormulário 1 | Forms!FormPrincipal!ControleSub1!NomeControle |
SubFormulário 2 |
Forms!FormPrincipal!ControleSub1!ControleSub2.Form!NomeControle |
SourceObject de um controle sub | |
Formulário Principal | N/A |
SubFormulário 1 | Forms!FormPrincipal!ControleSub1.SourceObject |
SubFormulário 2 |
Forms!FormPrincipal!ControleSub1!ControleSub2.SourceObject |
Desafio
A título de treinamento, estou lhe desafiando a configurar os campos coloridos, conforme imagem abaixo.
Segue o arquivo exemplo. Configure os campos dos formulários para que sejam exibidos os valores, conforme figura acima.
Sucesso!
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 - Aprenda sobre filtragens
Vídeo - Segurança máxima, usando o OPEN
Uma ajuda para quem está começando um negócio ou um projeto
Integrando o Access com Servidor MySQL - Introdução
Desabilitando a faixa(ribbon) superior do Access
Vídeo - Programação de relatórios - Parte 1
Como carregar o seu menu sem que ele vá para lista de suplementos
Vídeo - Criando Ribbons parte 1 - Conhecendo a estrutura Xml
49 comentários Aldir 26/11/2023 05:01:39 Bom dia! muito obrigado. Preciso pegar para o Relatório RelFrota2, o campo Txt_Ano ou o Combox2 do formulário Menu. A Query usada no Relatório. SELECT Frota.chassis, Frota.carroceria, Frota.modelocarroceria, Frota.ano, Frota.qtd, Frota.tipoonibus FROM Frota GROUP BY Frota.chassis, Frota.carroceria, Frota.modelocarroceria, Frota.ano, Frota.qtd, Frota.tipoonibus ORDER BY Frota.ano DESC; Como faço? Tem como me ajudar? Obrigado!!! jenaldo 26/08/2023 05:13:21 Avelino. FUNCIONOU! testei como vc passou e foi sucesso. grato mais uma vez. jenaldo 26/08/2023 04:59:25 Avelino, já agradeço o pronto atendimento. Segue explicações: estou no form principal. tenho um controle de guias com 5 paginas. cada página com um subformulario. preciso mudar o recordsource de cada subformulario com base num campo do form principal. tentei várias combinações e dá erro. Avelino Sampaio 26/08/2023 03:43:00 Jenaldo, o foco está aonde ? Por exemplo, testei aqui em um botão no formulário principal: Me.sfrmTeste.Form.NomeDocampo Observe que nem precisou indicar o nome da guia, em que se encontra o subformulário. Sucesso! jenaldo 25/08/2023 15:12:18 estou tentando atualizar um subformulário dentro de uma guia específica dentro de um formulario e não estou conseguindo achar a forma certa. Wesley 21/12/2022 20:16:17 Pessoal, tenho um formulário principal e três subformulários aninhados dentro dele. Os subformulários estão aninhados em cascata um dentro do outro e no modo folha de dados. Neste caso, é possível referenciar? Alexandre 15/08/2022 17:27:37 Sr. Avelino Help. Não estou conseguindo criar um macro para ir para o registro atual. -Tenho uma formuláriopai a onde eu faço o cadastro e nele coloquei um sub_formulário a onde mostra todos os Itens cadastrados. -Neste sub-formulário mostra todos itens cadastrados, coloquei o código como hiperlink e estou tentando criar uma macro para quando clicar no código me mostra-se no formuláriopai este item selecionado. Exemplo: Ação - IrParaRegistro Argumento - Formulário - Nome do Objeto - Registro (opção irpara ) Aqui que eu não consegui definir o deslocamento, pois eu preciso que vá para o mesmo registro no Formulário. ou Tem uma linha de código VBA para está rotina? Alguém pode me ajudar? Obrigado. IDENILTON 06/05/2022 16:29:30 Ola pessoal! Procurei bastante no forum e encontrei poucos casos parecidos, mas não exatamente como eu que preciso, Seguinte: Tenho um formulário chamado FormAcertoForn, baseado na tabela Tbl_AcertoFornecedor contendo os campo CodAcerto, Fornecedor, Destino e Obs. E 2 subformulários que ambos têm o campos CodAcertoForn. Um subformulário chamado FormAcertoFornParc baseado na tabela Tbl_ComprasParc, vinculado com o fornecedor do formulário principal e nesse subformulário só aparece as parcelas em aberto referente ao fornecedor selecionado no form principal e soma somente as parcelas marcadas pelo campo MARCAR(tipo sim/não). E outro subformulário chamado FormAcertoFornCheq baseado na tabela Tbl_Cheques e que não está vinculado ao formulário principal. No formulário FormAcertoForn tenho um filtro que pesquisa registros do subformulário FormAcertoFornCheq pelo campo DtVencimento e totaliza apenas os registros marcados pelo campo MARCAR(tipo sim/não) O que eu preciso é o seguinte: Quando clicar no botão GRAVAR, o valor do campo CodAcerto do form principal seja inserido em todos os registros marcados no campo MARCAR(tipo sim/não) no campo CodAcertoForn que existe nos dois subformulários. Resumindo, preciso que o CodAcerto atual do form principal seja inserido no campo CodAcertoForn dos dois subformulários, mas somente nos registros que estão com o campos MARCAR ativado. Desde já agradeço muito a todos pela atenção. Francisco Regio 07/02/2022 20:32:19 Olá estou com um problema, estou desenvolvendo um sistema de impressão de apostilas em pdf, preciso imprimir diversos arquivos direto nas impressoras, porém, preciso configurar a orientação da folha (retrato ou paisagem) por cada arquivo enviado, essa informação está armazenada, mas não sei como alterar os parâmetros da impressora e direcionar cada arquivo para uma impressora em questão pois conforme o arquivo será impresso em duas HP e se for no formato paisagem será impresso na Brother. Já utilizei o Application.printer e seus metodos mas não funcionaram, estou enviando pelo comando Shellexecute com as devidas declarações no começo do módulo. Se puderem me ajudar ?. Claudio Almeida 20/01/2022 18:56:22 Quero aqui deixar meu profundo agradecimento, pois essa aula me ajudou muito. O tempo passa e a qualidade dos ensinamentos continua a mesma, perfeita! Deus abençoe e lhe dê a cada dia mais sabedoria!! Jonhnny 23/12/2021 13:27:29 Sr. Avelino Iniciei um projeto de cadastro de folhas com informações que servem como treinamento para aqueles que a lêem. Cada uma dessas folhas possuem sua própria numeração para que possam ser diferenciadas. Nesse projeto, qualquer pessoa pode usá-lo, e abrir qualquer uma dessas folhas, mas, após visualiza-las devem cadastrar-se como se tivessem sido treinados. Até ai eu consegui manipular bem o access. Mas, agora vem a minha dúvida. No momento em que essa pessoa se cadastra eu preciso que ao lado do item que ele visualizou conste a quantidade de pessoas que ja foram treinadas, e que quando ele se cadastrar, essa numeração some +1. Creio que isso deva ser feito através do VBA (eu acho), teria como me ajudar? Se não tiver entendido direito o que eu quis dizer, me comunique que serei mais esclarecedor. Adilson 20/12/2021 15:27:19 Prezado Avelino Sou iniciante no access VBA, porém, estou fazendo um banco de dados para gerenciar a minha conta corrente, eu fiz a estrutura dele conforme a minha organização,porém, eu gostaria que no formulário de cadastro aparece apenas os créditos e débitos referente ao mês atual, já tenho neste formulário um subformulário que me mostra os gastos diários, desde já agradeço a sua presteza Amilton 08/12/2021 09:33:50 bom dia Avelino como faço para executar uma função que esta em um outro form exemplo : tenho um form de 01-vendas e form 02-finalizar ao vender abro o 01- vendas e para finalizar abro o 02-finalizar gostaria que ao fechar o 02-finalizar execute a impressão do cupom no que01-vendas e uso a tecla de função f6 para executar no 01-vendas Att Amilton Fábio Santana 14/11/2021 20:10:16 Mestre Avelino, Estou com uma dúvida. Tenho um form principal e dois subforms aninhados e não vinculados entre si (sub1 e sub 2). Como referencio dois campos dos dois subforms? A minha proposta é quando o campo digitado do sub2 for igual ao do sub1, este mudará de cor e aparecerá um alerta. Aguardo suas orientações. Abraço. Flecha 12/11/2021 13:36:38 Boa Avelino, Consegui resolver o desafio, mas confesso que apanhei bastante! Valeu! Avelino Sampaio 30/10/2021 08:17:45 Marcelo, abra o VBA > no menu Ferramentas > Referências > marque "Microsoft Office 12.0 Object Library" Se estiver usando o Access 2010, use o "Microsoft Office 14.0 Object Library" Sucesso! Marcelo dos Santos 29/10/2021 15:03:07 Boa tarde Avelino Mais uma vez peço socorro Bom Mestre estou como esse código abaixo da erro de excução tipo de variavel definido pelo usuario não foi defindo na linha abaixo Dim r As FileDialog Set r = Application.FileDialog(msoFileDialogFilePicker) r.InitialFileName = txtRelatorio DoCmd.OutputTo acReport, rtl, acFormatPDF, r.SelectedItems(1), 0, , , acExportQualityScreen MsgBox "Arquivo gerado com sucesso!", vbExclamation + vbOKOnly, "Gerar PDF" Set r = Nothing Atenciosamente Avelino Sampaio 28/10/2021 07:03:15 Marcelo, tente assim: DoCmd.OpenReport "RelNiverTexto", acViewPreview,, "Day(NASC)>=" & day(Forms!FrmRelNiver!Datainicio) Sucesso! Marcelo dos Santos 27/10/2021 18:52:36 Boa tarde Avelino Estou com seguinte duvida ao abrir o Relario estou querendo fazer o filtro abaixo quando NASC é campo da tabela quando abre fica pedindo pra informar valor do campo nasc DoCmd.OpenReport "RelNiverTexto", acViewPreview, "", "[Day(NASC)]>=[Forms]![FrmRelNiver]![Day(Datainicio)] Antecipo agradecimentos Marcelo dos Santos 26/10/2021 19:17:54 Boa tarde Valeu ai pela dica Avelino era esse comando mesmo q eu estava precisando Abraços Obrigado Avelino Sampaio 22/10/2021 17:12:00 Marcos Elder, Pode utilizar o ponto sem problema algum. Assim vc continua se valendo do IntelliSense. Usar o "!" para referenciar os controles e "." para referenciar as propreidades e métodos, no meu entender, fica mais fácil para o novato compreender a montagem da sintaxe. Sucesso! Avelino Sampaio 22/10/2021 16:57:10 Marcelo, não entendi muito bem o que vc deseja. Não ficou claro qual o objetivo. Se o relatório aberto for ó unico, pode usar assim: reports(0).Name Se não for isso, forneça mais detalhes do que deseja fazer. Sucesso! Marcelo dos Santos 22/10/2021 16:42:14 Boa Tarde Avelino estou com uma duvida como faço pra chamar o nome do Relatorio atual o formulario é Name e pra o relatório qual o comando? Antecipadamente agradeço pela atenção Marcos Elder Corrêa 20/10/2021 18:05:23 Ficou excelente e clareou o mal ( "." ou "!") que me assombrava na hora de referenciá-los. Como você prefere o "!" e você é o mestre, então ajustei todos meus trabalhos dessa forma também. Quando der exponha porque prefere o "!". Pena que até certo ponto da digitação perde-se o IntelliSense. Parabéns mais uma vez! Avelino Sampaio 17/10/2021 08:42:15 Pessoal, fico muito feliz que a missão deste site esteja sendo cumprida. Grato pela participação de vocês. Sucesso! José Fábio da Silva 16/10/2021 22:05:06 Meus Parabéns Avelino, sem dúvida é um material muito rico em e de fácil didática. Muito obrigado por compartilhar conosco dos seus conhecimentos! Elizeu Farias 15/10/2021 10:47:55 Parabéns Avelino por acrescer mais esta dica á nosso conhecimento. Christian Voillot Cruz 15/10/2021 09:33:50 Desculpe-me a minha ignorância Avelino, mas a referencia a subformulário foi esclarecedora. Já tinha até desistido de referenciar subformulário via VBA, só usava a macro. Tá explicado! marcelo dos Santos 13/10/2021 12:22:53 Grande Avelino Boa Tarde Estou com a seguinte duvida tenho um Formulario pradrão no meu projeto pra impressão onde tem 03 objetos Imprir ( Imprimi direto na impressora) Gerar PDF (Gera o Arquivo em PDF) e Enviar E-Mail (Gera o Arquivo e abre o OultLook ) Duvida Como Faço para Chamar o Report Atual para gerar o Arquivo pois esse mesmo formulario vai ser usado em todo os Relatorio do Projeto. Alcir Ermel 12/10/2021 15:35:19 Grande Avelino. Muito obrigado por mais esta iniciativa. Sempre aprimorando e transmitindo seus conhecimentos. Este tutorial sanou algumas duvidas que tinha a respeito do VBA. Sempre quis saber significados de alguns termos utilizados e como aplica-los corretamente. Forte abraço Ednei Rodrigues de Oliveira 12/10/2021 12:17:34 Parabéns Avelino! Obrigado por mais uma vez compartilhar de seus conhecimentos com aqueles que estão iniciando nessa jornada como eu! Sempre apanhei muito com os subformulários e você conseguiu organizar as sintaxes em minha cabeça! Obrigado! Luiz Carlos 12/10/2021 08:19:52 Sempre tenho acompanhado as publicações deste Site! sou iniciante, as matérias aqui postadas tem sido fundamentais para meu desenvolvimento, sempre utilizei bem a sintaxe de referência a objetos, entretanto este artigo me mostrou meios mais eficazes e práticos que eu ainda não conhecia. Parabéns Avelino. Eduardo Sousa 11/10/2021 19:37:21 Mais um belissimo tutorial. Muito obrigado Avelino por esta grande ajuda. Leandro Barbosa 11/10/2021 16:49:08 Mais um tutorial com o selo de qualidade "®Avelino Sampaio", parabéns!!! claudio a guzenski 11/10/2021 16:02:18 boa tarde, muito bom....mesmo... Avelino, pergunta, tens alguma dica sobre " do access para word", estou fazendo um sistema e gero um relatório e preciso colocar os dados que estarão neste REL no word. Que possue várias páginas e os campos deste relatório deverá entrar em determinados lugares. Tens algum exemplo ou cobrarias para dar esta ajuda....grato, aguardo... Welson Zeferino de Oliveira junior 11/10/2021 15:40:28 Não há palavras para expressar de maneira real o quanto é importante este site para as pessoas que desejam adquirir conhecimento dessa ferramenta da Microsoft. Com sua forma de ensinar, apreendemos de maneira simples e correta a utilizar da melhor forma o Access. Parabéns e obrigado! Welson Junior http://dicadecursos.com James Resplandes 11/10/2021 15:16:00 Mais uma vez você nos envolve com seus belíssimos e instrutivos ensinamentos. Muito obrigado Avelino. Marcelo David 11/10/2021 10:56:15 Muito Avelino, você realmente sabe ensinar! Ótimo tutorial! Apesar de usar pouco subform (uso mais o ListView), as vezes que uso, ocasionalmente erro a sintaxe... Com este tuto, vou "decorar" definitivamente a escrita! Johnny Cardoso 11/10/2021 10:07:34 Tenho bastante conhecimento de sintaxes entre subformulários e subrelatórios. Igualmente o auto-identificador Me, porém nunca fiz uso deste em sintaxes entre subformulários e subrelatórios. O artigo acendeu uma luz pra exterminar códigos extensos. Abração Gilberto Mendes 11/10/2021 09:53:02 Parabéns por mais um excelente artigo! Os iniciantes sempre se confundem com estas regras. Outro tópico importante e mais recente é o uso do tempvars. Recomendo a todos pesquisar o assunto aqui no site. Um abraço! Gilberto Mendes Werlesson 28/08/2021 14:22:26 Prezado Avelino, Como obtenho o nome do procedimento ou função que está em execução? A intenção é gerar uma mensagem, em caso de erro, que já me diga em qual procedimento/função houve a ocorrência. Poderia simplesmente digitar o nome do procedimento/função e concatenar com uma "err.description", mas, isso me obrigaria e digitar o nome em todas as estrutura de interceptação de erro. Desde já agradeço pela atenção. Igor Bevilaqua 16/08/2021 05:52:35 Parabéns pelos ensinamentos, esse como tantos outros, é por causa do compartilhamento do saber que o mundo caminha a passos largos e a vida sempre se renova. O que seria do mundo sem os mestres...??? Protta 08/06/2021 12:24:42 Muito boa as dicas, embora básicas mas muito importantes, parabéns. Priscila 21/05/2021 09:20:03 Avelino, Obrigada pela dica Fiz extamente isso montei três relatórios 1 Func_Admitidos 2 Func_Demitidos 3 Mov_Funcionários (relatório em branco e coloquei os dois primeiros como sub) Funciona, só que agora fiquei na duvida, o terceiro relatorio engloba todas as propriedades dos outros dois relatorios, Ex: Na hora em que coloco as datas para realizar a consulta das movimentações tenho que fazer isso duas vezes (acredito que seja pelo fato de ter dois relatorios em um só) As configurações mais simples também (Cabeçalho, ropapé, etc) tudo aparece duplicado. Mas se eu altero essas configurações no Relatório Mov_Funcionários, eles tbm alteram os relatorios principais. Como posso montar três relatórios distintos sem alterar as suas configurações principais.. Avelino Sampaio 21/05/2021 07:35:43 Priscila, o correto é vc montar relatórios e pelo que vc está querendo como resultado, sugiro a montagem de três relatórios (um somente de Admitidos, o outro de demitidos e terceiro englobando os dois). Sucesso na montagem! Priscila Lima 20/05/2021 08:57:38 Avelino, Bom Dia Estou com uma duvida, criei um formulário (Func_Admitidos) e depois coloquei dentro deste formulário um sub_formulário (Func_Demitidos) para que pudesse ter os dois relatórios em um só, mas quando tento imprimir sai apenas o formulário principal e não os dois...., gostaria de saber como posso estar relacionando esses formulários para que na hora da impressão saia os dois e se possivel algum tipo de filtro ou comando que eu possa colocar que permita a escolha entre o formulário e o sub_formulário e ambos.. Avelino Sampaio 27/01/2021 05:56:19 Hephraim, sim, tem. Primeiro tem que passar o procedimento do subformulário para PUBLIC no lugar do PRIVATE. Depois chame o procedimento ou a função desta forma: Form_NomeSubFormulário.Salvar_Click Form_NomeSubFormulário.NomeDaFunção Sucesso! Hephraim BF 25/01/2021 11:32:34 Muito bom! Avelino, tem como fazer referência a um procedimento de um subformulário? Luiz Claudio de Oliveira Matta 16/11/2020 04:57:40 Avelino, consegui entender bem e cumprir o desafio desse tutorial "Referenciar objetos Forms e Reports e às suas propriedades", muito boa sua explicação, no entanto tenho uma solução muito parecida que não funciona a diferença principal é que não são caixas não vinculadas e sim combos vinculadas e esta tudo dentro de um Controle de Guia. Onde posso está errando? |