דלג לתוכן הראשי
היכנס דרך Microsoft
היכנס או צור חשבון.
שלום,
בחר חשבון אחר.
יש לך חשבונות מרובים
בחר את החשבון שברצונך להיכנס באמצעותו.

תוכן 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

זקוק לעזרה נוספת?

מעוניין באפשרויות נוספות?

גלה את יתרונות המנוי, עיין בקורסי הדרכה, למד כיצד לאבטח את המכשיר שלך ועוד.

קהילות עוזרות לך לשאול שאלות ולהשיב עליהן, לתת משוב ולשמוע ממומחים בעלי ידע עשיר.

האם מידע זה היה שימושי?

עד כמה אתם מרוצים מאיכות השפה?
מה השפיע על החוויה שלך?
בלחיצה על 'שלח', אתה מאפשר למשוב שלך לשפר מוצרים ושירותים של Microsoft. מנהל ה-IT שלך יוכל לאסוף נתונים אלה. הצהרת הפרטיות.

תודה על המשוב!

×