MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


2 participantes

    [Resolvido]Referenciar diversos campos

    avatar
    jcmenezes1960
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 08/05/2010

    [Resolvido]Referenciar diversos campos Empty Referenciar diversos campos

    Mensagem  jcmenezes1960 8/6/2013, 18:09

    Boa tarde a todos

    Com a ajuda do Piloto consegui resolver a questão de validar campos sim ou não, conforme o código 1.

    Agora para diminuir a programação gostaria de fazer referencia a diversos campos. Como tenho 12 campos Sim ou Não, queria utilizar uma função para fazer referencia a eles. Estou tentando usar o código 2, mas não esta dando certo, dá o erro 438 O objeto não aceita esta propriedade ou metodo na linha If Not (ctl) Then.

    Tem como fazer isso?

    Código 1
    Option Explicit
    Dim Cancela As Boolean
    Dim Cancel As Boolean

    Private Sub DoencaFamilia_BeforeUpdate(Cancel As Integer)
    If Not DoencaFamilia Then
    Cancel = True

    Dim Mensagem, estilo, Titulo, resposta

    Mensagem = "Você deseja realmente desmarcar esta opção? " & Chr(13) & "Deseja continuar ?"
    estilo = vbYesNo + vbExclamation + vbDefaultButton2
    Titulo = "Confirmação"

    resposta = MsgBox(Mensagem, estilo, Titulo)
    If resposta = vbNo Then Cancela = True: Exit Sub

    Cancel = False
    DoCmd.OpenQuery "Consulta1", acViewNormal, acEdit

    End If
    End Sub

    Private Sub DoencaFamilia_Click()
    If Cancela = True Then Cancela = False: Exit Sub
    If Not DoencaFamilia Then
    Cancel = True
    Else
    DoCmd.OpenForm "FO-DoFam"
    End If
    End Sub

    Código 2

    Option Explicit
    Dim Cancela As Boolean
    Dim Cancel As Boolean

    Private Function ValidaCampos() As Boolean
    Dim ctl As Control
    Dim strName As String
    For Each ctl In Me.Controls
    If Not (ctl) Then (linha que dá erro)
    Cancel = True

    Dim Mensagem, estilo, Titulo, resposta

    Mensagem = "Você deseja realmente desmarcar esta opção? " & Chr(13) & "Deseja continuar ?"
    estilo = vbYesNo + vbExclamation + vbDefaultButton2
    Titulo = "Confirmação"

    resposta = MsgBox(Mensagem, estilo, Titulo)
    If resposta = vbNo Then Cancela = True: Exit Function

    Cancel = False
    DoCmd.OpenQuery "Consulta1", acViewNormal, acEdit
    End If
    Next ctl

    End Function

    Private Sub DoencaFamilia_BeforeUpdate(Cancel As Integer)
    Call ValidaCampos
    End Sub

    Private Sub DoencaFamilia_Click()
    If Cancela = True Then Cancela = False: Exit Sub
    If Not DoencaFamilia Then
    Cancel = True
    Else
    DoCmd.OpenForm "FO-DoFam"
    End If

    Agradeço a atenção de todos.

    Menezes
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8449
    Registrado : 05/11/2009

    [Resolvido]Referenciar diversos campos Empty Re: [Resolvido]Referenciar diversos campos

    Mensagem  Alexandre Neves 8/6/2013, 19:47

    Boa tarde,
    Não percebi o que pretende que a linha de código execute.
    Será if ctl.name="qualquercoisa" then?
    Será if ctl.name<>"qualquercoisa" then?


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    jcmenezes1960
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 08/05/2010

    [Resolvido]Referenciar diversos campos Empty Re: [Resolvido]Referenciar diversos campos

    Mensagem  jcmenezes1960 8/6/2013, 20:36

    Boa tarde Alexandre,

    É assim, tenho 12 campos Sim ou Não, gostaria que ele executasse o procedimento igual o Código 1, por exemplo:

    Campo 1 = DoencaFamilia
    Campo 2 = DoencaPessoal
    Campo 3 - RestricaoAF
    e assim por diante:

    Para que eu não tenha que digitar o Código 1 para todos os campos (12 no total), gostaria de criar a Função no Código 2 e chama-la no evento antes de atualizar, economizaria muitas linhas de programação.

    Private Function ValidaCampos() As Boolean
    Dim ctl As Control
    Dim strName As String
    For Each ctl In Me.Controls
    If Not (ctl) Then
    Cancel = True

    Dim Mensagem, estilo, Titulo, resposta

    Mensagem = "Você deseja realmente desmarcar esta opção? " & Chr(13) & "Deseja continuar ?"
    estilo = vbYesNo + vbExclamation + vbDefaultButton2
    Titulo = "Confirmação"

    resposta = MsgBox(Mensagem, estilo, Titulo)
    If resposta = vbNo Then Cancela = True: Exit Function

    Cancel = False
    DoCmd.OpenQuery "Consulta1", acViewNormal, acEdit
    End If
    Next ctl

    End Function

    Private Sub DoencaFamilia_BeforeUpdate(Cancel As Integer)
    Call ValidaCampos
    End Sub

    Private Sub DoencaPessoal_BeforeUpdate(Cancel As Integer)
    Call ValidaCampos
    End Sub

    e assim por diante.

    Será que fui claro?

    Grato

    Menezes
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8449
    Registrado : 05/11/2009

    [Resolvido]Referenciar diversos campos Empty Re: [Resolvido]Referenciar diversos campos

    Mensagem  Alexandre Neves 8/6/2013, 22:46

    Sub Desmarca(ctl as control)
    If ctl Then
    if MsgBox("Você deseja realmente desmarcar esta opção?", vbYesNo + vbquestion + vbDefaultButton2, "Confirmação")=vbyes then
    DoCmd.OpenQuery "Consulta1", acViewNormal, acEdit
    else
    ctl=false
    end if
    end if
    End Sub

    Private Sub DoencaFamilia_BeforeUpdate(Cancel As Integer)
    Call ValidaCampos(activecontrol)
    End Sub


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    jcmenezes1960
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 08/05/2010

    [Resolvido]Referenciar diversos campos Empty Re: [Resolvido]Referenciar diversos campos

    Mensagem  jcmenezes1960 9/6/2013, 13:18

    Bom dia Alexandre,

    1) Ocorre o seguinte erro na linha: ctl = False

    "Erro em tempo de execução 2115 - Macro ou função definida para a propriedade Antes de Atualizar ou Regra de Validação para este campo está evitando que o Access salve os dados do campo".

    2) A Msg aparece quando marco o campo, quando deveria aparecer quando desmarco, quando clico em Sim abre o formulário (deveria dar a mensagem), quando clico em Não dá o erro acima.

    Estou anexando 2 arquivos o primeiro Anamnese.mdb com código 1 que está tudo funcionando (coloquei o código somente no campo doenças na familia, está escrito código na frente), o arquivo Anamnese - Cópia.mdb com a sub que está dando o erro.

    Grato, e tenha um excelente domingo.

    Menezes
    Anexos
    [Resolvido]Referenciar diversos campos AttachmentAnamnese.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (241 Kb) Baixado 4 vez(es)
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8449
    Registrado : 05/11/2009

    [Resolvido]Referenciar diversos campos Empty Re: [Resolvido]Referenciar diversos campos

    Mensagem  Alexandre Neves 9/6/2013, 13:40

    Boa tarde, Menezes
    Realmente, o código não deixa alterar o valor do controlo antes da actualização.
    A verificação deve ser feita após a actualização do controlo
    Private Sub DoencaFamilia_AfterUpdate()
    Call Desmarca(ActiveControl.Name)
    End Sub

    O procedimento recebe o nome do controlo como argumento
    Sub Desmarca(NomeControlo As String)
    If Not Me(NomeControlo) Then
    If MsgBox("Você deseja realmente desmarcar esta opção?", vbYesNo + vbQuestion + vbDefaultButton2, "Confirmação " & NomeControlo) = vbYes Then
    DoCmd.OpenQuery "Consulta1", acViewNormal, acEdit
    Else
    Me(NomeControlo) = -1
    End If
    End If
    End Sub

    A a partir desta alteração, ter-se-á que ajustar outro código, mas faça o teste para este controlo que será fácil propagá-lo aos outros
    Obrigado e também Bom Domingo para si e família


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    jcmenezes1960
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 08/05/2010

    [Resolvido]Referenciar diversos campos Empty Re: [Resolvido]Referenciar diversos campos

    Mensagem  jcmenezes1960 9/6/2013, 15:11

    Oi Alexandre.

    Ficou assim:

    Option Explicit
    Dim Cancela As Boolean
    Dim Cancel As Boolean

    Sub Desmarca(NomeControlo As String)
    If Not Me(NomeControlo) Then
    If MsgBox("Você deseja realmente desmarcar esta opção?", vbYesNo + vbQuestion + vbDefaultButton2, "Confirmação " & NomeControlo) = vbYes Then
    DoCmd.OpenQuery "Consulta1", acViewNormal, acEdit
    Else
    Me(NomeControlo) = -1
    End If
    End If
    End Sub

    Private Sub DoencaFamilia_AfterUpdate()
    Call Desmarca(ActiveControl.Name)
    End Sub


    Private Sub DoencaFamilia_Click()
    If Cancela = True Then Cancela = False: Exit Sub
    If Not DoencaFamilia Then
    Cancel = True
    Else
    DoCmd.OpenForm "FO-DoFam"
    End If
    End Sub

    Só que acontece o seguinte:

    Quando clico em Sim, ele desmarca o campo, mas não executa a consulta1 para exclusão dos registros.
    Quando clico em Não ele não desmarca, mas abre o formulário, deveria parar o procedimento.

    Anexo arquivo com a correção.

    Tó quase lá.

    Grato

    Menezes
    Anexos
    [Resolvido]Referenciar diversos campos AttachmentAnamnese - Corrigida.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (145 Kb) Baixado 8 vez(es)
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8449
    Registrado : 05/11/2009

    [Resolvido]Referenciar diversos campos Empty Re: [Resolvido]Referenciar diversos campos

    Mensagem  Alexandre Neves 9/6/2013, 18:29

    Olá,
    Vamos por partes
    Retire o código do click. O código do afterupdate parece-me funcionar como pretende. Se sim, vamos ao código do click
    No click, explique o que pretende.
    Testei o seguinte código
    Private Sub DoencaFamilia_Click()
    'If Cancela = True Then Cancela = False: Exit Sub
    If DoencaFamilia Then
    DoCmd.OpenForm "FO-DoFam"
    Else
    Cancel = True
    End If
    End Sub


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    jcmenezes1960
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 08/05/2010

    [Resolvido]Referenciar diversos campos Empty Re: [Resolvido]Referenciar diversos campos

    Mensagem  jcmenezes1960 10/6/2013, 12:39

    Bom dia Alexandre:

    Está tudo perfeito, só falta um porém, quando clico na opção Não, ele abre o formulário, quero que ele pare o procedimento.

    O sistema deve funcionar assim:

    1) Se optar por Sim executa a consulta para exclusão dos dados e para o procedimento. Quando o cliente clicar novamente ele abre o formulários para inclusão de dados. Ate aqui está OK

    2) Se optar por Não deve Parar o procedimento e não abrir o formulário. Este é o único detalhe, "ele abre o formulário quando clico em não". Porque quando o cliente optar por Não ele só poderá alterar os dados do formulário no campo Editar Ficha de Ocorrência.

    Anexo BD com as correções que você sugeriu, ficou só este pequeno detalhe.

    Grato por sua valorosa colaboração.

    Menezes
    Anexos
    [Resolvido]Referenciar diversos campos AttachmentAnamnese - Corrigida.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (138 Kb) Baixado 2 vez(es)
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8449
    Registrado : 05/11/2009

    [Resolvido]Referenciar diversos campos Empty Re: [Resolvido]Referenciar diversos campos

    Mensagem  Alexandre Neves 11/6/2013, 19:15

    Boa tarde, Menezes
    Vamos começar do princípio, para andarmos às voltas
    1- O formulário está com a caixa de verificação desmarcada
    2 - coloca marcado
    2.1- quer que fique marcado sem pergunta?
    2.1.1- sim ou não, se sim, informe os passos seguintes
    2.1.2- ao ficar marcado, quer que abra o 2º formulário?
    2.1.3- ao abrir o 2º formulário, quer que a caixa fique marcada ou desmarcada?

    Para já parece-me suficiente, mas se encontrar novos elementos, informe
    Abraços,


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    jcmenezes1960
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 08/05/2010

    [Resolvido]Referenciar diversos campos Empty Re: [Resolvido]Referenciar diversos campos

    Mensagem  jcmenezes1960 11/6/2013, 22:10

    Boa tarde Alexandre, é assim:

    1. FormAnamnese: caixa desmarcada
    1.1 Ao marcar abre o form FO-DoFam (neste formulário existe uma macro que se ao sair do form for nulo ele desmarca a caixa).
    1.2 Se houver dados no form FO-DoFam a caixa permanecerá marcada.

    2 - FormAnamnese: caixa marcada
    2.1 Ao clicar para desmarcar faz a pergunta Sim ou Não
    2.2 Se Sim para o procedimento, mantem a caixa marcada e o FormAnamnese recebe o foco.
    2.3 Se Não desmarca a caixa, para o procedimento e o FormAnamnese recebe o foco.
    2.4 Ao clicar novamente para marcar volta ao procedimento 1.

    Espero que tenha sido claro.

    Um grande abraço e mais uma vez obrigado pela atenção.

    Menezes

    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8449
    Registrado : 05/11/2009

    [Resolvido]Referenciar diversos campos Empty Re: [Resolvido]Referenciar diversos campos

    Mensagem  Alexandre Neves 12/6/2013, 21:32

    Boa noite, Menezes

    1 - Elimine o procedimento click
    2 - coloque
    Sub Desmarca(NomeControlo As String)
    If Me(NomeControlo) Then
        Select Case NomeControlo
        Case "DoencaFamilia"
            DoCmd.OpenForm "FO-DoFam", acNormal, "", "[Código]=[Forms]![FormAnamnese]![Código]", , acNormal
        End Select
    Else
    If MsgBox("Você deseja realmente desmarcar esta opção?", vbYesNo + vbQuestion + vbDefaultButton2, "Confirmação " & NomeControlo) = vbNo Then
        Me(NomeControlo) = -1
    End If
    End If
    End Sub
    Private Sub DoencaFamilia_AfterUpdate()
        Call Desmarca(ActiveControl.Name)
    End Sub


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    jcmenezes1960
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 08/05/2010

    [Resolvido]Referenciar diversos campos Empty Re: [Resolvido]Referenciar diversos campos

    Mensagem  jcmenezes1960 13/6/2013, 13:17

    Bom dia Alexandre,

    Agora ficou OK, só tive que acrescentar a Consulta de Exclusão.

    Muito Obrigado por sua valorosa atenção.

    Grato

    Menezes

    Conteúdo patrocinado


    [Resolvido]Referenciar diversos campos Empty Re: [Resolvido]Referenciar diversos campos

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 2/5/2024, 05:46