none
Desbloquear Commandbutton específico em formulário Excel VBA RRS feed

  • Pergunta

  • Bom dia a todos.

    Tenho um formulário com diversos TextBox, ComboBox e CommandButtons, e para bloquear um de cada vez é muito trabalho e muitas linhas de código, então pensei em fazer um loop entre eles e bloquear.

    Até ai tudo certo, consegui fazer isso usando o seguinte comando:

    'Instrução para bloquear todos os controles de uma única vez
    Sub Locked_Controls()
    Dim control As control
        For Each control In Me.controls
            If TypeName(control) = "ComboBox" Or TypeName(control) = "TextBox" Or TypeName(control) = "CommandButton" Then
               control.Locked = True
            End If
        Next
    End Sub
    '=================================================================================================================================
    

    Porém, eu tenho alguns CommandButtons que devem ficar liberados e agora não sei como fazer, pois não são coisas que utilizo normalmente.

    Caso alguém tenha o código correto para usar em casos como este, fico muito agradecido.

    Obrigado e se precisarem posso disponibilizar o arquivo todo.

    sexta-feira, 5 de maio de 2017 14:22

Respostas

  • Boa noite Valderei.

    Na linha do que te sugeri, eu faria algo do tipo:

    Dim control As control
    Dim Exceções() As Variant, i As Long, Travar As Boolean
    
    
    Exceções = Array(CommandButton1.Name, CommandButton3.Name)   'Não serão bloqueados
    
    
    For Each control In Me.Controls
        If TypeName(control) = "ComboBox" Or TypeName(control) = "TextBox" Or TypeName(control) = "CommandButton" Then
            
            Travar = True
            For i = LBound(Exceções) To UBound(Exceções)
                If control.Name = Exceções(i) Then
                    Travar = False
                    Exit For
                End If
            Next i
            If Travar Then control.Locked = True
        End If
    Next

    Eu optei pelos nomes por simplicidade, que no caso de seu projeto devem ter sido renomeados para algo mais intuitivo.

    Caso tenha dúvida fique a vontade para retornar.

    Abraço.


    Filipe Magno

    terça-feira, 9 de maio de 2017 00:52

Todas as Respostas

  • Boa noite Valderei.

    No seu caso eu criaria um Array com algo que identifique as exceções, como os nomes (Caption) dos botões, por exemplo. Neste caso bastaria um "For" nos elementos deste Array com um teste condicional, que seria aninhado com o "If" que você já inseriu.

    Abraço.


    Filipe Magno

    sábado, 6 de maio de 2017 00:54
  • Olá Filipe Magno, vou tentar aqui e depois te respondo.

    Obrigado pela ajuda.

    domingo, 7 de maio de 2017 13:29
  • Filipe, vou pedir ajuda novamente.

    Não consegui fazer o proposto por você para identificar o commandbutton que deve ficar liberado durante inicialização do formulário.

    Você pode me dar uma mão?

    Se precisares do arquivo todo, posso disponibilizar para você.

    Obrigado.

    segunda-feira, 8 de maio de 2017 17:13
  • Boa noite Valderei.

    Na linha do que te sugeri, eu faria algo do tipo:

    Dim control As control
    Dim Exceções() As Variant, i As Long, Travar As Boolean
    
    
    Exceções = Array(CommandButton1.Name, CommandButton3.Name)   'Não serão bloqueados
    
    
    For Each control In Me.Controls
        If TypeName(control) = "ComboBox" Or TypeName(control) = "TextBox" Or TypeName(control) = "CommandButton" Then
            
            Travar = True
            For i = LBound(Exceções) To UBound(Exceções)
                If control.Name = Exceções(i) Then
                    Travar = False
                    Exit For
                End If
            Next i
            If Travar Then control.Locked = True
        End If
    Next

    Eu optei pelos nomes por simplicidade, que no caso de seu projeto devem ter sido renomeados para algo mais intuitivo.

    Caso tenha dúvida fique a vontade para retornar.

    Abraço.


    Filipe Magno

    terça-feira, 9 de maio de 2017 00:52
  • Filipe, perfeito.

    Muito obrigado e espero que seus códigos possam auxiliar outras pessoas.

    Abraço.

    quarta-feira, 10 de maio de 2017 21:00