תוכן TechKnowledge
שאלה: קוד VBA נכתב והשווה בין שני ערכי מטבע. להלן דוגמה של קוד זה:
If ccur(cost) > ccur(1000) then
כאשר שורת קוד זו מבצעת, היא גורמת לאי-תאימות של סוג נתונים או לסוג הודעת שגיאה מסוג אי-התאמה. הגדרות Windows מטבע מוגדרות כעת כסמל "ליש"ט" באנגלית עבור סמל המטבע. אם אני משנה את סמל המטבע ל- "$", הקוד פועל בהצלחה. מה מתרחש כאן ויש דרך לעקוף בעיה זו?
תשובה: ב- VBA, הפונקציה Ccur() תמיד מכבדת את הגדרות המטבע בלוח הבקרה בעת הערכת שדה זה. מאחר שיישום ה- VBA של Dynamics יעביר תמיד את ערכי השדה שלו בתור מחרוזות, תהיה לך בעיה זו בכל פעם שערך מטבע מוערך תואם להגדרות המטבע ב- Windows. בקובץ העזרה של VBA, הוא מציין שיש להשתמש בפונקציות ההמרה מסוג הנתונים במקום ב- Val כדי לספק המרות מודעות בינלאומיות מסוג נתונים אחד לאחר. לדוגמה, בעת שימוש בפונקציה CCur() , מפרידים עשרוניים שונים, מפרידי אלפים שונים ואפשרויות מטבע שונות מזוהים כראוי בהתאם להגדרת האזור של המחשב שלך. תחת הבנה זו, שים לב לגבי עבודה עם Microsoft Dynamics GP:-
CCur("œ1000") יהיה שווה לאי-התאמה מסוג (כלומר, מחרוזת זו אינה מטבע חוקי) אם ההגדרה Windows Currency אינה מוגדרת ל- "pound".
-
אם הוא מוגדר ל- "pound" ולאחר מכן 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:10036