Entrar com a conta da Microsoft
Entrar ou criar uma conta.
Olá,
Selecionar uma conta diferente.
Você tem várias contas
Escolha a conta com a qual você deseja entrar.

Conteúdo techknowledge

Pergunta: o código VBA foi escrito que compara dois valores de moeda. Veja a seguir um exemplo deste código:

If ccur(cost) > ccur(1000) then

Quando essa linha de código é executada, ela causa uma incompatibilidade de tipo de dados ou uma mensagem de erro de tipo de incompatibilidade de tipo. As Windows Conversor de Moedas configurações atuais são definidas como símbolo "libras" em inglês para o símbolo de moeda. Se eu alterar o símbolo de moeda para "$", o código será executado com êxito. O que está ocorrendo aqui e há alguma maneira de resolver esse problema?


Resposta: no VBA, a função Ccur() sempre respeita as configurações de moeda do Painel de Controle ao avaliar esse campo. Como a implementação do VBA do Dynamics sempre passará seus valores de campo como cadeias de caracteres, você terá esse problema sempre que um valor de moeda for avaliado que não corresponder às configurações de moeda no Windows.


No arquivo de ajuda do VBA, ele indica que as funções de conversão do tipo de dados devem ser usadas em vez de Val para fornecer conversões internacionalmente cientes de um tipo de dados para outro. Por exemplo, quando você usa a função CCur(), separadores decimais diferentes, separadores de mil diferentes e várias opções de moeda são reconhecidos corretamente, dependendo da configuração de localidade do computador.


Nesse entendimento, observe isso sobre como trabalhar com o Microsoft Dynamics GP:

  • CCur("œ1000") será igual a uma incompatibilidade de tipo (ou seja, essa cadeia de caracteres não é uma moeda válida) se a configuração Windows Conversor de Moedas não estiver definida como "libra".

  • Se estiver definido como "pound", CCur("œ1000") retornará um valor de 1000, mas CCur("$1000") será igual a um erro de incompatibilidade de tipo.

A melhor maneira de lidar com moedas do VBA seria gravar uma função que converterá qualquer cadeia de caracteres com símbolos não numéricos na frente em um valor numérico (ou moeda). Por exemplo, assim:

If CurrencyValueFromDynField(cost) > ccur(1000) then

onde a função denominada CurrencyValueFromDynField é definida da seguinte forma. Esse código lida corretamente com números negativos que têm sinais de menos em andamento ou à parte, que estão rodeados por colchetes ou que têm espaços entre o símbolo de moeda e o número.

Public Function CurrencyValueFromDynField(FieldString As String) As Currency
Dim i As Integer
Dim TempChar, TempString As String

' Strip off all non-numeric characters
TempString = ""
For i = 1 To Len(FieldString)
TempChar = Mid(FieldString, i, 1)
If InStr("1234567890.,-()", TempChar) > 0 Then
TempString = TempString & TempChar
End If
Next
FieldString = TempString

' Return the numeric value of the string (as a currency data type )
CurrencyValueFromDynField = CCur(FieldString)
End Function

Este artigo foi TechKnowledge Document ID:10036

Precisa de mais ajuda?

Quer mais opções

Explore os benefícios da assinatura, procure cursos de treinamento, saiba como proteger seu dispositivo e muito mais.

As comunidades ajudam você a fazer e responder perguntas, fazer comentários e ouvir especialistas com conhecimento avançado.

Essas informações foram úteis?

Qual é o seu grau de satisfação com a qualidade do idioma?
O que afetou sua experiência?
Ao pressionar enviar, seus comentários serão usados para aprimorar os produtos e serviços da Microsoft. Seu administrador de TI poderá coletar esses dados. Política de Privacidade.

Agradecemos seus comentários!

×