Bỏ qua để tới nội dung chính
Đăng nhập với Microsoft
Đăng nhập hoặc tạo một tài khoản.
Xin chào,
Chọn một tài khoản khác.
Bạn có nhiều tài khoản
Chọn tài khoản bạn muốn đăng nhập.

TechKnowledge Content

Hỏi: Mã VBA đã được viết để so sánh hai giá trị tiền tệ. Dưới đây là một ví dụ về mã này:

If ccur(cost) > ccur(1000) then

Khi dòng mã này thực thi, nó gây ra thông báo lỗi kiểu dữ liệu không tương thích hoặc loại lỗi không khớp. Cài Windows tiền tệ hiện được xác định là ký hiệu "cân Anh" tiếng Anh cho ký hiệu tiền tệ. Nếu tôi thay đổi ký hiệu tiền tệ thành "$", mã sẽ chạy thành công. Điều gì đang xảy ra ở đây và có cách nào để giải quyết vấn đề này không?


Đáp: Trong VBA, hàm Ccur() luôn tôn trọng thiết đặt tiền tệ của Panel Điều khiển khi đánh giá trường này. Vì VBA của Dynamics sẽ luôn thông qua giá trị trường của mình dưới dạng chuỗi nên bạn sẽ gặp sự cố này bất cứ khi nào giá trị tiền tệ được đánh giá không khớp với cài đặt tiền tệ trong Windows.


Trong tệp trợ giúp VBA, nó cho biết rằng các hàm chuyển đổi kiểu dữ liệu nên được sử dụng thay cho Val để cung cấp các chuyển đổi nhận thức quốc tế từ kiểu dữ liệu này sang kiểu dữ liệu khác. Ví dụ: khi bạn dùng hàm CCur(), dấu tách thập phân khác nhau, dấu tách hàng nghìn khác nhau và nhiều tùy chọn tiền tệ khác nhau được nhận diện đúng cách tùy thuộc vào thiết đặt bản địa của máy tính.


Để hiểu rõ hơn, hãy lưu ý điều này về cách làm việc với Microsoft Dynamics GP:

  • CCur("œ1000") sẽ bằng một loại không khớp (ví dụ: chuỗi này không phải là tiền tệ hợp lệ) nếu cài đặt tiền tệ Windows không được đặt là "pound".

  • Nếu được đặt là "pound" thì CCur("œ1000") sẽ trả về giá trị 1000 nhưng khi đó CCur("$1000") sẽ bằng với một lỗi không khớp loại.

Cách tốt nhất để xử lý tiền tệ từ VBA là viết một hàm sẽ chuyển đổi bất kỳ chuỗi nào có ký hiệu không phải số ở trước thành giá trị số (hoặc tiền tệ). Ví dụ, như thế này:

If CurrencyValueFromDynField(cost) > ccur(1000) then

trong đó hàm có tên là CurrencyValueFromDynField được xác định như sau. Mã này xử lý chính xác các số âm có dấu trừ tiến hành hoặc ở sau, nằm trong dấu ngoặc vuông hoặc có khoảng trắng giữa ký hiệu tiền tệ và số.

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

Bài viết này đã được TechKnowledge Document ID:10036

Bạn cần thêm trợ giúp?

Bạn muốn xem các tùy chọn khác?

Khám phá các lợi ích của gói đăng ký, xem qua các khóa đào tạo, tìm hiểu cách bảo mật thiết bị của bạn và hơn thế nữa.

Cộng đồng giúp bạn đặt và trả lời các câu hỏi, cung cấp phản hồi và lắng nghe ý kiến từ các chuyên gia có kiến thức phong phú.

Thông tin này có hữu ích không?

Bạn hài lòng đến đâu với chất lượng dịch thuật?
Điều gì ảnh hưởng đến trải nghiệm của bạn?
Khi nhấn gửi, phản hồi của bạn sẽ được sử dụng để cải thiện các sản phẩm và dịch vụ của Microsoft. Người quản trị CNTT của bạn sẽ có thể thu thập dữ liệu này. Điều khoản về quyền riêng tư.

Cảm ơn phản hồi của bạn!

×