Содержимое TechKnow ветвей

Вопрос. Был написан код VBA, который сравнивает два значения валют. Ниже приведен пример такого кода:

If ccur(cost) > ccur(1000) then

Выполнение этой строки кода приводит к несовместимости типов данных или ошибке несоответствия типов данных. Параметры Windows валюты в настоящее время определены как символ "русский". Если изменить символ валюты на $, код будет успешно с кодом. Что происходит и как можно обойти эту проблему? Ответ. В VBA функция Ccur() всегда соблюдает параметры валюты панели управления при оценке этого поля. Так как реализация Dynamics VBA всегда передает значения полей в качестве строк, эта проблема возникает в любое время при оценке значения валюты, которое не соответствует значениям валюты в Windows.В файле справки VBA указывается, что функции преобразования типов данных следует использовать вместо функции Val для преобразования типов данных на международные стандарты. Например, при использовании функции CCur() в зависимости от региональных параметров компьютера распознаются различные десятичных, тысячные и валютные параметры.В данном случае обратите внимание на эту информацию о работе с Microsoft Dynamics GP:

  • CCur("жи1000") будет равняться несоответствию типов (т. е. эта строка не является допустимой валютой), если в параметре валюты Windows не за установлено "фунт".

  • Если за установлено значение "фунт", то CCur("делю1000") возвращает значение 1000, а затем CCur("$1000") будет равняться ошибке несоответствия типов.

Лучший способ работы с валютами из VBA — написать функцию, которая преобразует строку с не числовой символикой на передний или денежный. Например, вот так:

If CurrencyValueFromDynField(cost) > ccur(1000) then

где функция CurrencyValueFromDynField определена следующим образом: Этот код правильно обрабатывает отрицательные числа, которые имеют знаки "минус", которые находятся в квадратных скобках или имеют пробелы между символом валюты и числом.

Public Function CurrencyValueFromDynField(FieldString As String) As CurrencyDim i As IntegerDim TempChar, TempString As String' Strip off all non-numeric charactersTempString = ""For i = 1 To Len(FieldString)TempChar = Mid(FieldString, i, 1)If InStr("1234567890.,-()", TempChar) > 0 ThenTempString = TempString & TempCharEnd IfNextFieldString = TempString' Return the numeric value of the string (as a currency data type )CurrencyValueFromDynField = CCur(FieldString)End Function

Эта статья посвящена документу TechKnow это ИД:10036

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.