MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

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

    [Resolvido]for each dentro de outro for each

    Compartilhe

    mcsanches
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 125
    Registrado : 10/06/2012

    [Resolvido]for each dentro de outro for each

    Mensagem  mcsanches em Seg 03 Out 2016, 15:24

    bom dia amigos

    estou tentando aprimorar um codigo do JPaulo

    que percorre os campos do formulário e bloqueia ou desbloqueia o campo

    o caso é que tenho subforms, então necessito utilizar um segundo for each para percorrer o interior , porem o access informa que o for já esta em uso, segue abaixo o código

    ublic Function LiberaControles(strFrm As Form) As String
    'By JPaulo ® Maximo Access
    Dim ctl As Control
    For Each ctl In strFrm.Controls

    If ctl.ControlType = acSubform Then


    For Each ctl In Frm.Controls


    If Not IsNull(ctl.Value) Or ctl.Value <> "" Then

    ctl.Locked = False 'se desejar desbloquear o campo

    Else

    ctl.Locked = True 'se desejar desbloquear o campo

    End If

    Next ctl

    End If

    else

    ctl.Locked = true 'se desejar desbloquear o campo


    End If
    Next ctl

    End Function


    alguem pode me ajudar?????

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    Re: [Resolvido]for each dentro de outro for each

    Mensagem  Alexandre Neves em Seg 03 Out 2016, 16:25

    Boa tarde,
    Defina 2 variáveis, uma para cada ciclo
    Dim ctl1 As Control,ctl2 As Control
    For Each ctl1 In strFrm.Controls
    If ctl1.ControlType = acSubform Then
    For Each ctl2 In Frm.Controls
    If Not IsNull(ctl2.Value) Or ctl2.Value <> "" Then
    ctl2.Locked = False 'se desejar desbloquear o campo
    Else
    ctl2.Locked = True 'se desejar desbloquear o campo
    End If
    Next ctl2
    End If
    else
    ctl1.Locked = true 'se desejar desbloquear o campo
    End If
    Next ctl1


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

    mcsanches
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 125
    Registrado : 10/06/2012

    Re: [Resolvido]for each dentro de outro for each

    Mensagem  mcsanches em Ter 04 Out 2016, 18:44

    Obrigado Alexandre , o maximo que consegui chegar foi até aqui, porem a segunda parte do for each só roda quando chamo a função ao iniciar o formulário. O meu objetivo seria utilizar a função em botão de editar

    Dim ctl As Control
    Dim ctl1 As Control

    For Each ctl In strfrm.Controls

    Select Case ctl.ControlType
    Case acTextBox, acComboBox, acListBox, acOptionGroup, acCheckBox

    If ctl.Value <> ctl.OldValue Or (Not IsNull(ctl.Value) Or ctl.Value <> "") Then

    ctl.Locked = True

    Else
    Cancel = True
    End If

    Case acSubform


    For Each ctl1 In strfrm(ctl.Name).Form.Controls

    If ctl1.Value <> ctl1.OldValue Or (Not IsNull(ctl1.Value) Or ctl1.Value <> "") Then

    ctl1.Locked = True

    Else
    Cancel = True
    End If

    Next ctl1

    End Select

    Next ctl

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    Re: [Resolvido]for each dentro de outro for each

    Mensagem  Alexandre Neves em Ter 04 Out 2016, 21:39

    Veja se o código emperra no controlo onde é executado o código
    Se for, tem de pensar nalguma gambiarra, pois ele não aceitará a mudança no próprio controlo


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

    mcsanches
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 125
    Registrado : 10/06/2012

    Re: [Resolvido]for each dentro de outro for each

    Mensagem  mcsanches em Seg 10 Out 2016, 13:42

    Alexandre obrigado, acabei fazendo a "gambiarra" chamo a função dentro de cada subform de modo que ao clicar no botão editar ele libera os controles e ao salvar ele bloqueia

    obrigado

    Marcelo

      Data/hora atual: Qua 07 Dez 2016, 20:15