Перейти к основному контенту
Поддержка
Войдите с помощью учетной записи Майкрософт
Войдите или создайте учетную запись.
Здравствуйте,
Выберите другую учетную запись.
У вас несколько учетных записей
Выберите учетную запись, с помощью которой нужно войти.

Содержимое 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

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

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

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

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

Были ли сведения полезными?

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?
После нажатия кнопки "Отправить" ваш отзыв будет использован для улучшения продуктов и служб Майкрософт. Эти данные будут доступны для сбора ИТ-администратору. Заявление о конфиденциальности.

Спасибо за ваш отзыв!

×