Перейти до основного
Підтримка
Вхід
Вхід за допомогою облікового запису Microsoft
Увійдіть або створіть обліковий запис.
Вітаємо,
Виберіть інший обліковий запис.
У вас є кілька облікових записів
Виберіть обліковий запис, за допомогою якого потрібно ввійти.

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 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

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

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

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

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

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

Чи ця інформація була корисною?

Наскільки ви задоволені якістю мови?
Що вплинуло на ваші враження?
Натиснувши кнопку "Надіслати", ви надасте свій відгук для покращення продуктів і служб Microsoft. Ваш ІТ-адміністратор зможе збирати ці дані. Декларація про конфіденційність.

Дякуємо за відгук!

×