USB1394
Thành viên hoạt động



- Tham gia
- 20/12/08
- Bài viết
- 173
- Được thích
- 12
- Nghề nghiệp
- Lính triều đình
Trường hợp 1 : Ta nhập giá trị trong sheet là 0,2 nhưng khi load lên form để dùng thì VBA hiểu là 2
Trường hợp 2 : Ta nhập trên form là 2.000 nhưng khi nạp vào sheet thì VBA hiểu là 2
Mong các bạn hướng dẫn cách khác phục , xin cám ơn![]()
Trường hợp 1 : thế này bạn nhé , tai cell [H4] ta nhập 0,2 . Trên form ta thực hiện tính toán (minh họa nhé) = [H4].value * 100 . thay vì KQ đúng = 20 nhưng VBA lại tính = 200 (sai) . Nghĩa là VBA hiểu giá trị [H4].value là 2 chứ không phải là 0,2
Trường hợp , bạn giải quyết thế là cũng không đc . Bạn có thể mở form và nhập 2.000 và nhấn nút thì thấy liền
= Cdbl([H4])*100
Nếu bạn chỉnh sử Region Language thành Việt Nam, thì chưa chắc Excel đã đổi dấu (,) thành dấu (.)
Để chắc ăn bạn thử phải check lại : xem VietNamees đã được install chưa , hoặc vào Option --> Advance --> Decimal SeParator để là dấu ,
Test lại thử xem :
PHP:= Cdbl([H4])*100
Mấu chốt vấn đề nằm ở chổ: Cho dù có đổi Control Panel thành cái gì thì trong VBA nó vẫn có dùng các dấu theo mặc định (tức dấu phẩy luôn là dấu phân cách ngàn và dấu chấm luôn là dấu thập phân)
Em cũng từng suy nghĩ như thế . vậy xin hỏi anh nếu viết ứng dụng bằng VBA thì có cách nào thay đổi điều này không anh ?
Mấu chốt vấn đề nằm ở chổ: Cho dù có đổi Control Panel thành cái gì thì trong VBA nó vẫn có dùng các dấu theo mặc định (tức dấu phẩy luôn là dấu phân cách ngàn và dấu chấm luôn là dấu thập phân)
Vậy trong 2 t/h của e thì dùng code như thế nào ? mong anh giúp viết dùm code vì trình độ e chưa nhiều lắm . Xin cám ơn anhThì trước khi tính toán, bạn phải Replace các dấu phẩy và chấm thành mặc định
(tức phải làm sao để dấu chấm luôn là dấu thập phân và dấu phẩy luôn là dấu phân cách ngàn)
Tôi luôn để Control Panel mặc định theo kiểu Mỹ nên chẳng bao giờ bị tình huống ngớ ngẩn này.
Các bạn cũng nên làm như vậy đi. Đến khi xuất kết quả cuối cùng, muốn đổi phẩy chấm gì đó, ta đổi 1 lần duy nhất là xong
Cho dù có đổi Control Panel thành cái gì thì trong VBA nó vẫn có dùng các dấu theo mặc định (tức dấu phẩy luôn là dấu phân cách ngàn và dấu chấm luôn là dấu thập phân)
Trường hợp 1 : thế này bạn nhé , tai cell [H4] ta nhập 0,2 . Trên form ta thực hiện tính toán (minh họa nhé) = [H4].value * 100 . thay vì KQ đúng = 20 nhưng VBA lại tính = 200 (sai) . Nghĩa là VBA hiểu giá trị [H4].value là 2 chứ không phải là 0,2
Trường hợp , bạn giải quyết thế là cũng không đc . Bạn có thể mở form và nhập 2.000 và nhấn nút thì thấy liền
Vâng! Thì vấn đề nằm ở đó.Tóm lại trong VBE chỉ gõ dấu chấm là dấu thập phân. Bỏ thói quen gõ dấu phẩy đi. Thế thôi
Bạn thay [H4].value * 100
Thành Replace([H4], ".", ",") *100 hoặc Replace([H4], ",", ".") *100 thử xem
Giải pháp này cho KQ mất đi số 0 ở đầu . VD : [H4].value = 0,2 sau khi Replace lên form gán vào Textbox.value = .2 (VBA báo lỗi)
Mình thử khác phục bằng cách thêm "0" vào trước chuỗi = Replace( "0" & [H4], ",", ".") thì cho ra hiển thị 0.2 nhưng tính toán lại ko chính xác . Tức là dùng nó để tính toán thì KQ cũng sai béc
Gởi ảnh bạn xem dùm nhé , xin cám ơn![]()
Làm lại cho bạn đây:Để đơn giản vấn đề mình gởi file để các bạn tham khảo , mong nhận đc sự giúp đỡ từ các bạn , xim cám ơn![]()
Bạn có thể nói cụ thể cách làm để mình học hỏi không ? , nhìn sơ thì code chẳng chỉnh sửa gì !! Control Panel thì mình cũng để những cũLàm lại cho bạn đây:
- Lấy từ Cell tính toán, hiện lên Form, xong gán xuống range xem thử, thấy OK với cả hai trường hợp chỉnh Control Panel.
(Bỏ bớt một số biến không cần thiết)
Bạn có thể nói cụ thể cách làm để mình học hỏi không ? , nhìn sơ thì code chẳng chỉnh sửa gì !! Control Panel thì mình cũng để những cũ
Nhưng mình thấy thế còn 2 vấn đề này nữa:
Thứ 1 : Trong bảng dữ liệu giá bán : 50.000 (ko có ,0) vậy nếu ta dùng form để chỉnh lại giá (tức gán từ form xuống sheet) thì sẽ là : 50.000,0 (có thêm ,0) . Vậy về mặt hình thức là không đc !
Thứ 2 : Ví dụ cột Giá bán nhé . Dữ liệu từ Sheet load Form là Number nhưng từ Form gán xuống Sheet là Text . Nếu ta tiếp tục các công việc tiếp theo (VD lấy giá trị giá bán mới để xét xem nó tăng hay giảm = dùng if) thì khó vì nó kho phải là Num mà là Text = Nếu dùng thì MSO sẽ báo lỗi sai kiểu tham chiếu chẳng hạn
Mong sớm nhận đc phúc đáp của bạn , xin cám ơn
Private Sub ComboBox1_Change()
Me.TextBox1.Value = Format(Me.ComboBox1.Column(1) * Sheet1.[C2], "#,##0")
' Me.TextBox1.Value = Format(Me.ComboBox1.Column(1) * Sheet1.[C2], "#,##0.00")
[B6] = Me.ComboBox1.Column(0)
[C6] = Me.TextBox1.Value * 1
End Sub