Notifications
Clear all

Modulo para verificar se valor textbox é numerico

4 Posts
3 Usuários
0 Reactions
1,598 Visualizações
(@luisbarros)
Posts: 8
Active Member
Topic starter
 

Boa noite,
Queria criar uma rotina para verificar se o valor do textbox é numérico no evento change, só que a referencia "me" está dando erro, gostaria de saber se dá para referenciar de outra forma ou se tem um jeito melhor de fazer isso.
este é o código que usei:

Sub VERIFICA_NUMERICO()

If IsNumeric(Me.Value) Then
Me.Value = Replace(Me.Value, ".", ",")
Else
MsgBox (" DIGITE UM VALOR VÁLIDO ")
End If

End Sub

 
Postado : 24/10/2019 7:07 pm
(@srobles)
Posts: 231
Estimable Member
 

luisbarros,

O erro ocorre justamente porque o "ME" é uma referência direta ao UserForm (conteiner de controles) que possui o controle TextBox em questão.

Para referenciar controles contidos em um UserForm, você pode e deve usar a cláusula With, exemplo:

With Me
   'Código dentro deste With, fazem referência direta ao UserForm
   With .TextBox1
      'Código dentro deste With, fazem referência direta ao controle TextBox
      'Código que faz uma verificação / analisa uma condição
   End Wtih
End With

Imagine então, que dentro do seu UserForm, existam 1 ComboBox, 1 TextBox, 1 OptionButton e 1 CheckBox.
Para manipular cada controle sem ter de reescrever a referência ao UserForm, ficaria assim :

With Me
   'Código dentro deste With, fazem referência direta ao UserForm

   'Manipulamos o ComboBox
   With .ComboBox1
      'Código dentro deste With, fazem referência direta ao controle ComboBox
      'Código que faz uma verificação / analisa uma condição
   End Wtih

   'Manipulamos o TextBox
   With .TextBox1
      'Código dentro deste With, fazem referência direta ao controle TextBox
      'Código que faz uma verificação / analisa uma condição
   End Wtih

   'Manipulamos o OptionButton
   With .OptionButton1
      'Código dentro deste With, fazem referência direta ao controle OptionButton
      'Código que faz uma verificação / analisa uma condição
   End Wtih

   'Manipulamos o CheckBox
   With .CheckBox1
      'Código dentro deste With, fazem referência direta ao controle CheckBox
      'Código que faz uma verificação / analisa uma condição
   End Wtih
End With

Isso torna o código mais "limpo" e organizado.
Agora imagine ter de manipular muitos controles, tendo que referenciar o UserForm que os possui :

   'Manipulamos o ComboBox
   With UserForm1.ComboBox1
      'Código dentro deste With, fazem referência direta ao controle ComboBox
      'Código que faz uma verificação / analisa uma condição
   End Wtih

   'Manipulamos o TextBox
   With UserForm1.TextBox1
      'Código dentro deste With, fazem referência direta ao controle TextBox
      'Código que faz uma verificação / analisa uma condição
   End Wtih

   'Manipulamos o OptionButton
   With UserForm1.OptionButton1
      'Código dentro deste With, fazem referência direta ao controle OptionButton
      'Código que faz uma verificação / analisa uma condição
   End Wtih

   'Manipulamos o CheckBox
   With UserForm1.CheckBox1
      'Código dentro deste With, fazem referência direta ao controle CheckBox
      'Código que faz uma verificação / analisa uma condição
   End Wtih

No fim, o resultado será o mesmo, porém ao separar a manipulação de controles em blocos, fica fácil identificar possíveis erros / referências erradas, sem contar que o código fica mais limpo e fácil de entender / interpretar.

Aos colegas mais experientes, todo complemento, observação ou correção é sempre bem-vinda.

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 24/10/2019 9:42 pm
(@luisbarros)
Posts: 8
Active Member
Topic starter
 

Entendi a ideia, mas eu queria fazer uma rotina que funcionasse em qualquer textbox a partir do evento change.

 
Postado : 25/10/2019 5:12 am
Mauro Coutinho
(@coutinho)
Posts: 95
Estimable Member
 

Entendi a ideia, mas eu queria fazer uma rotina que funcionasse em qualquer textbox a partir do evento change.

Luis, o que pretende pode-se conseguir utilizando os controles "Textbox Tempo de execução WithEvents" utilizando o Modulo de Classe, assim definimos em uma só ação para todos os controles tendo a possibilidade de usar um case e formatar conforme necessitarmos, a principio fiquie em duvida se quer só verificar se é numerico ou se quer formatar ja que citou o Replace.
Por enquanto, sugiro que e uma olhada nos links abaixo onde falo sobre o assunto e tem alguns exemplos de formatação, assim voce pode definir o que realmente precisa e chegamos a uma resposta objetiva, veja se consegue adaptar, senão é só retornar que auxiliamos.

Textbox Tempo de execução WithEvents
http://www.tomasvasquez.com.br/forum/vi ... =20&t=3901

Fomatar TextBox Eventos KeyPress e Change
http://www.tomasvasquez.com.br/forum/vi ... boozUaXtkY

Se pesquisar aqui no Forum, tambem já foi falado sobre o assunto, mas os anexos ainda estão indisponiveis, por isso indiquei os links acima
Espero que ajude.

[]s
Mauro Coutinho

 
Postado : 25/10/2019 8:11 am