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 !
 
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!
-Đúng r do bác. e cug nghĩ no rất đơn giản và cũng đã thử rất nhiều cách khác nhau nhưng không dc

-e đã thử từ cái no nhảy tự động ra textbox định trước. chỉ dc 2 ô thôi. có cách nao 21 ô textbox tương ứng vs 21 điều kiện mih cho vao 1 IF hay sao đó. làm 1 lần lun dc k bác. cái nay hiểu nó lý thuyết no ma làm k dc tức wa bac ạ !
-textbox cua e số nhỏ thôi bac. k có số thập phân. 1 ,2 ,3 > 20 thôi !
 
Upvote 0
Bạn không có file thì tôi không thể viết được bất cứ code nào cả
- ở cái cmd tính tổng. hiện tại e dang dùng nút control để tính. giờ e mún no nhảy tính tổng tự động mỗi khi mình nhập số vào các textbox thi fai lam sao ạ !!! .Bác xem file đính kèm nhé
 

File đính kèm

  • Nhap Loi.new.xls
    456 KB · Đọc: 22
Upvote 0
- ở cái cmd tính tổng. hiện tại e dang dùng nút control để tính. giờ e mún no nhảy tính tổng tự động mỗi khi mình nhập số vào các textbox thi fai lam sao ạ !!! .Bác xem file đính kèm nhé
Cho thêm code này vào
Mã:
Private Function MakeSum()
  Dim idx As Long, dVal As Double, ctr As Control
  For idx = 1 To 4
    Set ctr = Me.Controls("tb0" & idx)
    If IsNumeric(ctr.Text) Then dVal = dVal + CDbl(ctr.Text)
  Next
  MakeSum = dVal
End Function
Private Sub tb01_Change()
  Me.tbtt.Text = MakeSum
End Sub
Private Sub tb02_Change()
  Me.tbtt.Text = MakeSum
End Sub
Private Sub tb03_Change()
  Me.tbtt.Text = MakeSum
End Sub
Private Sub tb04_Change()
  Me.tbtt.Text = MakeSum
End Sub
 
Upvote 0
Cho thêm code này vào
Mã:
Private Function MakeSum()
  Dim idx As Long, dVal As Double, ctr As Control
  For idx = 1 To 4
    Set ctr = Me.Controls("tb0" & idx)
    If IsNumeric(ctr.Text) Then dVal = dVal + CDbl(ctr.Text)
  Next
  MakeSum = dVal
End Function
Private Sub tb01_Change()
  Me.tbtt.Text = MakeSum
End Sub
Private Sub tb02_Change()
  Me.tbtt.Text = MakeSum
End Sub
Private Sub tb03_Change()
  Me.tbtt.Text = MakeSum
End Sub
Private Sub tb04_Change()
  Me.tbtt.Text = MakeSum
End Sub
Được rồi bác ơi. e cảm ơn bác nhiều lắm. cái nay cao siêu quá e không biết
Bác co thể giải thích them cho e biết nghĩa của cai dòng này dc không ạ !!
Dim idx As Long, dVal As Double, ctr As Control
For idx = 1 To 4
Set ctr = Me.Controls("tb0" & idx)
If IsNumeric(ctr.Text) Then dVal = dVal + CDbl(ctr.Text)
Next
MakeSum = dVal
Bài đã được tự động gộp:

Cho thêm code này vào
Mã:
Private Function MakeSum()
  Dim idx As Long, dVal As Double, ctr As Control
  For idx = 1 To 4
    Set ctr = Me.Controls("tb0" & idx)
    If IsNumeric(ctr.Text) Then dVal = dVal + CDbl(ctr.Text)
  Next
  MakeSum = dVal
End Function
Private Sub tb01_Change()
  Me.tbtt.Text = MakeSum
End Sub
Private Sub tb02_Change()
  Me.tbtt.Text = MakeSum
End Sub
Private Sub tb03_Change()
  Me.tbtt.Text = MakeSum
End Sub
Private Sub tb04_Change()
  Me.tbtt.Text = MakeSum
End Sub
Được rồi bác ơi. e cảm ơn bác nhiều lắm. cái nay cao siêu quá e không biết
Bác co thể giải thích them cho e biết nghĩa của cai dòng này dc không ạ !!
Dim idx As Long, dVal As Double, ctr As Control
For idx = 1 To 4
Set ctr = Me.Controls("tb0" & idx)
If IsNumeric(ctr.Text) Then dVal = dVal + CDbl(ctr.Text)
Next
MakeSum = dVal
- Có mấy từ bác viết tắc e không hiểu được
- vã lại đó là vòng lặp đối với 1 số. ( 1 To 9). jo minh mún lam 2 chữ số thì fai sữa như thế nạo ạ ( 1 To 21)
 
Lần chỉnh sửa cuối:
Upvote 0
Được rồi bác ơi. e cảm ơn bác nhiều lắm. cái nay cao siêu quá e không biết
Bác co thể giải thích them cho e biết nghĩa của cai dòng này dc không ạ !!
Dim idx As Long, dVal As Double, ctr As Control
For idx = 1 To 4
Set ctr = Me.Controls("tb0" & idx)
If IsNumeric(ctr.Text) Then dVal = dVal + CDbl(ctr.Text)
Next
MakeSum = dVal
Bài đã được tự động gộp:


Được rồi bác ơi. e cảm ơn bác nhiều lắm. cái nay cao siêu quá e không biết
Bác co thể giải thích them cho e biết nghĩa của cai dòng này dc không ạ !!
Dim idx As Long, dVal As Double, ctr As Control
For idx = 1 To 4
Set ctr = Me.Controls("tb0" & idx)
If IsNumeric(ctr.Text) Then dVal = dVal + CDbl(ctr.Text)
Next
MakeSum = dVal
- Có mấy từ bác viết tắc e không hiểu được
- vã lại đó là vòng lặp đối với 1 số. ( 1 To 9). jo minh mún lam 2 chữ số thì fai sữa như thế nạo ạ ( 1 To 21)
- Vì mấy textboxes bạn cần xét nó có tên là tb01, tbo2, tb03 và tb04. Để ý con số thứ tự ở cuối là từ 1 đến 4 nên tôi đã dùng vòng lập duyệt từ 1 đến 4 ---> For idx = 1 To 4
- Dùng phép nối chuỗi, nối "tb0" và biến idx để có được tên các textboxes ---> "tb0" & idx
- Lấy đối tượng textbox dựa vào tên đã lấy trước đó ---> Set ctr = Me.Controls("tb0" & idx)
- Có được đối tượng textbox rồi, giờ chỉ việc lấy giá trị của nó thôi ---> CDbl(ctr.Text)
- Tiếp theo cộng dồn ---> dVal = dVal + CDbl(ctr.Text)
- Lấy kết quả sau cùng ---> MakeSum = dVal
Hết!
--------------
Muốn làm với 2 chữ số thì "chơi chiêu". Ví dụ:
Mã:
For idx = 1 to 15
  Set ctr = Me.Controls("tb" & Right("0" & idx, 2))
 .....
Hoặc
Mã:
For idx = 1 to 15
  Set ctr = Me.Controls("tb" &  Format(idx, "00"))
 .....
 
Lần chỉnh sửa cuối:
Upvote 0
- Vì mấy textboxes bạn cần xét nó có tên là tb01, tbo2, tb03 và tb04. Để ý con số thứ tự ở cuối là từ 1 đến 4 nên tôi đã dùng vòng lập duyệt từ 1 đến 4 ---> For idx = 1 To 4
- Dùng phép nối chuỗi, nối "tb0" và biến idx để có được tên các textboxes ---> "tb0" & idx
- Lấy đối tượng textbox dựa vào tên đã lấy trước đó ---> Set ctr = Me.Controls("tb0" & idx)
- Có được đối tượng textbox rồi, giờ chỉ việc lấy giá trị của nó thôi ---> CDbl(ctr.Text)
- Tiếp theo cộng dồn ---> dVal = dVal + CDbl(ctr.Text)
- Lấy kết quả sau cùng ---> MakeSum = dVal
Hết!
--------------
Muốn làm với 2 chữ số thì "chơi chiêu". Ví dụ:
Mã:
For idx = 1 to 15
  Set ctr = Me.Controls("tb" & Right("0" & idx, 2))
.....
Hoặc
Mã:
For idx = 1 to 15
  Set ctr = Me.Controls("tb" &  Format(idx, "00"))
.....
- Được rồi bác ạ. e cảm ơn bac nhiều lắm
 
Upvote 0
Mã:
Private Sub cmdtt_click()

Dim a As Long, b As Long, c As Long, d As Long, e As Long, f As Long, g As Long, h As Long, i As Long, l As Long, m As Long

Dim n As Long, o As Long, u As Long, t As Long, r As Long, W As Long, q As Long, p As Long, v As Long, x As Long
    

If Me!tb01 <> "" Then
    a = Me!tb01.Value
Else
a = 0
End If
If Me!tb02 <> "" Then
    b = Me!tb02.Value
Else
b = 0
End If
If Me!tb03 <> "" Then
    c = Me!tb03.Value
Else
c = 0
End If
If Me!tb04 <> "" Then
    d = Me!tb04.Value
Else
d = 0
If Me!tb05 <> "" Then
    e = Me!tb04.Value
Else
e = 0
End If
If Me!tb06 <> "" Then
    f = Me!tb06.Value
Else
f = 0
End If
If Me!tb07 <> "" Then
    g = Me!tb07.Value
Else
g = 0
End If
If Me!tb08 <> "" Then
    h = Me!tb08.Value
Else
h = 0
End If
If Me!tb09 <> "" Then
    i = Me!tb09.Value
Else
i = 0
End If
If Me!tb10 <> "" Then
    l = Me!tb10.Value
Else
l = 0
End If
If Me!tb11 <> "" Then
    m = Me!tb11.Value
Else
m = 0
End If
If Me!tb12 <> "" Then
    n = Me!tb12.Value
Else
n = 0
End If
If Me!tb13 <> "" Then
    o = Me!tb13.Value
Else
o = 0
End If
If Me!tb14 <> "" Then
    u = Me!tb14.Value
Else
u = 0
End If
If Me!tb15 <> "" Then
    t = Me!tb15.Value
Else
t = 0
End If
If Me!tb16 <> "" Then
    r = Me!tb16.Value
Else
r = 0
End If
If Me!tb17 <> "" Then
    W = Me!tb17.Value
Else
W = 0
End If
If Me!tb18 <> "" Then
    q = Me!tb18.Value
Else
q = 0
End If
If Me!tb19 <> "" Then
    p = Me!tb19.Value
Else
p = 0
End If
If Me!tb20 <> "" Then
    v = Me!tb20.Value
Else
v = 0
End If
If Me!Tb21 <> "" Then
    x = Me!Tb21.Value
Else
x = 0
End If
End If

Me!tbtt = a + b + c + d + e + f + g + h + i + l + m + n + o + u + t + r + W + q + p + v + x
End Sub

Private Sub cmdxoa_click()
Me!tbtt = ""
End Sub
Untitled.png
- MN cho em hỏi xíu. với userform nay, Lần nhập đầu tiên---- e nhập số ở (1), nhấn Sum (2), là no hiện KQ
- Xong e nhấn SAVE (3) => dữ liệu ở (1) sẽ mất để nhập cái khác vào (ô Sum vẫn còn kết quả)
- Lần nhập thứ 2------ e tiếp túc nhập các số khác ở (1)(lúc này ô tổng vẫn còn) , nhấn Sum (2) => thì Ô Sum no lại nhảy tổng của lần nhập thứ 2
- P/S vậy phải làm ntn để tổng no cộng được liên tục qua các lần SAVE. mong các bac giúp đở !!!
 
Upvote 0
code cho textbox1
Mã:
Private Sub TextBox1_Change()
Dim n As Long, m As Long, Kq As Long
n = TextBox1.Value
If TextBox2 <> "" Then
    m = TextBox2.Value
Else
    m = 0
End If
TextBox3.Value = n + m
End Sub
code cho textbox2
Mã:
Private Sub TextBox2_Change()
Dim n As Long, m As Long, Kq As Long
n = TextBox2.Value
If TextBox1 <> "" Then
    m = TextBox1.Value
Else
    m = 0
End If
TextBox3.Value = n + m
End sub
Textbox3 sẽ tự nhảy kết quả!!!!!đúng theo ý bạn chưa???
Hi bạn. Thế cho mình hỏi là nếu như 4 textbox thì làm như thế nào vậy, mình cũng đang cần phần này.
Bạn giúp mình với nhé
Cảm ơn bạn nhiều!
 
Upvote 0
Truongvu317 đây nha cậu
 

File đính kèm

  • First Inspection 08-2018.xls
    5.1 MB · Đọc: 23
Upvote 0
Hi mình gởi file đính kèm
bạn xem dùm mình nhé
Cảm ơn bạn
 

File đính kèm

  • VMB123.xlsm
    123.3 KB · Đọc: 11
Upvote 0
Truongvu317 file mới na p
 

File đính kèm

  • First Inspection 08-2018 (1).xls
    5 MB · Đọc: 23
Upvote 0
Chào tất cả mọi người ! cho mình xin code visual excel sao chép tập tin trên CMD or code chạy tập tin *.bat cũng được.
(Mình có dùng lệnh FileCopy của visual excel rồi nhưng khi copy thường bị lỗi là do tập tin đó được mở ở máy khác trong mang lan)
rất cám ơn
 
Upvote 0
Công thức cộng trừ nhân chia thì có rồi, vậy còn cách tính giá trị trung bình của textbox1, textbox2, textbox3 vào trong ô textbox4 thì làm ntn ạ.
 
Upvote 0
Web KT
Back
Top Bottom