Diễn đàn giaiphapexcel.com sẽ chuyển sang hoạt động ở link sau

http://www.giaiphapexcel.com/diendan/forums


[CLICK] học VBA ở Đà Nẵng tháng 5/2017


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

      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 Code:
      Function Filter2DArray(sArrayColIndex As LongFindStr As String)
        
      Dim TmpArrAs LongAs LongArrDicTmpStrTmp
        Set Dic 
      CreateObject("Scripting.Dictionary")
        
      TmpArr sArray
        ColIndex 
      ColIndex LBound(TmpArr2) - 1
        
      For LBound(TmpArr1To UBound(TmpArr1)
          
      TmpStr Left(TmpArr(iColIndex), Len(FindStr))
          If 
      UCase(TmpStr) = UCase(FindStrThen Dic.Add i""
        
      Next
        
      If Dic.Count 0 Then
          Tmp 
      Dic.Keys
          ReDim Arr
      (UBound(Tmp), LBound(TmpArr2To UBound(TmpArr2))
          For 
      LBound(TmpTo UBound(Tmp)
            For 
      LBound(TmpArr2To UBound(TmpArr2)
              
      Arr(ij) = 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:


      http://i993.photobucket.com/albums/a...untitled_1.jpg

      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: https://www.giaiphapexcel.com/forum/...-chi%E1%BB%81u

      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
      Bài này được gửi trong diễn dàn tại: Sort mảng 2 chiều bởi anhtuan1066 Xem bài gốc
      Góp ý 22 Góp ý
      1. PHONGGANHHAO's Avatar
        PHONGGANHHAO -
        Cảm ơn tác giả nhiều ạ
      1. dephetnoi's Avatar
        dephetnoi -
        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
      1. downloadpro's Avatar
        downloadpro -
        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 đỡ.
      1. hanuangpe's Avatar
        hanuangpe -
        cái này thấy được đấy. cảm ơn chủ thớt đã chia sẻ
      1. Rùa Con 1080's Avatar
        Rùa Con 1080 -
        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!
      1. Rùa Con 1080's Avatar
        Rùa Con 1080 -
        Sao Thầy ndu không trả lời vây?
        Có phải Thầy AnhTuan1066 và Thầy ndu là 1?
      1. langtuchungtinh360's Avatar
        langtuchungtinh360 -
        Trích Nguyên văn bởi Rùa Con 1080 View Post
        Sao Thầy ndu không trả lời vây?
        Có phải Thầy AnhTuan1066 và Thầy ndu là 1?
        cả 2 nick là 1 người đó bạn
      1. Rùa Con 1080's Avatar
        Rùa Con 1080 -
        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.
      1. langtuchungtinh360's Avatar
        langtuchungtinh360 -
        Trích Nguyên văn bởi Rùa Con 1080 View Post
        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.
        lỗi thế nào bạn, xlsm sao lỗi được, tôi save bình thường mà
        thử xem.
      1. Rùa Con 1080's Avatar
        Rùa Con 1080 -
        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.
      1. langtuchungtinh360's Avatar
        langtuchungtinh360 -
        Trích Nguyên văn bởi Rùa Con 1080 View Post
        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
      1. Rùa Con 1080's Avatar
        Rùa Con 1080 -
        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?
      1. hpkhuong's Avatar
        hpkhuong -
        Trích Nguyên văn bởi Rùa Con 1080 View Post
        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?
        File này sẽ bị lỗi khi ai đó xài Office 64bit...(trong đó có tôi).
      1. Rùa Con 1080's Avatar
        Rùa Con 1080 -
        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.
      1. kinghoang's Avatar
        kinghoang -
        Bạn nào muốn chạy trên Office 64bit thì thử file này xem
      1. NguyenthiH's Avatar
        NguyenthiH -
        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.....
      1. Anfis's Avatar
        Anfis -
        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. ?
      1. ngoxaybot's Avatar
        ngoxaybot -
        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.
      1. thang_nguyen1's Avatar
        thang_nguyen1 -
        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 ạ..
      1. trung984's Avatar
        trung984 -
        Trích Nguyên văn bởi kinghoang View Post
        Bạn nào muốn chạy trên Office 64bit thì thử file này xem
        Bạn phải làm như thế nào để chọn nhiều danh mục cùng lúc chứ, nếu tôi muốn nhập 6 loại máy như sheet REQUEST tôi nhấp đúp 6 lần à (tốn công lắm đấy).