TechKnowledge Content

Запитання. Написано код 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

Ідентифікатор документа TechKnowledge Document ID:10036 у цій статті

Потрібна додаткова довідка?

Потрібні додаткові параметри?

Ознайомтеся з перевагами передплати, перегляньте навчальні курси, дізнайтесь, як захистити свій пристрій тощо.

Спільноти допомагають ставити запитання й відповідати на них, надавати відгуки та дізнаватися думки висококваліфікованих експертів.