• Form lọc dữ liệu
  • RE: Form lọc dữ liệu

    huuduy.duy > 17-08-16, 11:19 PM

    Cám ơn anh rất nhiều. 
    Anh cho em hỏi thêm, em muốn xuất dữ liệu lọc được ở subform như ở bài #8 sang excel bằng lệnh sau, nhưng kết quả không là nó ra toàn bộ record của subform chứ không như kết quả sau khi lọc, và bị lỗi Font

    Mã PHP:
    Private Sub cmdXuatExcel_Click()
    DoCmd.OutputTo acOutputForm"sfrmtimkiem"acFormatXLS, , True
    End Sub 


    Nhờ anh xem giúp em. Trân trọng cảm ơn anh
  • RE: Form lọc dữ liệu

    maidinhdan > 17-08-16, 11:22 PM

    (15-08-16, 11:26 PM)huuduy.duy Đã viết: Chào các anh chị
     Trên diễn đàn em có tìm được code tìm gợi ý nội dung cần tìm trong combobox, về áp dụng.
    Nhưng cho em hỏi có cách nào khi click vô combobox thì sẽ hiện ra danh sách nội dung không (hiện tại phải gõ vài từ thì nó mới hiện ra) ý của em muốn là khi click vào thì sẽ hiện ra danh sách và gõ ký tự gợi ý sẽ hiện ra nội dung gần đúng. 
    đồng thời xử lý lỗi khi chọn sai nội dung và chọn lại nội dung khác, hoặc hủy bỏ
    Tải file
    Trân trọng cảm ơn

    Cảm ơn bài ôngke ở phía trên, tôi theo dõi mục này vài ngày rồi hôm nay cũng chia sẽ 1 bài cơ bản thôi. Không có gì phức tạp cả.

    Ý 1: Gõ vài từ và hiện list gần giống với từ đã gõ
    Cho là Combox của bạn có tên: cboMaNV
    => Bạn chèn code này vào sự kiện KeyPress như sau
    Mã PHP:
    Private Sub cboMaNV_KeyPress(KeyAscii As Integer)
    Me.cboMaNV.Dropdown
    End Sub 

    Ý nghĩa là: Khi bạn gõ 1 ký tự, nó sẽ tự động dò trong list combobox và thả thực đơn của ký tự liên quan gần đúng nhất, gõ càng nhiều ký tự thì sẽ thu hẹp giống như kiểu lọc ra những từ gần đúng như bạn gõ.

    Ý 2: Nếu gõ từ mà kg có trong list thì báo cho hay

    Xem chi tiết link này: Có 3 cách làm: [Hỏi] Cách không cho nhập chỉ cho chọn trong combobox của access

    Thân mến!
  • RE: Form lọc dữ liệu

    huuduy.duy > 19-08-16, 12:07 AM

    (17-08-16, 11:19 PM)huuduy.duy Đã viết: Cám ơn anh rất nhiều. 
    Anh cho em hỏi thêm, em muốn xuất dữ liệu lọc được ở subform như ở bài #8 sang excel bằng lệnh sau, nhưng kết quả không là nó ra toàn bộ record của subform chứ không như kết quả sau khi lọc, và bị lỗi Font

    Mã PHP:
    Private Sub cmdXuatExcel_Click()
    DoCmd.OutputTo acOutputForm"sfrmtimkiem"acFormatXLS, , True
    End Sub 
    Nhờ anh xem giúp em. Trân trọng cảm ơn anh

    Em tim được trên Internet được đoạn code xuất sang Excel, thấy hay post lên chia sẻ cho những bạn cần.

    Mã PHP:
    Public Function Send2Excel(frm As FormOptional strSheetName As String)
    ' frm is the name of the form you want to send to Excel
    strSheetName is the name of the sheet you want to name it to
       
       Dim rst 
    As DAO.Recordset
       Dim ApXL 
    As Object
       Dim xlWBk 
    As Object
       Dim xlWSh 
    As Object
       Dim fld 
    As DAO.Field
       Const xlCenter 
    As Long = -4108
       Const xlBottom 
    As Long = -4107
       On Error 
    GoTo err_handler
       Set rst 
    frm.RecordsetClone

       Set ApXL 
    CreateObject("Excel.Application")
       Set xlWBk ApXL.Workbooks.Add
       ApXL
    .Visible True
           
       Set xlWSh 
    xlWBk.Worksheets("Sheet1")
       If Len(strSheetName) > 0 Then
           xlWSh
    .Name Left(strSheetName34)
       End If
       xlWSh.Activate
       xlWSh
    .Range("A1").Select


       For Each fld In rst
    .Fields
           ApXL
    .ActiveCell fld.Name
           ApXL
    .ActiveCell.Offset(01).Select
       Next
       rst
    .MoveFirst
       xlWSh
    .Range("A2").CopyFromRecordset rst
       xlWSh
    .Range("1:1").Select
       
    ' This is included to show some of what you can do about formatting.  
       '
    You can comment out or delete
       
    ' any of this below that you don't want to 
       
    'use in your own export.
       With ApXL.Selection.Font
           .Name = "Arial"
           .Size = 12
           .Strikethrough = False
           .Superscript = False
           .Subscript = False
           .OutlineFont = False
           .Shadow = False
       End With
       ApXL.Selection.Font.Bold = True
       With ApXL.Selection
           .HorizontalAlignment = xlCenter
           .VerticalAlignment = xlBottom
           .WrapText = False
           .Orientation = 0
           .AddIndent = False
           .IndentLevel = 0
           .ShrinkToFit = False
           .MergeCells = False
       End With
       ' 
    selects all of the cells
       ApXL
    .ActiveSheet.Cells.Select
       
    ' does the "autofit" for all columns
       ApXL.ActiveSheet.Cells.EntireColumn.AutoFit
       ' 
    selects the first cell to unselect all cells
       xlWSh
    .Range("A1").Select

       rst
    .Close
       Set rst 
    Nothing
       Exit 
    Function
    err_handler:
       DoCmd.SetWarnings True
       MsgBox Err
    .DescriptionvbExclamationErr.Number
       Exit 
    Function
    End Function 

    Mã PHP:
    Call Send2Excel(Me"SheetNameHereInQuotes"
    Mã PHP:
    Call Send2Excel(Forms!YourFormNameHere"SheetNameInQuotes"

    Mã PHP:
    'if code is on the main form:
    Call Send2Excel(Me.SubformControl.Form, "SheetNameInQuotes") 

    Mã PHP:
    'if code is on a completely different form:

    Call Send2Excel(Forms!YourMainFormName.SubformControl.Form, "SheetNameInQuotes") 
  • RE: Form lọc dữ liệu

    huuduy.duy > 20-08-16, 06:52 AM

    (17-08-16, 12:43 AM)ongke0711 Đã viết:
    (16-08-16, 09:03 PM)huuduy.duy Đã viết: 1 / Anh cho em hỏi, theo như file này thì tổng số Record bảng việc riêng là 11, trong đó 
       Tháng 5 có 1 trường hợp
       Tháng 6 có 5 trường hợp 
       Tháng 7 có 5 trường hợp
    Nhưng khi lọc theo cboThang,  thì trường  hợp chọn tháng 6 để lọc kết quả chỉ ra có 4 record, thiếu 1 trường hợp
    Như vậy thì bị lỗi gì vậy anh, nhờ anh xem giúp.
    2/ Trường em muốn tìm nhanh trong combobox khi gõ 1 vài ký gợi ý, thì làm như thế nào vậy anh( ở bài #6  ). 
    Nhờ anh giúp đỡ
    Trân trọng cảm ơn

    1. Lỗi Record không hiển thị của tháng 6 là do trường [LyDo] của record đó đang là rỗng => câu lệnh của điều kiện lọc hiện tại sai, chưa tính đến trường hợp trường dữ liệu là NULL. Lỗi này cũng xảy ra cho các record khác nếu các trường [HoTen], [BoPhan]... có giá trị NULL.
    Bạn sửa code của Sub Loc() như bên dưới. 
    Mã PHP:
    Sub Loc()
       Dim dieukienloc As StringstrSQL As String
       Dim lngLen 
    As Long
       Const conJetDate 
    "\#mm\/dd\/yyyy\#"
       
       If Not IsNull
    (Me.txtHoTenThen
           dieukienloc 
    dieukienloc "[tbNhanvien.Tennhanvien] LIKE '*" Me.txtHoTen "*' AND "
       End If
       
       If Not IsNull
    (Me.cboBoPhanThen
           dieukienloc 
    dieukienloc "[tbMaBophan.TenBophan] LIKE '" Me.cboBoPhan "' AND "
       End If
       
       If Not IsNull
    (Me.txtLyDoThen
           dieukienloc 
    dieukienloc "[LyDo] LIKE '*" Me.txtLyDo "*' AND "
       End If
       
       Select 
    Case Me.fraThoiGian.Value
           Case 1
               If Not IsNull
    (Me.cboThangThen
                   dieukienloc 
    dieukienloc "Month([BatDau]) = " Me.cboThang " AND "
               End If
           Case 2
               If Not IsNull
    (Me.cboQuyThen
                   dieukienloc 
    dieukienloc "(Month([BatDau])+2)\3 = " Me.cboQuy " AND "
               End If
           Case 3
               If Not IsNull
    (Me.txtTuNgayThen
                   dieukienloc 
    dieukienloc "[BatDau] >= " Format(Me.txtTuNgayconJetDate) & " AND "
               End If
               If Not IsNull(Me.txtDenNgayThen
                   dieukienloc 
    dieukienloc "[BatDau] < " Format(Me.txtDenNgayconJetDate) & " AND "
               End If
       End Select
       
       lngLen 
    Len(dieukienloc) - 5
       If lngLen 
    <= 0 Then
           MsgBox 
    "Khong co dieu kien loc du lieu"vbInformation"Thông báo"
           strSQL "SELECT B_ViecRieng.Manhanvien, tbNhanvien.Tennhanvien, tbMabophan.TenBophan, B_ViecRieng.SoNgayNghi, B_ViecRieng.BatDau, B_ViecRieng.KetThuc, B_ViecRieng.LyDo, B_ViecRieng.MaNhanVienDuyet1, B_ViecRieng.MaNhanVienDuyet2, B_ViecRieng.MaNhanVienDuyet3, B_ViecRieng.GhiChu " _
                   
    "FROM (tbMabophan INNER JOIN tbNhanvien ON tbMabophan.MaBophan = tbNhanvien.MaBophan) INNER JOIN B_ViecRieng ON tbNhanvien.MaNhanvien = B_ViecRieng.Manhanvien"
           Me.sfrmTimKiem.Form.RecordSource strSQL
           Exit Sub
       Else
           dieukienloc 
    Left$(dieukienloclngLen)
           strSQL "SELECT B_ViecRieng.Manhanvien, tbNhanvien.Tennhanvien, tbMabophan.TenBophan, B_ViecRieng.SoNgayNghi, B_ViecRieng.BatDau, B_ViecRieng.KetThuc, B_ViecRieng.LyDo, B_ViecRieng.MaNhanVienDuyet1, B_ViecRieng.MaNhanVienDuyet2, B_ViecRieng.MaNhanVienDuyet3, B_ViecRieng.GhiChu " _
                   
    "FROM (tbMabophan INNER JOIN tbNhanvien ON tbMabophan.MaBophan = tbNhanvien.MaBophan) INNER JOIN B_ViecRieng ON tbNhanvien.MaNhanvien = B_ViecRieng.Manhanvien " _
                   
    "WHERE " dieukienloc
           Me
    .sfrmTimKiem.Form.RecordSource strSQL
       End 
    If
       
    End Sub 

    2. Trường hợp vừa gõ tìm kiếm trực tiếp trong combobox, vừa click để hiển thị bình thường thì tôi chưa làm được.
    Cho em hỏi, em muốn thêm chữ Tất cả trong cboBophan để tìm tất cả các bộ phận kết hợp với các điều kiện còn lại thì làm như thế nào. (Không bấm delete để xóa nội dung cboBophan)
    HIện tại, em thêm code cho sự kiện double click để xoa nội dung cboBophan 
    Mã PHP:
    Private Sub cboBoPhan_DblClick(Cancel As Integer)
    Me.cboBoPhan Null
    Call Loc
    End Sub 
    Em Cảm ơn
  • RE: Form lọc dữ liệu

    ongke0711 > 20-08-16, 10:07 AM

    Bạn dùng Union query cho cboBoPhan.
    Mã PHP:
    SELECT tbMabophan.TenBophantbMabophan.MaBophan
    FROM tbMabophan
    UNION
    SELECT   
    '<Tất cả>','ALL' FROM tbMabophan
  • RE: Form lọc dữ liệu

    huuduy.duy > 20-08-16, 10:25 AM

    (20-08-16, 10:07 AM)ongke0711 Đã viết: Bạn dùng Union query cho cboBoPhan.
    Mã PHP:
    SELECT tbMabophan.TenBophantbMabophan.MaBophan
    FROM tbMabophan
    UNION
    SELECT   
    '<Tất cả>','ALL' FROM tbMabophan

    Nếu vậy thì em phải chỉnh đoạn code
    Mã PHP:
     
    ------------
    If 
    Not IsNull(Me.cboBoPhanThen
          dieukienloc 
    dieukienloc "[tbMaBophan.TenBophan] LIKE '" Me.cboBoPhan "' AND "
    End If 

    thành 
    Mã PHP:
     
    ------------
    If 
    Not IsNull(Me.cboBoPhanThen
          dieukienloc 
    dieukienloc "[tbMaBophan.TenBophan] LIKE '" Me.cboBoPhan "' AND "
    ElseIf Me.cboBoPhan "T?t c?" Then
          dieukienloc 
    dieukienloc "[tblMabophan.TenBophan] LIKE '*"  "' AND "
    End If 

    vậy đúng không anh, sao mà nó không ra kết quả.
    Nhờ anh xem giúp em
    Trân trọng cảm ơn!
  • RE: Form lọc dữ liệu

    ongke0711 > 20-08-16, 05:43 PM

    - Code VBA không hiểu tiếng Việt có dấu nên khi bạn code như trên nó không hiểu.
    - Để cho nhanh, bạn đổi chữ "Tất cả" thành "Tat ca" trong query.
    - Code:
    Mã PHP:
    If Not IsNull(Me.cboBoPhanThen
          If Me
    .cboBoPhan "Tat ca" Then
              dieukienloc 
    dieukienloc "[tblMabophan.TenBophan] LIKE '*"  "' AND "
         Else
              dieukienloc 
    dieukienloc "[tbMaBophan.TenBophan] LIKE '" Me.cboBoPhan "' AND "
         End If
    End If