Tạo Giúp Form nhập liệu bằng VBA (1 người xem)

  • Thread starter Thread starter enter86
  • Ngày gửi Ngày gửi
Liên hệ QC

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

enter86

Thành viên mới
Tham gia
9/12/08
Bài viết
39
Được thích
3
Mình nhờ mãi mà không ai làm dùm mình. Bảng này mình đã chỉnh sửa bỏ hết dấu ở tên Sheet ròi. Các bạn xem yêu cầu của mình ở Sheet 4 nha . Mình xin cảm ơn trước+-+-+-+
 
Lần chỉnh sửa cuối:
Mình nhờ mãi mà không ai làm dùm mình. Bảng này mình đã chỉnh sửa bỏ hết dấu ở tên Sheet ròi. Các bạn xem yêu cầu của mình ở Sheet 4 nha . Mình xin cảm ơn trước+-+-+-+
1/ Bạn lập lại DMKH cho thống nhất, có cái không có maKH mà co tenKH
2/ Bạn lập thêm 1 sh DMHH gồm mahh, tenHH, QuyCach...
3/ Form (Sh) nhập có tối đa là bao nhiêu dòng trên 1 lần xuất.
4/ Phần đơn giá phải nhập vào hay là lấy từ DMHH * % bán.
5/ Theo tôi bạn nên lấy sheet làm form nhập luôn, dễ làm hơn. Còn khó nhất trong form nhập là chỉnh sửa. Tạm thời nếu có sửa thì sửa thẳng vào sh GhiChep.
Bạn hòan thiện những bước trên và up lại file, sẽ co người giúp bạn. Nhớ rằng đừng đặt tên file là Book1.
 
Upvote 0
Việc bạn nhờ không phải kg có người muốn giúp nhưng theo tôi thì có những lý do sau mọi người chưa có trả lời cho bạn:
1/ Vào thời điểm cuối năm mọi người rất bận.
2/ Công việc bạn nhờ là rất nhiều điều phải làm (cả việc thiết kế from nhập liệu cho đến In).
Và cũng theo tôi bạn nên đọc các bài nói về from và các code để xử lý dữ liệu đẻ nghiên cứu tự làm, nếu có vướng mắc ở đâu thì gửi lên diễn đàn nhờ giúp đỡ. Còn nếu không tụ nghiên cứu để làm (hoặc kg muốn làm) thì chỉ có cách đặt hàng cho 1 ai đó họ viết cho.
Vài lời mong bạn hiểu và nếu có gì không phải thì thông cảm cho nhé.
Chsc bạn vui vẻ và làm được điều mong muón.

Thân
 
Upvote 0
Mình nhờ mãi mà không ai làm dùm mình. Bảng này mình đã chỉnh sửa bỏ hết dấu ở tên Sheet ròi. Các bạn xem yêu cầu của mình ở Sheet 4 nha . Mình xin cảm ơn trước+-+-+-+
Dễ thôi bạn ạ.
Bạn sử dụng
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
End Sub
Kết hợp với "ComboBox " hoặc "ListBox - RowSource là danh sách tên thuốc hoặc mã khách hàng đã được định nghĩa" trong Form cộng với " ActiveCell.Offset(0, 1).Value = ..." Bạn sẽ thành công
 
Upvote 0
VBA Fom Nhập liệu

--=0Mình đã sửa lại rồi mong các bạn gúp mình. Xin cảm ơn-+*/
Ấy chêt lỡ để mật khâu : ademin
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn xem thử FORM nhập liệu như thế này được không. Mình chỉ học hỏi được từ diễn đàng này thôi. Có rất nhiều cao thủ trên đây, các bạn đó sẽ giúp bạn. Mình chỉ tham gia cho vui thôi. Các cao thủ đừng cười nhé.
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bạn nhiều lắm . À mình muốn lấy list tên thuốc, mã hàng, khách hàng trên Fom đó thì phải làm như thế nào
 
Upvote 0
To enter86:
Bạn xem file đính kèm nhé! Thấy hay thì thank một cái lấy hên đầu năm nhe!

Toàn bộ dữ liệu sẽ được nhập vào sheet [GhiChep]! Danh mục thuốc và danh mục khách hàng bạn có thể thêm vào tùy ý, dữ liệu sẽ tự động cập nhật!

Báo cáo mình thiết kế cho bạn dùng Pivotable, không cần công thức, file sẽ chạy nhanh gấp khoản 10 lần file cũ của bạn! File mình làm không có công thức gì cả! Chỉ có vài cái Name mà thôi!
Về điều kiện lưu dữ liệu, mình bổ sung như sau:
- Tất cả dữ liệu đều phải được nhập vào, nếu bỏ trống mà lưu thì excel sẽ báo lỗi, và cho con trỏ về ô trống đó
- Số lượng nhập vào phải là kiểu số, nếu không phải kiểu số hoặc = 0 thì excel thông báo lỗi.
- Ngày phải là kiểu số!

Về Form nhập liệu:
- Có hai combobox để bạn chọn mã khách hàng và mã thuốc cho nhanh! trong Combobox có đầy đủ thông tin về khách hàng và tên thuốc, giúp bạn lựa chọn mã chính xác!
- Có thêm nút [Làm mới] để tự động xóa thông tin trên form để nhập lại!
- Có thêm thông tin về đơn giá và thành tiền để dễ kiểm tra ngay trên form.
Chúc bạn thành công!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Lại về VBA với bảng TÍnh

Bạn ơi cho mình hỏi sửa định dạng VD: mình nhập 10 hộp mà dữ liệu nó ra : 10.000 mình dịnh dạn không được. Bỏ 3 số 0 đằng sau như thế nào vậy
 
Upvote 0
Thì bạn vào form và sửa lại tại
Private Sub txtSoLuong_AfterUpdate()
If Me.txtDonGia = "" Or IsNull(Me.txtDonGia) Then Exit Sub
If IsNumeric(Me.txtSoLuong) And Me.txtSoLuong > 0 Then
Me.txtThanhTien = Me.txtSoLuong * Me.txtDonGia
Else
a = MsgBox("So luong phai la so va khong duoc nho hon bang 0", vbCritical + vbOKOnly, "Loi nhap lieu")
Exit Sub
End If
Me.txtSoLuong = Format(Me.txtSoLuong, "#,###,###.##0")
Me.txtThanhTien = Format(Me.txtThanhTien, "#,###,###.##0")
End Sub

Nếu cần bỏ chữ màu đỏ đi là được
 
Upvote 0
Bạn ơi cho mình hỏi sửa định dạng VD: mình nhập 10 hộp mà dữ liệu nó ra : 10.000 mình dịnh dạn không được. Bỏ 3 số 0 đằng sau như thế nào vậy

Cách sửa thì như anh yeudoi đã nói! Nếu bạn chưa rành VBA thì mỉnh đã tải lại file bài bên dưới (bài #8)rồi đó! Bạn download lại là được!
 
Lần chỉnh sửa cuối:
Upvote 0
Sửa Giúp định dạng số vởi.

@#!^%Giúp mình sửa định dạng với các bạn . Bn ca_dafi đã giúp mình sửa lại rồi nhưng tới dòng 39 lại bị lỗi định dạng kiểu 1,200.000 mà nó ra 1.20000. Mong các bạn sửa giúp mình vởi.
Mật Khẩu : ademin:-=. À còn một vấn đề nữa là ở Fom nhập dữ liệu , mặt hàn mình xuất tối đa là 4 mặt hàng . mà ở đây bạn ca_dafi thiết kế có 1 dòng lên hơi khó. vd một khách hàng xuất 3 mặt hàng đi thì mình phải nhập dữ liệu tới 3 lân lên hơi mất công các bạn giúp mình chính cái FOm vơi, Cảm ơn
 
Lần chỉnh sửa cuối:
Upvote 0
@#!^%Giúp mình sửa định dạng với các bạn . Bn ca_dafi đã giúp mình sửa lại rồi nhưng tới dòng 39 lại bị lỗi định dạng kiểu 1,200.000 mà nó ra 1.20000. Mong các bạn sửa giúp mình vởi.
Cái này là do Format cell của sheet, không liên quan tới Form! Bạn chọn vùng chứa [số lượng], [đơn giá], [thành tiền] và ấn Ctrl+1 và tùy chỉnh theo ý mình được mà!

À còn một vấn đề nữa là ở Fom nhập dữ liệu , mặt hàn mình xuất tối đa là 4 mặt hàng . mà ở đây bạn ca_dafi thiết kế có 1 dòng lên hơi khó. vd một khách hàng xuất 3 mặt hàng đi thì mình phải nhập dữ liệu tới 3 lân lên hơi mất công các bạn giúp mình chính cái FOm vơi, Cảm ơn

Thực sự mà nói thì nếu có làm được điều này trên Form bằng ListView thì cũng được nhưng mình không đủ thời gian để dành trọn cho bạn được! (Phải chi bạn nói ngay từ đầu).

Nếu thực hiện bằng ListBox thì dù gì mỗi lần nhập một [Mã hàng] bạn cũng phải nhấn nút [Lưu ] để excel lưu tạm vào Listbox. Vậy tại sao bạn không làm trực tiếp trên file này luôn nhỉ! Giữ nguyên [ngày], [số PX], [Mã KH], chỉ thay đổi [Mã thuốc] và [số lượng] rồi nhấn [Cập nhật], cái này một phiếu có thể có cả chục dòng cũng được mà!
 
Lần chỉnh sửa cuối:
Upvote 0
@#!^%Giúp mình sửa định dạng với các bạn . Bn ca_dafi đã giúp mình sửa lại rồi nhưng tới dòng 39 lại bị lỗi định dạng kiểu 1,200.000 mà nó ra 1.20000. Mong các bạn sửa giúp mình vởi.
Mật Khẩu : ademin:-=. À còn một vấn đề nữa là ở Fom nhập dữ liệu , mặt hàn mình xuất tối đa là 4 mặt hàng . mà ở đây bạn ca_dafi thiết kế có 1 dòng lên hơi khó. vd một khách hàng xuất 3 mặt hàng đi thì mình phải nhập dữ liệu tới 3 lân lên hơi mất công các bạn giúp mình chính cái FOm vơi, Cảm ơn
Có 1 cách dễ nhất là bạn copy các TxtSL, DG... thành 4 và đổi tên thành TxtSL01, TxtDG01,...,TxtSL04.
và sửa
.Offset(, 4).Value = frmNhapLieu.cboMahang
.Offset(, 5).Value = frmNhapLieu.txtTenHang
.Offset(, 6).Value = Val(Replace(frmNhapLieu.txtSoLuong, ",", ""))
.Offset(, 7).Value = Val(frmNhapLieu.txtDonGia)
.Offset(, 8).Value = Val(Replace(frmNhapLieu.txtThanhTien, ",", ""))
Trong code Sub CapNhapPhieu(). Bạn nghiên cứu thử xem. Thay vì
.Offset(, 5).Value = frmNhapLieu.txtTenHang
Sửa thành
For iD = 1 to 4
.Offset(iD + nextRow, 5).Value = frmNhapLieu.txtTenHang01
...
iD=iD+1
next
Nhớ xem lại biến nextRow.
Cái file này tôi tìm trên 4R, nhờ các bạn sửa và bẫy cho phù hợp.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
File nhập liệu bằng form của bạn rất hay. Nhưng nếu muốn nhập 1 đơn hàng mà 1 khách hàng mua nhiều mặt hàng thì như thế nào?
Bạn có thể thiết kế lại phía dưới là 1 bảng, để nhập chi tiết các mặt hàng không (VD như 3 mặt hàng)?
Khi nhập xong, dữ liệu sẽ được cập nhật vào 3 dòng chẳng hạn.

Mong bạn chỉ giáo...
 
Upvote 0
Em đã làm thử và tự tạo một file mới nhưng em bị vướng chỗ này không biết cách nào xử lý ạ.
File của em cũng tương tự là khi chọn một mã hiệu thì nó sẽ liệt kê ra toàn bộ những phần tra cứu tương ứng ở các ô tiếp theo nhưng em không thể nào làm nó hiện lên đc ạ.
Ngoài ra em muốn cho tại ô "Diện tích tiết diện của dây căng Ad" nó sẽ tính ra kết quả của =B30*3,1415*((B31)^2) nhưng nó toàn hiện lên công thức không à.

Em gửi file đính kèm lên anh chị nào rành chỉ em với, em mò từ sáng đến giờ
 

File đính kèm

Upvote 0
Em xin copy mã em viết lên luôn để bác nào kinh nghiệm nhìn vào xem sai chỗ nào giúp em với ạ
Mã:
Private Sub Textbox9_AfterUpdate()
Me.TextBox10 = Me.TextBox9.Column(10)
Me.TextBox11 = Me.TextBox9.Column(2)
Me.TextBox12 = Me.TextBox9.Column(12)
Me.TextBox13 = Me.TextBox9.Column(3)
End Sub
Private Sub cmdAdd_Click()
Dim ws As Worksheet
Set ws = Worksheets("Du lieu bt")


ws.Range("B2").Value = Me.TextBox1.Value
ws.Range("B3").Value = Me.TextBox2.Value
ws.Range("B4").Value = Me.TextBox3.Value
ws.Range("B5").Value = Me.TextBox4.Value
ws.Range("B6").Value = Me.TextBox5.Value
ws.Range("B8").Value = Me.TextBox6.Value
ws.Range("B9").Value = Me.TextBox7.Value
ws.Range("B10").Value = Me.TextBox8.Value
ws.Range("B12").Value = Me.ComboBox1.Value
ws.Range("B13") = Me.TextBox10
ws.Range("B14") = Me.TextBox11
ws.Range("B15") = Me.TextBox12
ws.Range("B16") = Me.TextBox13
ws.Range("B17") = Me.TextBox14
ws.Range("B18") = Me.TextBox15
ws.Range("B19") = Me.TextBox16
ws.Range("B20") = Me.TextBox17
ws.Range("B21") = Me.TextBox18
ws.Range("B22") = Me.TextBox19
ws.Range("B23") = Me.TextBox20
ws.Range("B24").Value = Me.TextBox21.Value
ws.Range("B25").Value = Me.TextBox22.Value
ws.Range("B26").Value = Me.TextBox23.Value
ws.Range("B27").Value = Me.TextBox24.Value
ws.Range("B28").Value = Me.TextBox25.Value
ws.Range("B30").Value = Me.TextBox26.Value
ws.Range("B31").Value = Me.TextBox27.Value
ws.Range("B32") = Me.TextBox28
ws.Range("B33").Value = Me.TextBox29.Value
ws.Range("B36").Value = Me.TextBox30.Value
ws.Range("B35").Value = Me.TextBox31.Value
Me.TextBox31.SetFocus
End Sub
Private Sub ComboBox1_AfterUpdate()
'Me.TextBox10 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);10)"
'Me.TextBox11 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);2)"
'Me.TextBox12 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);12)"
'Me.TextBox13 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);3)"
'Me.TextBox14 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);4)"
'Me.TextBox15 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);5)"
'Me.TextBox16 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);6)"
'Me.TextBox17 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);8)"
'Me.TextBox18 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);7)"
'Me.TextBox19 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);9)"
'Me.TextBox20 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);11)*10000"
Me.TextBox28 = "=B30*3,1415*((B31)^2)"
End Sub
Private Sub cmdClose_Click()
  Unload Me
End Sub


Private Sub UserForm_Click()
End Sub
 
Upvote 0
Có anh chị nào rảnh rỗi vào xem giúp em một chút với ạ.
 
Upvote 0
Bạn xoá đoạn code sau:

Mã:
Private Sub ComboBox1_AfterUpdate()
'Me.TextBox10 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);10)"
'Me.TextBox11 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);2)"
'Me.TextBox12 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);12)"
'Me.TextBox13 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);3)"
'Me.TextBox14 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);4)"
'Me.TextBox15 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);5)"
'Me.TextBox16 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);6)"
'Me.TextBox17 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);8)"
'Me.TextBox18 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);7)"
'Me.TextBox19 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);9)"
'Me.TextBox20 = "=INDEX(BangThongSoThepHinh;MATCH(Sohieuthep;SoHieuThepHinh;0);11)*10000"
Me.TextBox28 = "=B30*3,1415*((B31)^2)"
End Sub

Và thay thế bằng code sau:

Mã:
Private Sub ComboBox1_Click()
Dim Cot(), i
 Cot = Array(9, 1, 10, 2, 3, 4, 5, 7, 6, 8, 11)
   For i = 1 To 11
       Me.Controls("TextBox" & 9 + i).Text = Me.ComboBox1.Column(Cot(i - 1))
     Next
   Me.TextBox28 = Evaluate("='" & Sheet1.Name & "'! B30*3.1415*(('" & Sheet1.Name & "'!B31)^2)")
End Sub


Giờ bạn chạy Form rồi chọn tunwgf loại trong Combo kiểm tra xem load đúng chưa vì mình áng số cột theo code của bạn
 
Upvote 0
Bạn thay thế toàn bộ Code của Nút thêm

Private Sub cmdAdd_Click()

Bằng Code sau cho gọn:

Mã:
Private Sub cmdAdd_Click()
Dim i, Id(), Addr()
Id = Array(1, 2, 3, 4, 5, 6, 7, 8, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26)
Addr = Array("B2", "B3", "B4", "B5", "B6", "B8", "B9", "B10", "B12", "B13", "B14", "B15", "B16", "B17", "B18", _
"B19", "B20", "B21", "B22", "B23", "B24", "B25", "B26", "B27", "B28", "B30", "B31", "B32", "B33", "B36", "B35")
For i = 0 To 25
Sheet1.Range(Addr(i)) = Me.Controls(IIf(i = 8, "ComboBox", "Textbox") & Id(i))
Next
End Sub
 
Upvote 0
Em cám ơn anh rất nhiều ạ, đúng là thành viên gạo cội viết hàm mà cũng rút ngắn được nữa. Chủ yếu em muốn biết cách truyền công thức vào thế nào đó em. Em đọc công thức của bác thì cũng lờ mờ hiểu ra một chút.
Chúc bác một ngày làm việc thật hiệu quả.
 
Upvote 0
À anh ơi em thấy có cái sau đây ạ.
Mã:
Me.Controls("TextBox" & 9 + i).Text = Me.ComboBox1.Column(Cot(i - 1))
Phần đầu thì ổn rồi vì i chạy theo thứ tự từ 10 đến 20 nhưng mà chỗ sau thì các cột nó lại không theo thứ tự như vậy ạ?
Với lại em thấy cột cần tìm đầu tiên của em là cột số 10 nhưng sao công thức thì là cot(i-1) thì nó ra 8 chứ nhỉ? mà sao vẫn thấy đúng kết quả nhỉ? Hình như có một cột bị sai thì phải để em mò lại. Cám ơn anh

-----------
Bổ sung là em đã hiểu rồi ạ và có sửa lại thứ tự, hiểu nôm na là cột thứ 9 thì mình tìm thành cột thứ 8 còn tại sao thì em cũng chịu thua luôn.
 
Lần chỉnh sửa cuối:
Upvote 0
Có một vấn đề cuối cùng nữa là tại sao trên excel của em tính công thức ra kết quả thì sau dấy phẩy vẫn hiện dấu phẩy VD 73,5 nhưng dùng form thì nó lại ra 73.5 ạ
 
Upvote 0
Thì bạn Format nó lại theo ý mình. Nhưng mình khuyến cáo bạn nếu không có biện pháp triệt để thì đừng làm khác hệ thống.

Bổ sung là em đã hiểu rồi ạ và có sửa lại thứ tự, hiểu nôm na là cột thứ 9 thì mình tìm thành cột thứ 8 còn tại sao thì em cũng chịu thua luôn.

Vì listbox đếm dòng đầu và cột đầu từ 0
 
Upvote 0
Sao mà skill anh cao thế, anh cũng ở HP à? em cũng quê ở HP nè nhưng sinh ra trong miền nam. Mong là sau này khả năng lập trình cũng đc như mấy anh trên đây.

Vì listbox đếm dòng đầu và cột đầu từ 0

Nhưng mà ở đây thấy lúc đưa vào mảng thì nó đã trừ 1 rồi thế mà vào công thức lại i-1 nữa ấy ạ. Em ứ hiểu cái chỗ ấy
 
Upvote 0
Thế giờ không ở HP à?

Sự chênh lệch này nó còn phát sinh do ta đặt tên nữa, nếu muốn trùng phải đặt Textbox0 trở đị chứ.
 
Upvote 0
Rồi em đã thủng anh ạ.
Thanks anh nhé, em đang ở Biên Hoà
 
Upvote 0
Rồi em đã thủng anh ạ.
Thanks anh nhé, em đang ở Biên Hoà

Ở Biên Hòa nếu muốn giao lưu thì thứ bảy, chúa nhật khoảng 6h30 - 7h30 ghé Coffee Tuổi Ngọc, đường Đồng Khởi (trên lầu bàn giữa đầu tiên) sẽ gặp gỡ 2 sư phụ ndu, Lê Duy Thương, còn anh thì cũng Tân Mai, Biên Hòa.
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom