Xem dùm em, không biết tại sao em trong listbox nó không hiển thị được, mà nó chỉ hiện được cột đầu tiên em không biết nó sai chỗ nào nữa mong các anh chỉ giúp dùm em, ở sheet Lọc, nút nhập liệu khi em nhấn vào nó không hiện ra hết các cột mà chỉ hiện thị cột đầu tiên mong các anh chị xem giúp thank các anh
em mới học còn nhiều khó khăn nhờ anh chị chỉ dùm em
Trong frmdethi, Chỗ biến cố nút ghi dùm de nhap du lieu xuong sheet1 khi bam nút thêm và thêm các thông tin thì bị khoi dong lai excel
Mong mọi người giúp e với , e sắp nộp bài thi rồi
em mới học còn nhiều khó khăn nhờ anh chị chỉ dùm em
Trong frmdethi, Chỗ biến cố nút ghi dùm de nhap du lieu xuong sheet1 khi bam nút thêm và thêm các thông tin thì bị khoi dong lai excel
Mong mọi người giúp e với , e sắp nộp bài thi rồi
"Sắp nộp" là chuyện của bạn. Muốn người khác giúp thì hãy bỏ công ra mô tả cho người ta hiểu.
"ghi dùm de nhap du lieu xuong sheet1"? Đã có code rồi còn gì. Hay có chỗ nào chưa vừa ý trong code đó? Giữ thông tin không tiết lộ ra thì ai biết bạn muốn gì.
Muốn lắm muốn lắm? Thì cụ thể muốn gì, phải nói ra chứ ai mà đoán được.
"khi bam nút thêm và thêm các thông tin thì bị khoi dong lai excel"? Nút thêm có làm gì ghê gớm đâu mà khởi động lại Excel?
"Sắp nộp" là chuyện của bạn. Muốn người khác giúp thì hãy bỏ công ra mô tả cho người ta hiểu.
"ghi dùm de nhap du lieu xuong sheet1"? Đã có code rồi còn gì. Hay có chỗ nào chưa vừa ý trong code đó? Giữ thông tin không tiết lộ ra thì ai biết bạn muốn gì.
Muốn lắm muốn lắm? Thì cụ thể muốn gì, phải nói ra chứ ai mà đoán được.
"khi bam nút thêm và thêm các thông tin thì bị khoi dong lai excel"? Nút thêm có làm gì ghê gớm đâu mà khởi động lại Excel?
thank anh em đã hiểu ý của anh, anh ơi anh xem code Combobox dùm em, em muốn call các sheet mà em chọn để em nhập và tìm kiếm luôn mà ko cần thoát ra ngoài để chọn lại, theo như em hiểu thì cái tìm kiếm Use form của em nó sẽ hiện ra theo cái sheet Loc hiện tại, có cách nào ko cần ra sheet Lọc mà em vẫn có thể chọn sheet trực tiếp trên form luôn được ko anh, để em nhập và tìm kiếm lun ah anh, thank anh nhiều
thank anh em đã hiểu ý của anh, anh ơi anh xem code Combobox dùm em, em muốn call các sheet mà em chọn để em nhập và tìm kiếm luôn mà ko cần thoát ra ngoài để chọn lại, theo như em hiểu thì cái tìm kiếm Use form của em nó sẽ hiện ra theo cái sheet Loc hiện tại, có cách nào ko cần ra sheet Lọc mà em vẫn có thể chọn sheet trực tiếp trên form luôn được ko anh, để em nhập và tìm kiếm lun ah anh, thank anh nhiều
ý em là trên use form chỗ chọn form nhập liệu. Em có thể chọn xem từng sheet khác được ko anh hay nó chỉ hiện được listbox tại sheet lọc thôi anh. Tại sheet lọc của em nó đang hiện sheet biendong xin lỗi anh em giải thích ko được rõ cho lắm
không trả về chính xác dòng sau dòng có dữ liệu cuối cùng. Cách thử: trong CT_HOPDONG bạn nhập tay dữ liệu cho tới dòng vd. 20 -> xóa dữ liệu ở các dòng từ 4 tới 20 -> mở Form -> nhập liệu -> nhấn GHI. Bạn sẽ thấy kết quả được nhập xuống sheet ở dòng 21. Nguyên nhân là do DongTrongCuoi = 21. Khi dữ liệu nằm trong bảng thì End(xlUp).Row luôn trả về dòng cuối của bảng cho dù bảng hiện thời không có dữ liệu hoặc dữ liệu không tới dòng cuối của bảng.
Lưu ý trên cũng cho sheet HOP_DONG vì dữ liệu cũng nằm trong bảng (dongcuoi = dòng cuối cùng của bảng cho dù bảng có dữ liệu hay không)
- Dữ liệu trong HOP_DONG bắt đều từ dòng 3 nên phải là For i = 3 To dongcuoi chứ không là For i = 4 To dongcuoi. Bạn thử nhập Số hợp đồng = D001 rồi nhấn GHI thì sẽ thấy MsgBox với thông báo "So hop dong khong co!" cho dù có D001. Nguyên nhân là do D001 nằm ở A3 nhưng bạn xét từ dòng 4.
- người viết code không có quyền cho là người dùng sẽ luôn nhập hết dữ liệu, luôn nhập chuẩn dữ liệu. Con người mà. Vì thế nên kiểm tra ngay ở đầu sub cmdGhi_Click - có nhập hết dữ liệu không, 2 ô "kia" có là ngày tháng không. Nếu không thì nghỉ chơi luôn, không đi tiếp.
- người viết code không có quyền cho là dữ liệu luôn không vượt quá dòng 100.
Phải là hoặc
a. vd.
Nghĩa là trong use form, chỗ chọn sheet nhập liệu, combobox em đã nạp các giá trị: loc,biendong, bdhg, vinhlong, hopnhat tương ứng với các sheet trong excel của em, em mún khi click vô các tên trên của combobox thì trên use form list box nó sẽ hiện ra tương ứng ah anh, hì ko biết em viết vậy có khó hiểu ko anh
không trả về chính xác dòng sau dòng có dữ liệu cuối cùng. Cách thử: trong CT_HOPDONG bạn nhập tay dữ liệu cho tới dòng vd. 20 -> xóa dữ liệu ở các dòng từ 4 tới 20 -> mở Form -> nhập liệu -> nhấn GHI. Bạn sẽ thấy kết quả được nhập xuống sheet ở dòng 21. Nguyên nhân là do DongTrongCuoi = 21. Khi dữ liệu nằm trong bảng thì End(xlUp).Row luôn trả về dòng cuối của bảng cho dù bảng hiện thời không có dữ liệu hoặc dữ liệu không tới dòng cuối của bảng.
Lưu ý trên cũng cho sheet HOP_DONG vì dữ liệu cũng nằm trong bảng (dongcuoi = dòng cuối cùng của bảng cho dù bảng có dữ liệu hay không)
- Dữ liệu trong HOP_DONG bắt đều từ dòng 3 nên phải là For i = 3 To dongcuoi chứ không là For i = 4 To dongcuoi. Bạn thử nhập Số hợp đồng = D001 rồi nhấn GHI thì sẽ thấy MsgBox với thông báo "So hop dong khong co!" cho dù có D001. Nguyên nhân là do D001 nằm ở A3 nhưng bạn xét từ dòng 4.
- người viết code không có quyền cho là người dùng sẽ luôn nhập hết dữ liệu, luôn nhập chuẩn dữ liệu. Con người mà. Vì thế nên kiểm tra ngay ở đầu sub cmdGhi_Click - có nhập hết dữ liệu không, 2 ô "kia" có là ngày tháng không. Nếu không thì nghỉ chơi luôn, không đi tiếp.
- người viết code không có quyền cho là dữ liệu luôn không vượt quá dòng 100.
Phải là hoặc
a. vd.
không trả về chính xác dòng sau dòng có dữ liệu cuối cùng. Cách thử: trong CT_HOPDONG bạn nhập tay dữ liệu cho tới dòng vd. 20 -> xóa dữ liệu ở các dòng từ 4 tới 20 -> mở Form -> nhập liệu -> nhấn GHI. Bạn sẽ thấy kết quả được nhập xuống sheet ở dòng 21. Nguyên nhân là do DongTrongCuoi = 21. Khi dữ liệu nằm trong bảng thì End(xlUp).Row luôn trả về dòng cuối của bảng cho dù bảng hiện thời không có dữ liệu hoặc dữ liệu không tới dòng cuối của bảng.
Lưu ý trên cũng cho sheet HOP_DONG vì dữ liệu cũng nằm trong bảng (dongcuoi = dòng cuối cùng của bảng cho dù bảng có dữ liệu hay không)
- Dữ liệu trong HOP_DONG bắt đều từ dòng 3 nên phải là For i = 3 To dongcuoi chứ không là For i = 4 To dongcuoi. Bạn thử nhập Số hợp đồng = D001 rồi nhấn GHI thì sẽ thấy MsgBox với thông báo "So hop dong khong co!" cho dù có D001. Nguyên nhân là do D001 nằm ở A3 nhưng bạn xét từ dòng 4.
- người viết code không có quyền cho là người dùng sẽ luôn nhập hết dữ liệu, luôn nhập chuẩn dữ liệu. Con người mà. Vì thế nên kiểm tra ngay ở đầu sub cmdGhi_Click - có nhập hết dữ liệu không, 2 ô "kia" có là ngày tháng không. Nếu không thì nghỉ chơi luôn, không đi tiếp.
- người viết code không có quyền cho là dữ liệu luôn không vượt quá dòng 100.
Phải là hoặc
a. vd.
Em còn một phần không làmđược trong frmtimkiem, theo yêu cầu của de bài em có chụp kèm trong sheet KETQUA, Tìm thông tin khách hàng có doanh thu lớn nhất sau khi lọc được thông tin theo ngày thuê và ngày trả
Nếu rảnh nhờ anh xem giúp e với ạ
Cảm ơn anh rất nhiều
Nghĩa là trong use form, chỗ chọn sheet nhập liệu, combobox em đã nạp các giá trị: loc,biendong, bdhg, vinhlong, hopnhat tương ứng với các sheet trong excel của em, em mún khi click vô các tên trên của combobox thì trên use form list box nó sẽ hiện ra tương ứng ah anh
Cấu trúc trong các sheet mà có tên trong cbSheet phải như nhau: dữ liệu cùng từ dòng 9, các tiêu đề phải cùng theo thứ tự từ B đến L
Thay 2 Sub cũ bằng 2 sub mới.
Mã:
Private Sub UserForm_Initialize()
With cbSheet
.AddItem "BienDong"
.AddItem "VinhLong"
.AddItem "BDHG"
.AddItem "HopNhat"
.AddItem "DongHa"
.AddItem "VPP"
End With
lstDanhSachVPP.ColumnCount = 12
cbSheet.ListIndex = 0
End Sub
Private Sub cbSheet_Change()
Dim lastRow As Long, r As Long, c As Long, count As Long, data(), result(), sh As Worksheet
If cbSheet.ListIndex = -1 Then Exit Sub
lstDanhSachVPP.Clear
Set sh = ThisWorkbook.Worksheets(cbSheet.Value)
With sh
lastRow = .Cells(Rows.count, "B").End(xlUp).Row
If lastRow < 9 Then Exit Sub
data = .Range("B9:L" & lastRow).Value
End With
For r = 1 To UBound(data)
If data(r, 1) <> "" Then
count = count + 1
ReDim Preserve result(1 To 12, 1 To count)
result(1, count) = count
For c = 1 To 11
result(c + 1, count) = data(r, c)
Next c
End If
Next r
lstDanhSachVPP.Column = result
End Sub
Em còn một phần không làmđược trong frmtimkiem, theo yêu cầu của de bài em có chụp kèm trong sheet KETQUA, Tìm thông tin khách hàng có doanh thu lớn nhất sau khi lọc được thông tin theo ngày thuê và ngày trả
Tôi làm theo cách của tôi, không dùng sheet KQ_timkiem. Tôi ngại test, bạn tự kiểm tra.
Mã:
Private Sub UserForm_Initialize()
LstthongtinKH.ColumnCount = 5
' LstthongtinKH.ColumnWidths= ...
End Sub
Private Sub cmdtimkiem_Click()
Dim r As Long, c As Long, max_sum As Double, shd, Ma, data(), dic As Object
' lay du lieu Thue mat bang vao mang data
data = Range("Table1").Value
' dung tu dien dic de luu cac So hop dong voi tu cach la KEY va tong tien cua So hop dong do voi tu cach la ITEM
Set dic = CreateObject("Scripting.Dictionary")
' khong phan biet KEY hoa hay thuong
dic.comparemode = vbTextCompare
' duyet tung dong cua mang data
For r = 1 To UBound(data)
' neu dong hien hanh thoa dieu kien ve Ngay thi thuc hien
If data(r, 3) = CDate(txtNgaythue.Value) And data(r, 4) = CDate(txtNgaytra.Value) Then
' ghi ket qua vao ListBox
With LstthongtinKH
' ghi So hop dong
.AddItem data(r, 1)
' ghi cac thong tin khac
For c = 2 To 5
.List(.ListCount - 1, c - 1) = data(r, c)
Next c
End With
End If
Next r
' neu trong ListBox co ket qua (co du lieu thoa man 2 Ngay) thi thuc hien
If LstthongtinKH.ListCount Then
' lay tu ListBox vao mang data
data = LstthongtinKH.List
' duyet tung dong cua mang data de cong don tong tien cua moi So hop dong, xac dinh So hop dong co tong tien lon nhat
For r = LBound(data) To UBound(data)
' chi so cot va dong trong ListBox.List tinh tu 0
If dic.exists(data(r, 0)) Then
' da co So hop dong trong tu dien - cong don tong tien
dic.Item(data(r, 0)) = dic.Item(data(r, 0)) + data(r, 4)
Else
' chua co So hop dong trong tu dien - ghi So hop dong voi tu cach la KEY va tong tien hien hanh voi tu cach la ITEM
dic.Add data(r, 0), data(r, 4)
End If
' neu tong tien cua So hop dong hien hanh > max_sum thi cap nhat max_sum va So hop dong co max_sum
If dic.Item(data(r, 0)) > max_sum Then
shd = data(r, 0)
max_sum = dic.Item(shd)
End If
Next r
' ta tim So hop dong co max_sum, tuc shd, trong sheet HOP_DONG de tim ra Ma khach hang
' nhap du lieu tu HOP_DONG vao mang data
data = Range("Table2").Value
' duyet tung dong cua mang data
For r = 1 To UBound(data)
' neu So hop dong hien hanh = shd thi thuc hien
If data(r, 1) = shd Then
' doc ra Ma cua khach hang
Ma = data(r, 3)
' thoat vong lap vi da tim thay Ma cua khach hang co tong tien cao nhat
Exit For
End If
Next r
' neu tim thay Ma khach hang thi doc thong tin tu sheet KHACH_HANG
If Not IsEmpty(Ma) Then
' nhap du lieu tu KHACH_HANG vao mang data
data = Range("Table3").Value
' duyet tung dong cua mang data
For r = 1 To UBound(data)
' neu tim thay Ma khach hang thi thuc hien
If data(r, 1) = Ma Then
txtTenKH.Value = data(r, 2)
txtDiachi.Value = data(r, 3)
TXTSDT.Value = data(r, 4)
Exit For
End If
Next r
End If
End If
Set dic = Nothing
End Sub
Cấu trúc trong các sheet mà có tên trong cbSheet phải như nhau: dữ liệu cùng từ dòng 9, các tiêu đề phải cùng theo thứ tự từ B đến L
Thay 2 Sub cũ bằng 2 sub mới.
Mã:
Private Sub UserForm_Initialize()
With cbSheet
.AddItem "BienDong"
.AddItem "VinhLong"
.AddItem "BDHG"
.AddItem "HopNhat"
.AddItem "DongHa"
.AddItem "VPP"
End With
lstDanhSachVPP.ColumnCount = 12
cbSheet.ListIndex = 0
End Sub
Private Sub cbSheet_Change()
Dim lastRow As Long, r As Long, c As Long, count As Long, data(), result(), sh As Worksheet
If cbSheet.ListIndex = -1 Then Exit Sub
lstDanhSachVPP.Clear
Set sh = ThisWorkbook.Worksheets(cbSheet.Value)
With sh
lastRow = .Cells(Rows.count, "B").End(xlUp).Row
If lastRow < 9 Then Exit Sub
data = .Range("B9:L" & lastRow).Value
End With
For r = 1 To UBound(data)
If data(r, 1) <> "" Then
count = count + 1
ReDim Preserve result(1 To 12, 1 To count)
result(1, count) = count
For c = 1 To 11
result(c + 1, count) = data(r, c)
Next c
End If
Next r
lstDanhSachVPP.Column = result
End Sub
Cấu trúc trong các sheet mà có tên trong cbSheet phải như nhau: dữ liệu cùng từ dòng 9, các tiêu đề phải cùng theo thứ tự từ B đến L
Thay 2 Sub cũ bằng 2 sub mới.
Mã:
Private Sub UserForm_Initialize()
With cbSheet
.AddItem "BienDong"
.AddItem "VinhLong"
.AddItem "BDHG"
.AddItem "HopNhat"
.AddItem "DongHa"
.AddItem "VPP"
End With
lstDanhSachVPP.ColumnCount = 12
cbSheet.ListIndex = 0
End Sub
Private Sub cbSheet_Change()
Dim lastRow As Long, r As Long, c As Long, count As Long, data(), result(), sh As Worksheet
If cbSheet.ListIndex = -1 Then Exit Sub
lstDanhSachVPP.Clear
Set sh = ThisWorkbook.Worksheets(cbSheet.Value)
With sh
lastRow = .Cells(Rows.count, "B").End(xlUp).Row
If lastRow < 9 Then Exit Sub
data = .Range("B9:L" & lastRow).Value
End With
For r = 1 To UBound(data)
If data(r, 1) <> "" Then
count = count + 1
ReDim Preserve result(1 To 12, 1 To count)
result(1, count) = count
For c = 1 To 11
result(c + 1, count) = data(r, c)
Next c
End If
Next r
lstDanhSachVPP.Column = result
End Sub
Cảm ơn anh, em đã làm được nhưng sao, chỗ tìm kiếm: textbox em đánh vào tìm kiếm thì listbox nó hiện ra không giống với combobox mà em đã chọn là sao vậy anh:
Bước 1: em chọn combobox: Biendong ( listbox xuất hiện sheet Biendong đúng như chọn )
Bước 2: em đánh tìm kiếm với chữ ab thì dữ liệu listbox lại hiện ra là dữ liệu tại sheet Lọc chứ ko phải dữ liệu combobox: Biendong mà em đã chọn và xuất hiện ra như tại bước 1 là sao vậy anh mong anh chỉ dùm thank anh ( kèm hình)