Como saber se um texto é um número? (VBA)
Nada mais comuns em uma macro do que fazer contas. A gente pega o valor de uma célula, ou de uma caixa de texto, multiplica com o de outra célula, soma com o de outra, e assim vai. Mas o que acontece quando a gente manda multiplicar A1 por 10 e em A1 está escrito uma palavra?
É isso mesmo, aparece uma mensagem de erro dizendo "Tipos incompatíveis". Afinal, multiplicar um texto por um número, hmmmm... não tem como dar certo, né? O que a gente pode fazer para evitar esse tipo de erro é verificar se o dado em questão é realmente um número.
Para isso, a gente pode fazer um pequeno if como esse:If IsNumeric(dado) And Not IsEmpty(dado) Then comando
, onde a gente vai substituir 'dado' pelo dado que queremos usar e 'comando' pelo comando ou conta que queremos fazer.
Agora explicando: a função IsNumeric diz se o valor passado como argumento (entre parênteses) é um número. No entanto, ela também considera como número a célula em branco, ou a variável vazia, por isso que usamos também a função IsEmpty. A função IsEmpty diz se o valor passado como argumento é vazio.
Traduzindo o IF: Se o dado é um número, e o dado NÃO é vazio, então execute o comando.
Exemplos com célula:Sub exemplo1()
Traduzindo: se o valor da célula a1 for realmente um número, mostre uma mensagem dizendo que O valor de A1 é número e a célula não está em branco
If IsNumeric(Range("a1")) And Not IsEmpty(Range("a1")) Then MsgBox "O valor de A1 é número e a célula não está em branco"
End SubSub exemplo2()
Traduzindo: se o valor da célula a1 for realmente um número, mostre uma mensagem com o resultado da multiplicação do valor de A1 por 10
If IsNumeric(Range("a1")) And Not IsEmpty(Range("a1")) Then MsgBox A1*10
End Sub
Exemplo com variável:
Traduzindo: se o valor da variável1 for realmente um número, mostre uma mensagem dizendo que A variavel1 é número e não é vazia
Sub exemplo3()
Dim variavel1
variavel1 = 5
If IsNumeric(variavel1) And Not IsEmpty(variavel1) Then MsgBox "A variável1 é número e não é vazia"
End Sub
Quando uma caixa de texto está em branco, a função IsNumeric dá False, ou seja, ela diz que o valor da caixa de texto NÃO é um número. Por isso não precisamos usar a função IsEmpty ao usar caixas de texto.
Exemplo com caixa de texto:
Traduzindo: se o valor da TextBox1 for realmente um número, mostre uma mensagem dizendo que O valor da caixa de texto é mesmo um número e ela não está em branco
Sub CommandButton1_Click()
If IsNumeric(TextBox1) Then MsgBox "O valor da caixa de texto é mesmo um número, e ela não está em branco"
End Sub