Notifications
Clear all

conflito enter variável com separador "," e código com "."

8 Posts
4 Usuários
0 Reactions
1,359 Visualizações
(@4ntunes)
Posts: 26
Eminent Member
Topic starter
 

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

:shock:

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

 
Postado : 27/07/2016 8:01 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

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

 
Postado : 27/07/2016 8:17 am
(@4ntunes)
Posts: 26
Eminent Member
Topic starter
 

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.

 
Postado : 27/07/2016 8:27 am
(@edcronos2)
Posts: 346
Reputable Member
 

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

 
Postado : 27/07/2016 8:37 am
(@4ntunes)
Posts: 26
Eminent Member
Topic starter
 

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" **

 
Postado : 27/07/2016 8:57 am
(@edcronos2)
Posts: 346
Reputable Member
 

pq não tenta
Loop While a >"0,5" And i <> TotalDeLinhas <----

Sub tttttt()
a = "0,588885443588"

MsgBox a > "0,59"
End Sub

 
Postado : 27/07/2016 9:20 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

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

 
Postado : 27/07/2016 12:36 pm
(@4ntunes)
Posts: 26
Eminent Member
Topic starter
 

Realmente Edson, era um problema de logica que gerava um loop eterno.
Muito obrigado por abrir minha mente..

Obrigado a todos que ajudaram...

 
Postado : 27/07/2016 1:31 pm