MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    Mudar controle em um formulario atraves de uma função (modulo)

    avatar
    elmanojr
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 20/07/2017

    Mudar controle em um formulario atraves de uma função (modulo) Empty Mudar controle em um formulario atraves de uma função (modulo)

    Mensagem  elmanojr em 14/12/2020, 00:08

    Ola, pessoal
    Em todos os meus frm de consulta tenho botões de controle Edição,Novo, Localizar,Excluir, Primeiro, Ultimo e fechar. Estou querendo economizar linha de código para habilitar e desabilitar os botões. Pois quando o usuario clica em Edição por exemplo todos os outros botões são desabilitados deixando somente o botão salvar. Apos clicar no botão Salvar habilita automaticamente os outros botões.
    Escrevi este modulo:

    Public Function fcnHabilitaBotoes(ByVal flagHabilita As Boolean, NomeFrm As Form)
    On Error GoTo Err_Handler

    'Crio variavel tipo Controle (Control)
    Dim varControle As Control

    If flagHabilita = True Then
    'Declaro onde estao estes controle no frm.
       For Each varControle In NomeFrm.Controls
           'Avalia os controles do tipo botão de comando.
           If varControle.ControlType = acCommandButton Then
               'verifica nome dos botoes para avaliacao
               If (varControle.Name = "btnSalvarRegistro") Then
                   varControle.Enabled = True
                   If Left(varControle, 3) = "btn" Then
                       varControle.Enabled = False
                   End If
               End If
           End If
       Next varControle
    Else
    'Declaro onde estao estes controle no frm.
       For Each varControle In NomeFrm.Controls
           'Avalia os controles do tipo botão de comando.
           If varControle.ControlType = acCommandButton Then
               'verifica nome dos botoes para avaliacao
               If (varControle.Name = "btnSalvarRegistro") Then
                   varControle.Enabled = False
                  If Left(varControle, 3) = "btn" Then    'AQUI QUE APARECE O ERRO
                       varControle.Enabled = True
                   End If
               End If
           End If
       Next varControle
    End If

    Exit_Here: ' porta de saída
       Exit Function

    Err_Handler:   'Trata o erro
       Call fncMensagemInfo("Erro # " & str(Err.Number) & vbCrLf & "gerado na " & Err.Source & vbCrLf & vbCrLf & "Descrição: " & Err.Description, "Avise o Administrador do Sistema - Msg Erro")
       Resume Exit_Here
    End Function

    E coloquei no evento ao clicar chamando a função.
    ex:Call fcnHabilitaBotoes(Me.FlagBloqueioDesbloqueioFrm, Forms!consultaAuxCursosCopiaTeste)

    Onde FlagBloqueioDesbloqueioFrm é uma caixa de seleção que esta invisivel.
    e Forms!consultaAuxCursosCopiaTeste é o nome do frms.

    Dá erro de 438 - O objeto não aceita esta propriedade ou método!
    Sou novato em VBA e não estou conseguindo resolver isto ,pode até parecer simples mas meus olhos ja não  veem mais nada!  hahahahahaha

    Agradeço a ajuda
    Abraços a todos
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2515
    Registrado : 22/11/2016

    Mudar controle em um formulario atraves de uma função (modulo) Empty Re: Mudar controle em um formulario atraves de uma função (modulo)

    Mensagem  DamascenoJr. em 14/12/2020, 03:47

    Eu analisando.  scratch

    Olho este trecho
    Código:
    ...
    'Crio variavel tipo Controle (Control)
    Dim varControle As Control
    ...

    Legal. O programador declara as variáveis. Isso é bom.
    Ele criou uma variável do tipo controle. Hummmm. Este tipo de variável geralmente é usada em laços "For Each" e pode ser todo e qualquer tipo de controle dentro de um formulário.

    Continuemos.

    Código:
    ...
    For Each varControle In NomeFrm.Controls
       ...
    Next varControle
    ...

    Dito e feito! O programador usou a variável em um laço "For Each"

    Continuemos.

    Código:
    ...
    If Left(varControle, 3) = "btn" Then    'AQUI QUE APARECE O ERRO
    ...

    O programador usou a função "Left" e ele indicou que é nessa linha que tá o problema. Essa função recebe no primeiro parâmetro uma string e no segundo parâmetro um número que diz quantas letras essa função "Left" deve retornar contando da esquerda para a direita da string no primeiro parâmetro.

    Mas.. HEI! O programador não indicou uma variável do tipo string pro primeiro parâmetro, mas sim uma variável do tipo controle. Tá errado isso. Esse é o motivo do erro. Será que ele tava querendo mexer com o nome do controle ou com o valor contido no controle?

    Continuemos.

    ...
    If (varControle.Name = "btnSalvarRegistro") Then
      ...
      If Left(varControle, 3) = "btn" Then    'AQUI QUE APARECE O ERRO
         ...
      End If
    End If
    ...


    Bom... duas linhas atrás ele usou a propriedade "name" da variável do tipo controle. Acho que é o que ele quer. Ele quer ficar mexendo com o nome do controle nesse código que tá desenvolvendo. É isso. Vou sugerir essa solução.

    --------------------------------------------------------------------------------------------------------------

    elmanojr, troque a linha abaixo
    Código:
    ...
    If Left(varControle, 3) = "btn" Then    'AQUI QUE APARECE O ERRO
    ...

    por

    Código:
    ...
    If Left(varControle.Name, 3) = "btn" Then
    ...


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1160
    Registrado : 13/12/2016

    Mudar controle em um formulario atraves de uma função (modulo) Empty Re: Mudar controle em um formulario atraves de uma função (modulo)

    Mensagem  Alexandre Fim em 14/12/2020, 05:15

    Ola elmanojr

    Fiz um pequeno exemplo onde o sistema utiliza funções genéricas para habilitar/desabilitar comandos e controles, limpar controles do form.

    Ao abrir o form:
    Mudar controle em um formulario atraves de uma função (modulo) Mod110

    Após clicar em "Novo":
    Mudar controle em um formulario atraves de uma função (modulo) Mod210


    Nos botões de comando, eu utilizei a propriedade "Marca" (tag), e através desta marca o sistema executa rotinas pertinentes ao comando.
    OBs: Os botões de navegação não são mais utilizados, pois se um form carregar mais de 1000 registros, a navegação fica inviável.
    Sugestão: criar tela de pesquisa para selecionar registro desejado e carregar o form.


    Segue modelo.


    Espero ter ajudado

    Abraço
    Anexos
    Mudar controle em um formulario atraves de uma função (modulo) AttachmentModelo.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (94 Kb) Baixado 16 vez(es)


    .................................................................................
    - Procure sempre anexar seu projeto para análise do problema/dúvida.
    - Ao copiar/colar um código VBA, procure entender seu funcionamento.
    - Se o problema foi resolvido, não se esqueça de marcar o tópico como RESOLVIDO.
    avatar
    elmanojr
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 20/07/2017

    Mudar controle em um formulario atraves de uma função (modulo) Empty [RESOLVIDO]Mudar controle em um formulario atraves de uma função (modulo) em Dom

    Mensagem  elmanojr em 15/12/2020, 01:03

    Nossa Tudo Certo DamascenoJr, valeu!
    Na verdade sua ajuda, fez eu perceber que nem precisava daquele comando , bastou um Else e resolveu todo.
    A pergunta era: se  (varControle.Name = "btnSalvarRegistro") Then varControle.Enabled = True
    Else (se não for) varControle.Enabled = False

    Ficou perfeito!! Funcionou como eu queria

    'Declaro onde estao estes controle no frm.
      For Each varControle In NomeFrm.Controls
          'Avalia os controles do tipo botão de comando.
          If varControle.ControlType = acCommandButton Then
              'verifica nome dos botoes para avaliacao
              If (varControle.Name = "btnSalvarRegistro") Then
                  varControle.Enabled = True
              Else
                  varControle.Enabled = False
              End If
          End If
      Next varControle

    Muito Obrigado!!!! Abraço a todos !

    PS. Alexandre Fim Baixei o seu ZIP e estou estudando muito legal também.....
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2515
    Registrado : 22/11/2016

    Mudar controle em um formulario atraves de uma função (modulo) Empty Re: Mudar controle em um formulario atraves de uma função (modulo)

    Mensagem  DamascenoJr. em 15/12/2020, 01:49

    Veja a maneira correta de marcar o tópico como resolvido. Aguardamos sua ação.

    https://www.maximoaccess.com/t860-resolucao-de-topicos#5263


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.

      Data/hora atual: 16/1/2021, 12:49