Содержимое 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 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
Эта статья посвящена документу TechKnow это ИД:10036