تخطي إلى المحتوى الرئيسي
الدعم
تسجيل الدخول باستخدام حساب 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 وخدماتها. سيتمكن مسؤول تكنولوجيا المعلومات لديك من جمع هذه البيانات. بيان الخصوصية.

نشكرك على ملاحظاتك!

×