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
ที่ฟังก์ชันชื่อ CurrencyValusFromDynField ถูกกําหนดดังต่อไปนี้ โค้ดนี้จัดการตัวเลขติดลบที่มีเครื่องหมายลบต่อท้ายหรือต่อท้ายได้อย่างถูกต้อง ซึ่งล้อมรอบด้วยวงเล็บเหลี่ยม หรือที่มีช่องว่างระหว่างสัญลักษณ์สกุลเงินและตัวเลข
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