Iniciar sesión con Microsoft
Iniciar sesión o crear una cuenta
Hola:
Seleccione una cuenta diferente.
Tiene varias cuentas
Elija la cuenta con la que desea iniciar sesión.

Contenido de TechKnowledge

Pregunta: Se ha escrito un código de VBA que compara dos valores de moneda. A continuación se muestra un ejemplo de este código:

If ccur(cost) > ccur(1000) then

Cuando se ejecuta esta línea de código, provoca un mensaje de error de tipo de coincidencia de tipo de datos o incompatibilidad de tipo. La Windows de moneda se define actualmente como símbolo de "libras" en inglés para el símbolo de moneda. Si cambio el símbolo de moneda a "$", el código se ejecuta correctamente. ¿Qué ocurre aquí y hay alguna forma de solucionar este problema?


Respuesta: En VBA, la función Ccur() siempre respeta la configuración de moneda del Panel de control al evaluar este campo. Puesto que la implementación de VBA de Dynamics siempre pasará sus valores de campo como cadenas, tendrá este problema siempre que se evalúe un valor de moneda que no coincida con la configuración de moneda en Windows.


En el archivo de ayuda de VBA, indica que las funciones de conversión de tipos de datos se deben usar en lugar de Val para proporcionar conversiones internacionales conscientes de un tipo de datos a otro. Por ejemplo, cuando se usa la función CCur(), se reconocen correctamente separadores decimales diferentes, separadores de miles diferentes y varias opciones de moneda según la configuración regional del equipo.


En este entendimiento, tenga en cuenta lo siguiente sobre cómo trabajar con Microsoft Dynamics GP:

  • CCur("œ1000") será igual a una falta de coincidencia de tipo (es decir, esta cadena no es una moneda válida) si la configuración de moneda de Windows no está establecida en "libra".

  • Si se establece en "libra", CCur("œ1000") devolverá un valor de 1000, pero CCur("1000 $") será igual a un error de no coincidencia de tipo.

La mejor manera de tratar las monedas de VBA sería escribir una función que convierta cualquier cadena con símbolos no numéricos delante en un valor numérico (o moneda). Por ejemplo, como esta:

If CurrencyValueFromDynField(cost) > ccur(1000) then

donde la función denominada CurrencyValueFromDynField se define de la siguiente manera. Este código controla correctamente los números negativos que tienen signos menos finales o finales, que están entre corchetes o que tienen espacios entre el símbolo de moneda y el 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 artículo era TechKnowledge Document ID:10036

¿Necesita más ayuda?

¿Quiere más opciones?

Explore las ventajas de las suscripciones, examine los cursos de aprendizaje, aprenda a proteger su dispositivo y mucho más.

Las comunidades le ayudan a formular y responder preguntas, enviar comentarios y leer a expertos con conocimientos extensos.

¿Le ha sido útil esta información?

¿Cuál es tu grado de satisfacción con la calidad del lenguaje?
¿Qué ha afectado a su experiencia?
Si presiona Enviar, sus comentarios se usarán para mejorar los productos y servicios de Microsoft. El administrador de TI podrá recopilar estos datos. Declaración de privacidad.

¡Gracias por sus comentarios!

×