Expressão Numérica ...
 
Notifications
Clear all

Expressão Numérica em TextBox

8 Posts
3 Usuários
0 Reactions
1,803 Visualizações
(@bilokas)
Posts: 168
Estimable Member
Topic starter
 

Olá amigos de fórum, estou com uma dúvida um tanto que boba mas minha cabeça ainda não conseguiu pensar em algo para tal problema.

Imagine duas textbox:

TextBox1, TextBox2

O que eu preciso é, num Evento BeforeUpdate, por exemplo, digitar uma expressão numérica no TextBox1. Exemplo "10+10+10" e o resultado (30) ser exibido na TextBox2.


DGAF / DVGD - Divisão de Gestão de Documentos
Rafael A. Guimarães
[email protected]

 
Postado : 10/10/2014 9:05 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Exemplo, não muito elegante...


Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)

Range("A1").Formula = "=" & TextBox1.Value

TextBox2 = Range("A1").Value

End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 10/10/2014 9:47 am
(@bilokas)
Posts: 168
Estimable Member
Topic starter
 

Então, o que eu queria era exatamente eliminar esse método.

Queria utilizar algum tipo de conversão ou alguma variável, mas até agora não consegui bolar nada.


DGAF / DVGD - Divisão de Gestão de Documentos
Rafael A. Guimarães
[email protected]

 
Postado : 10/10/2014 11:23 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Em vez de usar uma célula, vc pode usar um nome (não é uma variável, mas chega um pouco mais perto).

Fiz este teste e deu certo:

Sub teste()

Dim txt1
Dim txt2

txt1 = "10+10+10"

ActiveWorkbook.Names.Add Name:="resultadotxt1", RefersTo:="=" & txt1

txt2 = Evaluate(ActiveWorkbook.Names("resultadotxt1").Value)

MsgBox txt2

End Sub

Para o teu caso, deve ser assim:

Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)

ActiveWorkbook.Names.Add Name:="resultadotextbox1", RefersTo:="=" & TextBox1.Value

TextBox2 = Evaluate(ActiveWorkbook.Names("resultadotxt1").Value)

End Sub

Abs

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 10/10/2014 11:49 am
(@bilokas)
Posts: 168
Estimable Member
Topic starter
 

Obrigado por responder.

Então, nos dois casos, o código só está aceitando o procedimento uma única vez.


DGAF / DVGD - Divisão de Gestão de Documentos
Rafael A. Guimarães
[email protected]

 
Postado : 10/10/2014 12:46 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Quando vi o post, me veio que eu já havia respondido algo parecido, então na pesquisa encontrei o tópico abaixo, que por sinal é seu tambem e deu como Resolvido.

Qual a diferença entre eles ?
TextBox "entender" fórmulas
Mensagempor bilokas » Ter Set 23, 2014 10:50 am
viewtopic.php?f=10&t=13027

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 10/10/2014 1:50 pm
(@bilokas)
Posts: 168
Estimable Member
Topic starter
 

Então Mauro,

No primeiro momento o usuário iria realizar operações simples de adição e subtração.
Agora, será necessário realizar o cálculo de expressões mais complexas.

Até o presente momento eu consegui resolver da seguinte forma:

Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    Resultado = Application.Evaluate(TextBox1.Value)
    TextBox2.Value = Resultado
End Sub

Me desculpe a duplicidade de tópicos, mas na verdade a minha necessidade também evoluiu um pouco. De qualquer forma agradeço sempre pela disposição da galera aqui em sempre ajudar.


DGAF / DVGD - Divisão de Gestão de Documentos
Rafael A. Guimarães
[email protected]

 
Postado : 10/10/2014 1:56 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Ops, desculpe. cometi um erro com os nomes.

O primeiro exemplo, que testei, estava funcionando. O segundo, para tua necessidade, tinha um erro aqui:

Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)

ActiveWorkbook.Names.Add Name:="resultadotextbox1", RefersTo:="=" & TextBox1.Value

TextBox2 = Evaluate(ActiveWorkbook.Names("resultadotxt1").Value)

End Sub

Agora deve funcionar:

Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)

ActiveWorkbook.Names.Add Name:="resultadotextbox1", RefersTo:="=" & TextBox1.Value

TextBox2 = Evaluate(ActiveWorkbook.Names("resultadotextbox1").Value)

End Sub

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 10/10/2014 2:31 pm