Bài viết: Tạo ứng dụng form hổ trợ tìm kiếm và nhập liệu

anhtuan1066

Thành viên gạo cội
Tham gia ngày
10 Tháng ba 2007
Bài viết
5,813
Thích
6,763
Điểm
100
Tuổi
51
#1
Trước đây tôi có làm 1 form hổ trợ tìm kiếm và nhập liệu. Việc tìm kiếm thì dùng AutoFilter, còn sort dữ liệu trên ListBox thì đương nhiên dùng chức năng Sort sẳn có của Excel để làm: Sort trên bảng tính, xong gán dữ liệu từ bảng tính vào ListBox

Cảm thấy cách làm đó tuy đơn giản nhưng không mấy chuyên nghiệp, vả lại tốc độ xử lý cũng không cao!
Như ta đã biết, việc Filter đối với mảng 1 chiều thì đã có hàm Filter giải quyết. Vậy hôm nay tôi viết thêm hàm Filter2DArray nữa là có thể đưa vào ứng dụng với form hổ trợ tìm kiếm và nhập liệu rồi.

Hàm Filter2DArray như sau:

PHP:
Function Filter2DArray(sArray, ColIndex As Long, FindStr As String)
  Dim TmpArr, i As Long, j As Long, Arr, Dic, TmpStr, Tmp
  Set Dic = CreateObject("Scripting.Dictionary")
  TmpArr = sArray
  ColIndex = ColIndex + LBound(TmpArr, 2) - 1
  For i = LBound(TmpArr, 1) To UBound(TmpArr, 1)
    TmpStr = Left(TmpArr(i, ColIndex), Len(FindStr))
    If UCase(TmpStr) = UCase(FindStr) Then Dic.Add i, ""
  Next
  If Dic.Count > 0 Then
    Tmp = Dic.Keys
    ReDim Arr(UBound(Tmp), LBound(TmpArr, 2) To UBound(TmpArr, 2))
    For i = LBound(Tmp) To UBound(Tmp)
      For j = LBound(TmpArr, 2) To UBound(TmpArr, 2)
        Arr(i, j) = TmpArr(Tmp(i), j)
      Next
    Next
  End If
  Filter2DArray = Arr
End Function
Vẫn sử dụng sự trợ giúp của Dictionary Object để định vị chỉ số dòng cần lấy ra kết quả
Giao diện Form như sau:



Với form này thì:
- Khi bấm vào các tiêu đề của ListBox thì dữ liệu sẽ được sort đúng tại cột này
- Gõ vài ký tự gợi nhớ vào TextBox thì List sẽ được thu gọn lại đúng với từ khóa tìm kiếm trên cột mà trước đó ta đã bấm (tức có thể tìm kiếm trên từng cột)
- Double Click vào 1 dòng nào đó trên ListBox, đồng nghĩa sẽ gán dữ liệu xuống bảng tính


Bạn có thể tham khảo và thảo luận thêm tại topic này: http://www.giaiphapexcel.com/forum/showthread.php?47929-Sort-mảng-2-chiều

Một số bài viết có liên quan:
1/ Làm cách nào để ghi chú hiệu quả trong VBA?
2/ Conditional Formatting cho biểu đồ bằng VBA
3/ Khi nào nên sử dụng Msgbox, Inputbox và Userform?
4/ 8 thủ thuật trong VBE bạn nên biết
5/ Kích hoạt macro từ nút bấm ngoài bảng tính
6/ Làm thế nào để thay thế các chữ OK, CANCEL,... nhàm chán của Msgbox
7/ Giới thiệu VBA trong Excel
8/ Viết code để nhìn thấy ai là người cập nhật bảng tính của bạn lần gần đây nhất
9/ 4 cách sử dụng Immediate Window trong VBA hiệu quả hơn
10/ 3 gợi ý nhỏ mang lại thành công trong khai báo biến trong VBA
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:

dephetnoi

Thành viên mới
Tham gia ngày
1 Tháng sáu 2008
Bài viết
22
Thích
0
Điểm
0
#3
Cảm ơn bạn nhiều nhé. Nhưng bạn ơi, thế mình muốn tạo cái form chọn từ 1 file riêng thì làm thế nào à bạn, tức là sheet MC sẽ ở 1 file khác nhưng khi vào sheet Request vẫn thực hiện được
 

downloadpro

Thành viên mới
Tham gia ngày
17 Tháng mười hai 2010
Bài viết
14
Thích
0
Điểm
0
Tuổi
19
#4
Cảm ơn bạn, quá hay. Mình cũng đang muốn viết cái macro như vậy mà may quá gặp bạn. Nhưng mục đích của mình hơi phức tạp hơn chút, cụ thể như sau:
- Mình có 1 danh sách đính kèm.
- Số lượng đại lý cố định, không trùng với bất kỳ ai.
Mục đích:
- Mỗi lần mình gõ tên 1 đại lý vào listbox thì nó sẽ lọc ra các thông tin khác như: Số máy, loại máy, phân khối, hãng sx.
- Tuy nhiên các thông tin: số máy, loại máy, phân khối, hãng sx sẽ thay đổi không cố đinh. Sau khi lọc ra được tên đại lý, thay vì như form của bạn là double click vào dòng nào thì dòng đó sẽ được nhập lại vào excel và tự xuống dòng.
- Thì Ở đây mình muốn, chọn riêng từng nội dung (từng ô) của đại lý đó, sau đó cập nhật lại thông tin và nó sẽ ghi đè lên ô đang chọn đông thời tô màu ô vừa thay đổi trên excel (không xuống dòng).

Mình nghiên cứu đã lâu nhưng không được, hôm nay gặp được post này mong bạn giúp đỡ.
 

File đính kèm

Lần chỉnh sửa cuối:

Rùa Con 1080

Thành Viên Sao Chép 2
Tham gia ngày
4 Tháng năm 2016
Bài viết
351
Thích
47
Điểm
185
#6
Sao File của Thầy em lưu sang dạng xlsm thì khi mở Form bị lỗi Run Time Error 380 "Could not set the Value Property. Invalid Property Value"
Chỉ lưu dạng xls thì được, Thầy có thể chỉnh lại dùm ah!
 

Rùa Con 1080

Thành Viên Sao Chép 2
Tham gia ngày
4 Tháng năm 2016
Bài viết
351
Thích
47
Điểm
185
#9
Cám ơn anh langtuchungtinh360.
Sao Thầy ndu không trả lời vậy.
file lưu sang dạng xlsm bị lỗi Thầy ơi.
 

langtuchungtinh360

Thành viên đã dừng hoạt động
Tham gia ngày
7 Tháng mười 2013
Bài viết
1,065
Thích
314
Điểm
0
#10

File đính kèm

Lần chỉnh sửa cuối:

Rùa Con 1080

Thành Viên Sao Chép 2
Tham gia ngày
4 Tháng năm 2016
Bài viết
351
Thích
47
Điểm
185
#11
Khi em tải file của Thầy ndu về, Save As thành File đuôi xlsm thì khi double Click để hiên Form thì lỗi như bài #6, và click Debug thì lỗi vàng Userform1.Show ở Sub ShowForm().
Và ngay cả file của Anh em click mở form cũng bị lỗi.
 

langtuchungtinh360

Thành viên đã dừng hoạt động
Tham gia ngày
7 Tháng mười 2013
Bài viết
1,065
Thích
314
Điểm
0
#12
Khi em tải file của Thầy ndu về, Save As thành File đuôi xlsm thì khi double Click để hiên Form thì lỗi như bài #6, và click Debug thì lỗi vàng Userform1.Show ở Sub ShowForm().
Và ngay cả file của Anh em click mở form cũng bị lỗi.
mở
form lên nha. kế bên textbox có SpinButton1, bạn nhấn F4 và tìm chỗ Max, sửa giá trị lại thành 1048576
 

Rùa Con 1080

Thành Viên Sao Chép 2
Tham gia ngày
4 Tháng năm 2016
Bài viết
351
Thích
47
Điểm
185
#13
Cám ơn anh langtuchungtinh360!
Được rồi Anh.
Có phải số 1048576 là số dòng của Excel 2010 trở lên không Anh?
 

Rùa Con 1080

Thành Viên Sao Chép 2
Tham gia ngày
4 Tháng năm 2016
Bài viết
351
Thích
47
Điểm
185
#15
Tới Anh hpkhuong, em hồi trước cũng xài Win 64bit và Office 64bit,nhưng thấy không tương thích một số chương trình nên thôi, chuyển qua xài 32bit luôn.
 

NguyenthiH

thành viên mù VBA
Tham gia ngày
11 Tháng mười hai 2016
Bài viết
422
Thích
33
Điểm
185
#17
Thầy Ndu có thể chỉnh code để Enter thì gán dữ liệu vào Sheet dùm em đi Thầy.
Như tạo sự kiện KeyDown.... If Keycode = 13 then.....
 

Anfis

Thành viên mới
Tham gia ngày
9 Tháng ba 2017
Bài viết
1
Thích
0
Điểm
0
Tuổi
26
#18
Cảm ơn thầy bài viết quá tuyệt nhưng e muốn cái danh sách check có thêm các trường thông tin như là xuất xứ, giá .... thì làm sao ah. ?
 

ngoxaybot

Thành viên mới
Tham gia ngày
31 Tháng mười 2011
Bài viết
1
Thích
0
Điểm
0
#19
Cảm ơn bạn nhiều lắm!
Mình mới tìm hiểu về VBA. đang đi tìm hiểu sâu về nội dung này. Rất may gặp được bạn.
 

thang_nguyen1

Thành viên mới
Tham gia ngày
6 Tháng mười 2016
Bài viết
1
Thích
0
Điểm
0
Tuổi
24
#20
Tạo thêm một cột

Chào thầyEm mới tìm hiểu về vba. Em có thắc mắc là khi em tạo thêm một cột nữa những mà khi chạy nó không hiển thì được cột em thêm vào.... Hay phải thêm dòng lệnh nào. Thầy giúp em với ạ..
 
Top