... Assinatura do site por 3 anos + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$182,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Referência a um campo do subformulário

Usuário Dico:

Mestre Avelino,

pretendo que a propriedade visível de alguns controles assuma o valor "true", se um determinado campo de um subformulário estiver vazio (IsNull ?).  O subformulário está com as propriedades de inclusão e exclusão de registro desabilitadas, e os dados são limitados por dois campos data, de tal forma que hoje pode aparecer um registro neste subformulário e depois de  passada a data registrada no campo "dt_início", não vai aparecer mais nenhum registro.  Neste momento, o sistema deve permitir que se inclua novo registro para data futura.  Então, sempre terei, no máximo, um registro neste subformulário.

Usei o código abaixo com a MsgBox para servir de teste, mas o sistema exibe continuamente a mensagem e sempre torna o botão visível.

Private Sub Form_Load()
On Error Resume Next
If IsNull([Formulários]![Frm_Pessoas_Edição_Cobrança]![Frm_Pessoas_Edição_Cobrança_Futuras_subform]![Cód_Cobrança]) Then
    MsgBox "Informe os critérios de seleção nos campos próprios!", vbInformation, "Sociedade Harmonia Jaguarão"
    Me!btAtualizar.visible = True
    Me!Combo_Cobrança.SetFocus
    Exit Sub
End If
End Sub

A parte em vermelho é o nome do campo, usando a construção como eu já utilizei como critério de uma consulta-filtro de um formulário de um outro sistema.

Abraço.

Suporte:

Dico, desabilite temporariamente a linha "On Error Resume Next" para  você saber se acusa erro no código.

Se você está no formulário principal, pode substituir o Forms![Frm_Pessoas_Edição_Cobrança] pelo ME!

Private Sub Form_Load()
'On Error Resume Next
If IsNull(me![Frm_Pessoas_Edição_Cobrança_Futuras_subform]![Cód_Cobrança]) Then
    MsgBox "Informe os critérios de seleção nos campos próprios!", vbInformation, "Sociedade Harmonia Jaguarão"
    Me!btAtualizar.visible = True
    Me!Combo_Cobrança.SetFocus
    Exit Sub
End If
End Sub

Leia este meu artigo, sobre referenciar objetos no Access.

Usuário Dico:

Avelino, boa noite.

Avançamos um pouco! Desabilitei a linha "On Error..." e não mudei muito a referência - o nome do controle subformulário é diferente do nome do formulário que está inserido. Também desabilitei a linha da MsgBox, que era um artifício para verificar o funcionamento do código. Então, ficou assim:

Private Sub Form_Load()
'On Error Resume Next
If IsNull(Me![Cobrança_Futura]![Cód_Cobrança]) Then
    Me!btAtualizar.visible = True
    Me!Combo_Cobrança.SetFocus
    Exit Sub
End If
End Sub

É possível afirmar que o código está funcionando, porque não deu erro, mas também não tornou o botão visível. Tenho uma suspeita sobre o que está errado: o subformulário, como falei antes, está montado para exibir nenhuma linha ou apenas uma linha com conteúdo.  Parece que a crítica do campo "Cód_Cobrança" não retorna Null, se não existe nenhuma linha no subformulário.  Assim como não retorna Null, se existe uma linha com conteúdo no campo criticado.

Também experimentei inverter a função (passei para Not IsNull) e trocar por IsEmpty, mas continuou não funcionando.

Suporte:

Dico, então veja se com a contagem de registros do subForm funciona. Exemplo:

Private Sub Form_Load()
'On Error Resume Next
If Me![Cobrança_Futura].Form.RecordsetClone.RecordCount = 0 Then
    Me!btAtualizar.visible = True
    Me!Combo_Cobrança.SetFocus
    Exit Sub
End If
End Sub

Usuário Dico:

Tchê, como é que a Microsoft ainda não te levou para o vale do silício?

O código funcionou com a alteração proposta.

Obrigado

 


 

 


Não há comentário

Envie seu comentário: