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