Khắc phục lỗi nhập và xử lý số trong VBA (1 người xem)

  • Thread starter Thread starter USB1394
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 

File đính kèm

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 2 : Ta nhập trên form là 2.000 nhưng khi nạp vào sheet thì VBA hiểu là 2---> Thử thêm câu lệnh này xem :[GPECODE=vb][H4].NumberFormat = "0.00"[/GPECODE]

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---> không hiểu ý bạn lắm
 
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
 
Lần chỉnh sửa cuối:
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

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
 
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)
 
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 ?
 
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 ?

Thì 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
 
Lần chỉnh sửa cuối:
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 ?
 
Thì 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
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 anh
 
mong sớm nhận đc sự giúp đỡ của các bạn, xin cám ơn
 
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)

Theo tôi điều trên chỉ có nghĩa là trong VBE chỉ có thể gõ: "0, chấm, 2" - tức 0.2 chứ không thể gõ 0, phẩy, 2 - tức 0,2. Tóm lại chỉ có thể gõ a = 0, chấm, 2 chứ gõ a = 0, phẩy, 2 thì nhấn được thông báo: Compile error: Expected: end of statement

Còn nếu tôi viết MsgBox 0,2*100 thì lập tức Editor đổi thành MsgBox 0, 2 * 100 - tức sau dấu phẩy có một khoảng trống "bí hiểm". Kết quả hiển thị là 0

--------------

Còn nếu trên sheet tôi gõ 0,2 thì dù trong CP dấu gì được thiết lập thì tôi cũng luôn nhận được kết quả đúng lạ 20 chứ không có chuyện 200

1. Trong CP dấu chấm là dấu thập phân - kết quả = 20

http://i788.photobucket.com/albums/yy164/khachquaduong_2009/CPcham_zps88f1331d.jpg

2. Trong CP dấu phẩy là dấu thập phân - kết quả = 20

http://i788.photobucket.com/albums/yy164/khachquaduong_2009/CPphay_zpsd47ba701.jpg

------------
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
 
Lần chỉnh sửa cuối:
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

Bạn thay [H4].value * 100

Thành Replace([H4], ".", ",") *100 hoặc Replace([H4], ",", ".") *100 thử xem
 
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
Vâng! Thì vấn đề nằm ở đó.
Trên sheet ta không nói (tại vì bác Bill thừa biết .Value là cái gì)... nhưng khi bạn ấy gõ vào TextBox (0,2) rồi lấy nó tính toán, sau đó gán xuống sheet sẽ bị sai hoàn toàn
 
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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 

File đính kèm

  • BC Loi.jpg
    BC Loi.jpg
    69.2 KB · Đọc: 43
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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Chịu thôi vì mình không có phần mểm xử lý trên ảnh, bạn có thể gởi file lên được không?
 
Để đơ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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 

File đính kèm

Để đơ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 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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)
 

File đính kèm

Lần chỉnh sửa cuối:
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 ( 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
 
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 ( 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

Có gì đâu mà nói nhỉ, chỉ là định dạng thôi mà, chưa cần dùng đến Replace (khi nào các con số bạn gán trong code sẽ phải dùng Replace).

Bạn phải linh động chứ, trên cell dư một số thập phân, sao bạn không dùng Format Cells để cắt?.

Vấn đề còn lại là trên TextBox1:

- Muốn hiện dấu phân cách hàng ngàn và hai số lẽ thập phân:

Me.TextBox1.Value = Format(Me.ComboBox1.Column(1) * Sheet1.[C2], "#,##0.00")


- Muốn hiện dấu phân cách hàng ngàn và bỏ phần thập phân:

Me.TextBox1.Value = Format(Me.ComboBox1.Column(1) * Sheet1.[C2], "#,##0")

- Muốn biến số dạng chuỗi thành dạng số để đưa xuống bảng tính thì không gì đơn giản hơn là nhân với 1:

Ví dụ: [C6] = Me.TextBox1.Value * 1

Cuối cùng code của ComboBox1_Change theo ý bạn có lẽ phải là:

Mã:
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
 
Lần chỉnh sửa cuối:
Với chỉ dẫn của Bạn , mình hiểu vấn đề và chỉnh lại chút xíu (thêm dòng : Range("C6").NumberFormat = "#,###" ) nhưng có 1 chỗ chưa "thông" . Trên Textbox có cách nào cho nó hiển thị giá bán : 50.000 thay vì đang hiển thị 50.000,0 (có ,0) . Mong Bạn chỉ dẫn (mình minh họa trong file đính kèm) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 

File đính kèm

Web KT

Bài viết mới nhất

Back
Top Bottom