ข้ามไปที่เนื้อหาหลัก
การสนับสนุน
ลงชื่อเข้าใช้
ลงชื่อเข้าใช้ด้วย 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

ที่ฟังก์ชันชื่อ 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

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

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

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

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

ข้อมูลนี้เป็นประโยชน์หรือไม่

คุณพึงพอใจกับคุณภาพภาษาเพียงใด
สิ่งที่ส่งผลต่อประสบการณ์ใช้งานของคุณ
เมื่อกดส่ง คำติชมของคุณจะถูกใช้เพื่อปรับปรุงผลิตภัณฑ์และบริการของ Microsoft ผู้ดูแลระบบ IT ของคุณจะสามารถรวบรวมข้อมูลนี้ได้ นโยบายความเป็นส่วนตัว

ขอบคุณสำหรับคำติชมของคุณ!

×