Tính toán cộng, trừ, nhân, chia với textbox

Liên hệ QC

sinzhang

Thành viên mới
Tham gia
18/8/13
Bài viết
20
Được thích
0
Các anh chị cho em xin code công thức "cộng, trừ, nhân, chia, tính tổng, tính công thức trong TextBox...." trong VBA với ạ.
Chân thành cám ơn !
 
Có một số chỗ cần chỉnh sửa nè anh ơi, anh chỉnh dùm em, cho em hỏi thêm ở mõi giá trị số liệu format thêm dấu "," thì làm sao hả anh ?
Untitled.jpg
 
Upvote 0
Bạn gửi lại cái hình to 1 chút mới đọc được để sửa 1 thể cùng 1 số ý kiến anh Ptm0412 tham gia rất hay cho bài.
 
Lần chỉnh sửa cuối:
Upvote 0
Mình sơ bộ theo yêu cầu của bạn và ý kiến của Bác Ptm0412.
Bạn tham khảo xem sao.
 

File đính kèm

  • Book1 (version 2).rar
    14.8 KB · Đọc: 81
Upvote 0
Ý của tôi tham gia thế này cơ:
Ngay khi vừa có ý định thoát ra khỏi textbox thì kiểm tra ngay, nếu dữ liệu không hợp lệ (phải là số) thì bắt làm lại ngay. Nếu textbox là số chia, phải kiểm tra nếu =0 hoặc để trống cũng bắt làm lại.

- Sự kiện BeforeUpdate chỉ kiểm tra khi có sự thay đổi: gõ thêm, sửa lại, xóa, ...
- Sự kiện Exit sẽ kiểm tra cả khi có thay đổi và không thay đổi.

Tùy theo ý muốn của mình mà dùng 1 trong 2 sự kiện trên. Nếu textbox có quyền để trống thì dùng BeforeUpdate, nếu không được phép để trống thì dùng Exit.

Thí dụ textbox13 là số bị chia, chỉ cần kiểm tra dữ liệu số:

PHP:
Private Sub TextBox13_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If Len(TextBox13) > 0 And Not IsNumeric(TextBox13) Then
    MsgBox "Phai go du lieu so": Cancel = True
Else
    SetAll
End If
End Sub

Thí dụ 2: textbox14 là không được quyền để trống vì là số chia:

PHP:
Private Sub TextBox14_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(TextBox14) > 0 And Not IsNumeric(TextBox14) Then
    MsgBox "Phai go du lieu so": Cancel = True
ElseIf Len(TextBox14) = 0 Or Val(TextBox14) = 0 Then MsgBox "Khong duoc de trong hoac bang zero": Cancel = True
Else
    SetAll
End If

End Sub

Như vậy code "SetAll" không cần kiểm tra lỗi nữa
 
Lần chỉnh sửa cuối:
Upvote 0
Anh Ptm0412 à, em hiểu ý anh nhưng có 1 vấn đề sử lý số liệu cho toàn Form còn rất dài, ví dụ khi dùng Cancel trong BeforeUpdate nó lại nảy sinh khi format số nó lại thành chuỗi và sự cố lại xảy ra. Vậy em muốn tham gia cách sử lý đơn giản nhất để bạn ấy dễ hiểu. Sau này bạn ấy còn phải hoàn chỉnh hơn nữa, nhất là áp dụng Class Module thay thế vài chục cái Sub nhàm chán trong Code nữa anh ạ. (Cái này em thích cái Class Module của Ndu lắm)
 
Lần chỉnh sửa cuối:
Upvote 0
Anh Ptm0412 à, em hiểu ý anh nhưng có 1 vấn đề sử lý số liệu cho toàn Form còn rất dài, ví dụ khi dùng Cancel trong BeforeUpdate nó lại nảy sinh khi format số nó lại thành chuỗi và sự cố lại xảy ra. Vậy em muốn tham gia cách sử lý đơn giản nhất để bạn ấy dễ hiểu. Sau này bạn ấy còn phải hoàn chỉnh hơn nữa, nhất là áp dụng Class Module thay thế vài chục cái Sub nhàm chán trong Code nữa anh ạ. (Cái này em thích cái Class Module của Ndu lắm)

1. Sử dụng format số thành chuỗi thực hiện sau khi các sự kiện Update & Exit xảy ra. Việc này chỉ xảy ra lỗi khi sử dụng sự kiện Change. Đó cũng là 1 sự khác biệt (nên tôi không dùng Change)

2. Để thay mấy chục cái Sub nhàm chán thì dùng Class đúng rồi. Nhưng tôi có cách khác đơn giản hơn, và form đỡ rối hơn:

- Form có 4 textbox số liệu cần tính toán. 4 hay bao nhiêu là theo yêu cầu của người dùng, đó là số tối đa các con số cần tính toán

- Có 1 textbox chứa công thức mà người dùng tự định nghĩa, thí dụ (a+b)*(b+c)*(c+a) gì gì đó, mở ngoặc đóng ngoặc đúng chỗ và đầy đủ. Gõ sai thì bị tính sai ráng chịu

- Code sẽ đọc các giá trị, thay vào công thức, và tính.

Tánh của tôi thì sealand đã biết, chết tiệt lắm, sai bắt làm lại ngay cơ. Chứ một khi đã ra kết quả tính toán rồi, có khi xách kết quả đó đi làm những chuyện khác nữa ấy chứ, chả lẽ lúc ấy lại test lỗi lần 2?
Công thức gõ thiếu dấu ngoặc, tôi có thể thông báo lỗi cho gõ lại, còn công thức tính toán mà sai, mở ngoặc đóng ngoặc không đúng chỗ thì xin lỗi, ráng chịu.
 
Upvote 0
Em có một số chỗ cần nhờ anh chị sửa dùm em, em có nêu rõ trong File đính kèm.
 

File đính kèm

  • Book1 (version 2).xls
    60.5 KB · Đọc: 25
Upvote 0
Bạn sửa như sau nó sẽ coi như C4 cũng tham gia sự kiện (Bạn dùng "Cộng thêm" khó hiểu quá)

If Not Intersect(Target, Union(Range("E1:E" & (9 + Target.Row)), [C4])) Is Nothing Then
 
Upvote 0
Bạn sửa như sau nó sẽ coi như C4 cũng tham gia sự kiện (Bạn dùng "Cộng thêm" khó hiểu quá)

If Not Intersect(Target, Union(Range("E1:E" & (9 + Target.Row)), [C4])) Is Nothing Then
Thành thật xin lỗi anh vì cứ phiền anh hoài, nhưng anh giúp em thêm một việc nữa nhé.
- Cái file book1 version 2 em không thể áp dụng vào File nhập liệu của em được
- Nên bây giờ em upload file gốc lên, nhờ anh lập code cụ thể dùm em
- Mọi điều cần nhờ em có ghi rõ trong Form.
Chân thành cám ơn anh !
 

File đính kèm

  • File mau.xls
    61 KB · Đọc: 22
Upvote 0
Bạn kiểm tra xem sao
 

File đính kèm

  • File mau.xls
    64.5 KB · Đọc: 84
Upvote 0
Các anh chị cho em xin code công thức hoặc hướng dẫn tao ham trên excel "cộng, trừ, nhân, chia" trên 1 ô
vi du : Ô A1 ta nhập là 2*7+5*8 +(15-2*2)-4*(2+2*3)+((...))..... Thì Ô A2 nhập công thức =Tinh(A1) có nghịa kết quã trên ô A2.

Chân thành cám ơn !
 
Upvote 0
Các anh chị cho em xin code công thức hoặc hướng dẫn tao ham trên excel "cộng, trừ, nhân, chia" trên 1 ô
vi du : Ô A1 ta nhập là 2*7+5*8 +(15-2*2)-4*(2+2*3)+((...))..... Thì Ô A2 nhập công thức =Tinh(A1) có nghịa kết quã trên ô A2.

Chân thành cám ơn !
Bạn chép cái này vào Module:
PHP:
Function Tinh(ByVal ChuoiSo As String) As Double
    Tinh = Evaluate("=" & ChuoiSo)
End Function
 
Upvote 0
Các anh chị cho em xin code công thức hoặc hướng dẫn tao ham trên excel "cộng, trừ, nhân, chia" trên 1 ô
vi du : Ô A1 ta nhập là 2*7+5*8 +(15-2*2)-4*(2+2*3)+((...))..... Thì Ô A2 nhập công thức =Tinh(A1) có nghịa kết quã trên ô A2.

Chân thành cám ơn !
Góp thêm cách nữa: dùng 'name'.
  1. Đứng tại ô A1= 2*7+5*8 +(15-2*2)-4*(2+2*3); Nhấn Ctrl+F3, dán =EVALUATE($A$1), sửa tên 'name' thành 'Tinh'
  2. B1= Tinh
Chúc bạn ngày vui
 
Upvote 0
Xin chào Tất cả

Mình mong các bạn giúp mình , minh dùng VBA excel để mở Chương trình FoxPro, sau do mình thực hiện các lệnh Foxpro (vi dụ như Export chẳng hạn,…) viết code dể chạy chương trình

Chân thành cám ơn !
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu đúng ý bạn rùi thì tập tự làm đi, chỗ nào không hiểu thì cứ post lên có rất nhiều người sẽ giúp. Cộng, trừ, nhân, chia cứ thay vào dòng thứ 9 của code. lưu ý là: khai báo lại kiêu dữ liệu nếu bạn sử dụng số thực, nếu dùng phép chia phải xác nhận số chia # 0.
Vậy nếu như mình tính tổng của nhiều text box thì sao bac. khoảng 21 textbox á, mong bác giúp đở
 
Upvote 0
bác có thể cho e xin cái cú pháp như thế nào được khong bác
Nó có thể rất giản dị nhưng cũng có thể rất phức tạp.
- Nếu tính tất cả các textbox không chừa cái nào thì dùng vòng lặp duyệt tất cả các controls trong form, cái nào kiểu là textbox thì tính
- Nếu chỉ tính một số textbox thì phải lập mọt danh sách cho vòng lặp duyệt theo danh sách đó.
- Nếu cần kiểm soát cộng được bao nhiêu cái thì code đồng thời phải ghi lại danh sách các textbox được tính trong tổng và các textbox phải chừa ra vì tính không được. Ví dụ textbox A chứa số 123,45 thay vì 123.45 thì tính đâu có được!
 
Upvote 0
Web KT
Back
Top Bottom