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 CurrencyDim i As IntegerDim TempChar, TempString As String' Strip off all non-numeric charactersTempString = ""For i = 1 To Len(FieldString)TempChar = Mid(FieldString, i, 1)If InStr("1234567890.,-()", TempChar) > 0 ThenTempString = TempString & TempCharEnd IfNextFieldString = TempString' Return the numeric value of the string (as a currency data type )CurrencyValueFromDynField = CCur(FieldString)End Function

บทความนี้คือ TechKnowledge Document ID:10036

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่

ต้องการตัวเลือกเพิ่มเติมหรือไม่

สํารวจสิทธิประโยชน์ของการสมัครใช้งาน เรียกดูหลักสูตรการฝึกอบรม เรียนรู้วิธีการรักษาความปลอดภัยอุปกรณ์ของคุณ และอื่นๆ

ชุมชนช่วยให้คุณถามและตอบคําถาม ให้คําติชม และรับฟังจากผู้เชี่ยวชาญที่มีความรู้มากมาย