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á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 !
Chú ý trong công thức vì khi viết sai làm người mới học càng thêm khó hiểu, sẽ làm khó khăn cho người mới học vì không biết thông tin nào chính xácCộng trừ nhân chia: các côn toán này đều dùng 2 vế, bên trái là vế 1 (var1), bên phải là vế 2 (var2). Code viết như sau
cộng: var1 + var2
trừ: var1 - var2
nhân: var1 + var2
chia: var1 + var2
tính tổng trong text box
textbox.text = tổng
tính công thức trong textbox
Evaluate(textbox.text)
Chú ý trong công thức vì khi viết sai làm người mới học càng thêm khó hiểu, sẽ làm khó khăn cho người mới học vì không biết thông tin nào chính xác
Ý em là code công thức trên Form ạ :
Ví dụ : ở khung TexBox1 + TextBox2 khi minh nhập giá trị vào thì ở TextBox3 sẽ tự nhảy giá trị tổng của TextBox1 + TextBox2 (và tương tự với -, *, /).
Private Sub CommandButton1_Click()
Dim n As Long, m As Long, tong As Long
n = TextBox1.Value
m = TextBox1.Value
tong = n + m
TextBox3.Value = tong
End Sub
-Cách của mình làEm ví dụ cụ thể như thế này : (đang online điện thoại nên em không đính kèm được)
- Tính tổng cộng: TextBox3 = TextBox1 + TextBox2
- Tính tổng trừ:TextBox3 = TextBox1 - TextBox2
- Tính tổng nhân:TextBox3 = TextBox1 * TextBox2
- Tính tổng chia:TextBox3 = TextBox1 / TextBox2
- Tính công thức:
Vd1: TextBox3 = TextBox1 * TextBox2/giá trị
Vd2: TextBox3 = TextBox1*Textbox2*+ textbox1*(textbox4-textbox5)+ textbox6+textbox7
Mã:Private Sub CommandButton1_Click() Dim n As Long, m As Long, tong As Long n = TextBox1.Value m = TextBox1.Value tong = n + m TextBox3.Value = tong End Sub
code cho textbox1Code anh cho ở trên là dùng nút button để tính rồi, ý của em là khi mình nhập giá trị vào 2 ô textbò thì ở ô textbox3 tự nhảy giá trị tổng của 2 textbox đó.
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
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
code cho textbox1
code cho textbox2Mã: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
Textbox3 sẽ tự nhảy kết quả!!!!!đúng theo ý bạn chưa???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
Thế +, -, * chia cũng thế luôn hả anh, còn code công thức tính tổng công thức em đã nêu ở trên đó, anh giúp viết code dùm em luôn hén.thank
Cám ơn anh đã hổ trợ, tuy nhiên công thức trên anh làm chung chung quá làm em khó hiểu, em gửi anh file này cụ thể hơn...nhờ các anh chị hổ trợ viết code dùm em (mới tập tành VBA nên chưa biết gì hết, các anh chị thông cảm)Mình gửi 1 ví dụ, bam tham khảo làm lại cho mình nha
Rất cám ơn anh, đúng ý em rồi ạ, nhưng làm sao để format có dấu "," ở mõi giá trị hả anh, mà sẵn đây anh cho em hỏi thêm đoạn code này thêm:Bạn xem nha, ở đây mình dùng sự kiện change của các Textbox nhập liệu. Đây là cách đơn giản nhưng dài lê thê. Khi bạn nắm vững dùng Class module sẽ gọn hơn nhiều.
Đoạn code này muốn cộng thêm 1 cột hoặc vài cột nữa thì thêm vào chỗ nào ?Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("B1:B" & (9 + Target.Row))) Is Nothing Then
With Target
If .Offset(0, -1) <> "" Then .Offset(0, 1) = .Offset(0, -1) * .Value
End With
End If
End Sub
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
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
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)
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é.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
Anh ơi, anh mới viết code của mục THÔNG TIN à, còn mục TIỀN , DOANH THU, CHI PHI anh viết code dùm em luôn nhé.Bạn kiểm tra xem sao
Bạn chép cái này vào Module: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 !
Function Tinh(ByVal ChuoiSo As String) As Double
Tinh = Evaluate("=" & ChuoiSo)
End Function
Góp thêm cách nữa: dùng 'name'.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 !
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 !
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 đở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.
Dùng vòng lập duyệt qua các TextBoxes rồi cộng dồnVậ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 đở
bác có thể cho e xin cái cú pháp như thế nào được khong bácDùng vòng lập duyệt qua các TextBoxes rồi cộng dồn
Nó có thể rất giản dị nhưng cũng có thể rất phức tạp.bác có thể cho e xin cái cú pháp như thế nào được khong bá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 dcNó 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!
Bạn không có file thì tôi không thể viết được bất cứ code nào cảbác có thể cho e xin cái cú pháp như thế nào được khong bá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éBạn không có file thì tôi không thể viết được bất cứ code nào cả
Cho thêm code này vào- ở 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é
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ếtCho 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ếtCho 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
- 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Đượ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)
For idx = 1 to 15
Set ctr = Me.Controls("tb" & Right("0" & idx, 2))
.....
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- 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ụ:
HoặcMã:For idx = 1 to 15 Set ctr = Me.Controls("tb" & Right("0" & idx, 2)) .....
Mã:For idx = 1 to 15 Set ctr = Me.Controls("tb" & Format(idx, "00")) .....
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
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.code cho textbox1
code cho textbox2Mã: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
Textbox3 sẽ tự nhảy kết quả!!!!!đúng theo ý bạn chưa???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