Usuário com melhor resposta
Desbloquear Commandbutton específico em formulário Excel VBA

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.
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
- Marcado como Resposta Valderei Antunes quarta-feira, 10 de maio de 2017 20:59
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
-
-
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.
-
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
- Marcado como Resposta Valderei Antunes quarta-feira, 10 de maio de 2017 20:59
-