Bị lổi công thức tính toán trong TextBox. (1 người xem)

Liên hệ QC

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

thanhtam348

Thành viên thường trực
Tham gia
9/3/07
Bài viết
288
Được thích
62
Trong Form tôi có một số TextBox và dùng công thức để tính toán như thế nầy:
PHP:
TextBox11 = Format((TextBox8) + CDbl(TextBox9)) * (TextBox3) + CDbl((TextBox3) / 8 * TextBox10) * 1.5

Tôi không biết nó lổi chổ nào, nhưng khi mở Form Click vào ListBox để lấy DL đưa vào các TextBox mà thấy - nếu dòng nào trong ListBox không có DL cho TextBox9 và TextBox10 thì TextBox11 sẽ bị lổi, nếu chèn thêm dòng On Error Resume Next vào thì không báo lổi nhưng TextBox11 bị "đơ" không phát huy được nửa.
Xin các anh chị mình mách chỉ dùm.
 
Lỗi là sao bạn dùng On Error Resume Next thì khi không lỗi vẫn tính toán bình thường mà bạn, bạn có thể check coi textbox nào chưa nhập liệu thì thông báo hoặc cho giá trị textbox là 0 rồi tính toán lại

PHP:
Dim txt As Control
For Each txt In Controls
If TypeOf txt Is msforms.TextBox Then
    If txt.Value = "" Then txt.Value = 0    'Thay the txt.value =0 thanh MsgBox "Ban chua dien du lieu vao " & txt.Name
End If
TextBox11 = Format((TextBox8) + CDbl(TextBox9)) * (TextBox3) + CDbl((TextBox3) / 8 * TextBox10) * 1.5  
Next
 
Upvote 0
Trong Form tôi có một số TextBox và dùng công thức để tính toán như thế nầy:
PHP:
TextBox11 = Format((TextBox8) + CDbl(TextBox9)) * (TextBox3) + CDbl((TextBox3) / 8 * TextBox10) * 1.5

Tôi không biết nó lổi chổ nào, nhưng khi mở Form Click vào ListBox để lấy DL đưa vào các TextBox mà thấy - nếu dòng nào trong ListBox không có DL cho TextBox9 và TextBox10 thì TextBox11 sẽ bị lổi, nếu chèn thêm dòng On Error Resume Next vào thì không báo lổi nhưng TextBox11 bị "đơ" không phát huy được nửa.
Xin các anh chị mình mách chỉ dùm.
Thay vì đưa trực tiếp giá trị TextBox vào biểu thức, bạn nên đặt biến thế này:
Mã:
Dim dTbx1 as Double, dTbx2 as Double....
On Error Resume Next
dTbx1 = CDbl(TextBox1.Text)
dTbx2 = CDbl(TextBox2.Text)
''...... vân vân....
TextBox11 = dTbx8 + dTbx9 .....
Do có dòng On Error Resume Next ở trên đầu code nên khi TextBox không có dữ liệu, thậm chí là dữ liệu không đúng chuẩn thì sẽ phát sinh lỗi, dẫn đến các biến Double đã đặt trước sẽ có giá trị = 0 ----> Chẳng ảnh hưởng gì đến việc tính toán cả
Còn nếu cố tình đưa trực tiếp giá trị TextBox vào biểu thức, khi gặp lỗi và có On Error Resume Next ở đầu code, nó sẽ cho qua, đồng thời cũng chẳng tính toán gì cả
-----------------
Đây là 1 trong những kinh nghiệm khi lập trình đấy <---- Lúc nào cần đặt biến, lúc nào không cần nên cân nhắc cho kỹ (không phải cứ thấy người ta làm mà bắt chước y chang là được đâu)
Ngoài ra, khi lấy giá trị của TextBox để tính toán với các số thập phân, phải xem lại các thiết lập trong control panel (dấu nào là dấu thập phân mà Windows quy định)... Nếu nhắm mắt làm bừa, lỗi phát sinh còn đở... nó ra kết quả sai đến tận Siberia là.. chết luôn
 
Lần chỉnh sửa cuối:
Upvote 0
Ý mình muốn thực hiện công việc cho TextBox4 như dưới đây:
TextBox4 = (TextBox8 + TextBox9) < (TextBox17 - Sheet06.Range("F4")) = "" nhưng vì không rành nên làm hoài mà nó không cho kết quả, Xin nhờ anh chị giúp cho. Cám ơn nhiều.
 
Upvote 0
Ý mình muốn thực hiện công việc cho TextBox4 như dưới đây:
TextBox4= (TextBox8 + TextBox9) < (TextBox17 - Sheet06.Range("F4")) = "" nhưng vì không rành nên làm hoài mà nó không cho kết quả, Xin nhờ anh chị giúp cho. Cám ơn nhiều.

Gợi ý là vậy, còn muốn chi tiết, bạn phải cho file lên đây chứ
 
Upvote 0
Xin cám ơn anh ndu96081631 có ý giúp đở.
Mình chiết xuất ra và gởi lên đây nhờ anh xem dùm vì không biết làm sao để giả lập nó, chỉ sợ anh gặp cách làm trong File của mình thì...tối mắt hỏa lên. hì hì...
Nói thật có những cái anh chị góp ý nhưng cũng không làm được, hỏi hoài thì không dám, ngại ngại làm sao...
Ý mình là đang làm một Form để sữa DL chấm công, anh mở Form SuaDLtho và xem code mình không làm được - có viết ghi chú trong đó, còn cái mình hỏi ở bài trên là một CT khác cũng tương tựa mà mình đang giả lập các TextBox để...thử. Cám ơn anh và các bạn.
 

File đính kèm

Upvote 0
Xin cám ơn anh ndu96081631 có ý giúp đở.
Mình chiết xuất ra và gởi lên đây nhờ anh xem dùm vì không biết làm sao để giả lập nó, chỉ sợ anh gặp cách làm trong File của mình thì...tối mắt hỏa lên. hì hì...
Nói thật có những cái anh chị góp ý nhưng cũng không làm được, hỏi hoài thì không dám, ngại ngại làm sao...
Ý mình là đang làm một Form để sữa DL chấm công, anh mở Form SuaDLtho và xem code mình không làm được - có viết ghi chú trong đó, còn cái mình hỏi ở bài trên là một CT khác cũng tương tựa mà mình đang giả lập các TextBox để...thử. Cám ơn anh và các bạn.
Trong file có đoạn:
Mã:
Me.TextBox4 = ((TextBox8) + CDbl(TextBox9) + CDbl(TextBox12) + CDbl(TextBox13)) < (TextBox17 - Sheet06.Range("F4")) = "0"
Tôi hoàn toàn không hiểu ý bạn muốn cái gì cả
Bạn vui lòng giải thích xem
 
Upvote 0
Anh ndu96081631 thông cảm vì hôm nay mới về lên máy.
- TextBox8-9-12-13, Đó là các TextBox chứa ngày làm trong tháng - bao gồm ngày thường và chủ nhật, cộng các TextBox đó lại để được tổng ngày làm trong tháng đó của thợ.
- TextBox17 hiển thị tổng số ngày mặc định của tháng đó (có trừ các ngày chủ nhật để còn lại)
- Sheet06.Range("F4") là ấn định số ngày được nghỉ có lý do ở Sheet LapSoCongNhat cột F4.
Ý định của mình là: Cộng các TextBox lấy tổng ngày làm của thợ so sánh với tổng số ngày trong tháng đó ở TextBox17 (TextBox17 có trừ số ngày được nghỉ ở Sheet LapSoCongNhat F4). Nếu tổng số ngày làm của thợ nhỏ nhơn số ngày (TextBox17 có trừ số ngày được nghỉ ở Sheet LapSoCongNhat F4) thì TextBox4 sẽ rỗng. (tương tựa như Sheet LapSoCongNhat G5).
Mời anh xem lại dùm File em gởi kèm theo và giúp đở dùm mình. Cám ơn anh.
 

File đính kèm

Upvote 0
Ý định của mình là: Cộng các TextBox lấy tổng ngày làm của thợ so sánh với tổng số ngày trong tháng đó ở TextBox17 (TextBox17 có trừ số ngày được nghỉ ở Sheet LapSoCongNhat F4). Nếu tổng số ngày làm của thợ nhỏ nhơn số ngày (TextBox17 có trừ số ngày được nghỉ ở Sheet LapSoCongNhat F4) thì TextBox4 sẽ rỗng. (tương tựa như Sheet LapSoCongNhat G5).
Mời anh xem lại dùm File em gởi kèm theo và giúp đở dùm mình. Cám ơn anh.
Ý bạn thế nào thì cứ dùng IF đi cho đơn giản ---> Viết 1 biểu thức tùm lum thế tôi chẳng hiểu tí nào
Ví dụ
Mã:
If Cái gì < Cái gì then
  TextBox4 = ""
Else
  TextBox4 = ???
End Ì
 
Upvote 0
Thì anh hãy giúp mình theo cách anh đi, mình nêu ý tưởng ở trên, cũng như trong file vừa gởi kèm, còn "cái gì...cái gì..." anh hỏi đó chẳng qua là cái mình... không biết làm mà. Cám ơn anh nhiều.
 
Upvote 0
Thì anh hãy giúp mình theo cách anh đi, mình nêu ý tưởng ở trên, cũng như trong file vừa gởi kèm, còn "cái gì...cái gì..." anh hỏi đó chẳng qua là cái mình... không biết làm mà. Cám ơn anh nhiều.

Bạn định nhập vào TextBox4 cái gì? Rằng nếu đk nào đó thỏa (đk mất bồi dưỡng?) thì TextBox4 = "0"? Thế nếu không thỏa thì nhập gì? Nhập tiền bồi dưỡng được hưởng? Thế thì:
Mã:
if (đk mất bồi dưỡng) then
 TextBox4 = "0"
else
 TextBox4 = (biểu thức tính tiền bồi dưỡng)
end if
Thế thôi
Bạn nói là bạn muốn làm như cột G?. Vậy thì ta mổ xẻ cái cột G đó. Code của nó là:
Mã:
if F5 = "" then
 bd = 0
elseif SUM(I5:J5)+SUM(L5:M5)<(W5-$F$4) then
 bd = 0
elseif H5>=$G$4 then
 bd = 0
else
 bd = (E5*W5*F5/$G$4)*($G$4-H5)
end if
Hoặc là:
Mã:
mat_qui_den = (Len(F5) = 0) or (SUM(I5:J5)+SUM(L5:M5)<(W5-$F$4)) or (H5>=$G$4)
if mat_qui_den then
 textBox4 = "0"
else
 TextBox4 = (E5*W5*F5/$G$4)*($G$4-H5)
end if
Tất nhiên code ở trên chỉ là giải nghĩa. Bạn phải viết đúng cú pháp, và tự xác định vd. cột E, F, I, J, G, H, W ở sheet LapSoCongNhat ứng với TextBox nào trên Form.
 
Upvote 0
Cám ơn siwtom ! - mình đang làm thử theo gợi ý của bạn. cám ơn bạn.
 
Upvote 0
Web KT

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

Back
Top Bottom