Tenho um modulo do VBA onde é feito um calculo e a variaveis voltam em decimal ex: var = 0,3 - var=0,4567 - var=0,2 etcc
Quando vou usar um do while por exempo
do while var > 0.5 ' <---- atentem que o vba não permite "," apenas o separador "."
......
enddo
Desta forma gera um conflito entre a variável que tem o separador "," e o teste logico onde o valor tem o separador "."
Como posso contornar este problema ?
obs: não posso colocar a planilha por questões éticas .
obrigado
4ntunes,
Bom dia!
Uma forma de resolver isso seria assim:
Sub teste() Dim var As Double Dim valor1 As Double Dim Valor2 As Double valor1 = 10 Valor2 = 3 var = valor1 / Valor2 If Str(var) = " 3.33333333333333" Then MsgBox "Deu certo!" End If End Sub
Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)
Atenciosamente
Wagner Morel
Obrigado pela ajuda WAg,
Sua ideia é criativa, porem tenho que testar se é ">" por isso preciso do valor numérico e a variável ora retorna com 2,3,4,5 até 6 casas decimais.
vc está usando valores em variaveis string para consegui o valor numerico?
virgula e ponto tem funções diferentes
não entendi bem, mas vc pode tentar substituir a virgula pelo ponto
e depois passar para uma variavel definida como Currency para caber o valor
http://www.techonthenet.com/excel/formu ... ce_vba.php
https://msdn.microsoft.com/pt-br/librar ... 2147217396
obs: não posso colocar a planilha por questões éticas .
pelo menos a macro para se saber oq vc está querendo fazer
veja o codigo :
a = CDate(Format(CDate(datanova), "Hh:Mm:ss"))
datanova = 0 ' zera o calculo do tempo desligado
a = CDec((a))
etiqueta2.Caption = a
lbl_contador.Caption = i
'
Loop While a > 0.5 And i <> TotalDeLinhas <----sistema trava neste ponto
* a variável a chega da seguinte forma "a=0,5856868688" **
pq não tenta
Loop While a >"0,5" And i <> TotalDeLinhas <----
Sub tttttt()
a = "0,588885443588"
MsgBox a > "0,59"
End Sub
Antunes, boa tarde.
Na verdade o valor é apenas exibido com vírgula nas textboxes, captions, e na própria janela imediata, mas internamente é armazenado no formato americano. Veja por exemplo a seguinte comprovação baseada no seu código, onde decompus cada etapa da transformação da sua variável "a":
Sub ExemploParaTeste() Dim a As Variant, datanova As Variant datanova = "27/julho/16 14:55:08" 'Conteúdo de datanova: "27/julho/16 14:55:08" tipo: Variant/String a = CDate(datanova) 'Conteúdo de a: #27/07/2016 14:55:08# tipo: Variant/Date a = Format(a, "Hh:Mm:ss") 'Conteúdo de a: "14:55:08" tipo: Variant/String a = CDate(a) 'Conteúdo de a: #14:55:08# tipo: Variant/Date a = CDec(a) 'Conteúdo de a: 0,62162037037037 tipo: Variant/Decimal If a > 0.5 Then MsgBox a & " é maior do que 0,5: Teste Positivo" End Sub
Como vc pode perceber, se a = CDec(a) = 0,62162037037037 (internamente 0.62162037037037) então o conteúdo foi corretamente convertido para Decimal e portanto está apto para ser usado em cálculos ou no seu teste lógico com o valor 0.5.
Se seu código não está respondendo como vc imagina, então o problema pode estar no conteúdo da variável "datanova" ou no da variável "i" ou ainda no da variável "TotalDeLinhas" do loop. Infelizmente com o fragmento de código que foi passado não é possível chegar a uma conclusão mais satisfatória.
Entretanto, pelo menos para a variável datanova vc pode testar antes do loop da seguinte forma:
If Not IsDate(datanova) Then MsgBox "Não é possível avaliar a variável datanova como contendo uma data válida" Exit Sub End If
Realmente Edson, era um problema de logica que gerava um loop eterno.
Muito obrigado por abrir minha mente..
Obrigado a todos que ajudaram...