Code for sum of multi text box?

Liên hệ QC

Tường_Vi

Thành viên tiêu biểu
Tham gia
19/4/10
Bài viết
482
Được thích
121
Nghề nghiệp
Luôn tìm kiếm một vị trí tốt hơn
Giả sử ta có n text box (trong text box là số và khác rỗng)
nếu tính tổng n text box dùng vòng lặp thì ta viết code như nào ạh

Muội mới học nên chưa biết làm thế nào, hic hic
 
Trong Visual Basic có cho phép đặt tên đối tượng theo mảng rất thuận lợi cho sử lý dữ liệu trên Form. Trong VBA không làm được như vậy nên theo thiển ý của mình có thể làm như sau:
Trên Form sẽ còn có nhiều textbox không thuộc nhóm cộng vậy nên không dùng thuộc tính loại Control được mà ta lợi dụng tên đối tượng để sử lý. Ta lưu ý các Textbox trên Form thường được đặt thêm tiền tố để phân loại đối tượng ví dụ: Txt...., Cmb....Riêng các Textbox sẽ cộng trên Form ta đặt tiền tố là Ts.... chẳng hạn. Ta có tên các Textbox dạng Ts_Luong, Ts_phucap, Ts_chucvu v.v...
Code Cộng ta viết như sau sẽ gọn gàng và dễ sử lý:

Mã:
Option Explicit

Private Sub cong()
Dim Ctr As Control
Dim Tong
For Each Ctr In Me.Controls
If Left(Ctr.Name, 3) = "Ts_" Then Tong = Tong + Val(Ctr)
Next
MsgBox Tong
End Sub
Vậy là bạn không cần biết bao nhiêu ô phải cộng nữa, nếu cần cộng Textbox nào thì cứ thêm cho nó tiền tố quy ước vào tên là được.
Xin nói lại chút, đây chỉ là thiển ý của mình tham gia với bạn chứ chưa thấy tài liệu nào đánh giá cả. Chắc sẽ còn biện pháp hợp lý hơn.
 
Lần chỉnh sửa cuối:
Upvote 0
Trên Form sẽ còn có nhiều textbox không thuộc nhóm cộng vậy nên không dùng thuộc tính loại Control được mà ta lợi dụng tên đối tượng để sử lý. Ta lưu ý các Textbox trên Form thường được đặt thêm tiền tố để phân loại đối tượng ví dụ: Txt...., Cmb....Riêng các Textbox sẽ cộng trên Form ta đặt tiền tố là Ts.... chẳng hạn. Ta có tên các Textbox dạng Ts_Luong, Ts_phucap, Ts_chucvu v.v...
.
Có thể dùng Tag Property để "đánh dấu", em thấy cũng là 1 cách hay đấy anh à (không cần quan tâm đến Name, đặt tên gì tùy thích)
If Ctr.Tag = "gì gì đó" Then
 
Lần chỉnh sửa cuối:
Upvote 0
Có thể dùng Tag Property để "đánh dấu", em thấy cũng là 1 cách hay đấy anh à (không cần quan tâm đến Name, đặt tên gì tùy thích)
If Ctr.Tag = "gì gì đó" Then
Đúng rồi, trên GPE mình nhớ là đã có người dùng cách này, hình như Bác Sa thì phải. Nói chung cái hạn chế là nó cứ phải soát 1 lượt. Mình còn 1 cách không phải làm theo hướng này, Ndu nghĩ xem.
Đợi muộn cùng Post bài xem chúng ta có giống nhau không nhé
 
Upvote 0
Như mình đã nói còn 1 cách chỉ đích danh Control tên là xxxx làm động tác thay vì lật tất cả nếu gặp cha nào có tên là xxx thì thục hiện. Như vậy tốc đọ sẽ nhanh rất nhiều khi số lượng điều khiển lớn. Dưới đây là code cộng trong file ví dụ mỗi lần cộng 8 textbox

Mã:
Sub Cong()
Dim i, Tong
For i = 1 To 8
Tong = Tong + Val(Me.Controls("dc" & i))
Next
S1 = Format(Tong, "#,##0")
End Sub
 

File đính kèm

Upvote 0
To: Anh Sea Land
Tạm thời em đã hiểu đoạn code của Anh, hy vọng em sẽ ứng dụng được nó

Cám ơn Anh
 
Upvote 0
Web KT

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

Back
Top Bottom