Em thay đổi thiết lập dấu phân cách trong Control rồi thử hàm ở bài #1540 thì 2 trường hợp: Dấu phân cách phần thập phân là dấu chấm/ Hoặc dấu phẩy thì đều cho kết quả đúng.
Em cũng nhớ mang máng có một anh nói cái này rồi, chờ anh đó vào nhắc lại (có thể em nhớ nhầm).
Cụ thể là thế này:
1. Ở
ngoài trang tính thì dùng thiết lập trong "Use system separators". Mặc định thì là dùng thiết lập của system. Tức nếu system thiết lập dấu phẩy là dấu thập phân và "Use ..." để mặc định thì khi nhập vào A1 = 2,1 thi đó là số, còn nếu nhập vào A1 = 2.1 thì đó là chuỗi. Nếu system vẫn thiết lập dấu phẩy là dấu thập phân và "Use ..." chuyển thành dấu chấm là dấu thập phân thì khi nhập vào A1 = 2,1 thi đó là chuỗi, còn nếu nhập vào A1 = 2.1 thì đó là số.
2. Dù thiết lập "Use ..." mặc định hay thay đổi thì
giá trị số (chỉ giá trị số thôi vì chuỗi thì luôn truyền y nguyên)
truyền vào các code VBA luôn lấy thiết lập của system. Tức nếu system thiết lập dấu phẩy là dấu thập phân và "Use ..." để mặc định, tức dấu phẩy là dấu thập phân, thì với A1 = 2,1 giá trị truyền vào code là 2,1. Nếu thiết lập system vẫn thế nhưng người ta đổi "Use ..." thành: dấu chấm là dấu thập phân thì trên trang tính A = 2.1 là số, nhưng giá trị truyền vào code là 2,1 - lấy thiết lập của system.
3.
Hàm Evaluate luôn luôn dùng dấu chấm là dấu thập phân. Nếu giá trị đưa vào chứa dấu chấm thì hàm Evaluate coi là số và tính toán. Nếu giá trị đưa vào chứa dấu phẩy thì hàm coi như là chuỗi và không tính toán được nên có lỗi.
Tại sao người hỏi nhìn thấy 2.1 là số mà lại có lỗi?
Do người ta không đưa tập tin nên tôi chỉ đoán mò là họ có thiết lập
trong system dấu phẩy là dấu thập phân nhưng họ đã sửa mặc định "Use ..." thành dấu thập phân là dấu chấm. Lúc này A1 = 2.1 là số (điểm 1) nhưng giá trị truyền vào code là 2,1 (lấy thiết lập của system - điểm 2). Evaluate chỉ chấp nhận dấu chấm là dấu thập phân nên sẽ có lỗi.
Em thay đổi thiết lập dấu phân cách trong Control rồi thử hàm ở bài #1540 thì 2 trường hợp: Dấu phân cách phần thập phân là dấu chấm/ Hoặc dấu phẩy thì đều cho kết quả đúng.
Bởi
bạn không thay đổi mặc định "Use ..." như người ta.
A. Bạn thiết lập
trong system dấu chấm là dấu thập phân.
Lúc này nếu bạn nhập A1 = 2.1 thì đó là số. Giá trị truyền vào code cũng là 2.1 vì lấy theo thiết lập của system - điểm 2. Evaluate coi 2.1 là số - điểm 3, nên không có lỗi.
B. Bạn thiết lập
trong system dấu phẩy là dấu thập phân.
Lúc này nếu bạn nhập A1 = 2.1 thì đó là chuỗi. Giá trị truyền vào code cũng là 2.1 vì đó là chuỗi chứ không là số. Evaluate coi 2.1 là số - điểm 3, nên không có lỗi
Nếu bây giờ vẫn thiết lập như điểm B nhưng bạn nhập A1 = 2,1 thì rõ ràng nó là số. Giá trị truyền vào code cũng là 2,1 vì lấy theo thiết lập của system - điểm 2. Nhưng Evaluate không coi 2,1 là số - điểm 3, nên sẽ có lỗi. Bạn thử sẽ thấy.
Do Evaluate
chỉ chấp nhận dấu chấm (điểm 3) nên code của
PacificPR luôn chuyển dấu phẩy nếu có thành dấu chấm.