-
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
Nhờ anh xem giúp em. Trân trọng cảm ơn anhMã PHP:Private Sub cmdXuatExcel_Click()
DoCmd.OutputTo acOutputForm, "sfrmtimkiem", acFormatXLS, , True
End Sub
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 Form, Optional 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(strSheetName, 34)
End If
xlWSh.Activate
xlWSh.Range("A1").Select
For Each fld In rst.Fields
ApXL.ActiveCell = fld.Name
ApXL.ActiveCell.Offset(0, 1).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.Description, vbExclamation, Err.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:
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)(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 String, strSQL As String
Dim lngLen As Long
Const conJetDate = "\#mm\/dd\/yyyy\#"
If Not IsNull(Me.txtHoTen) Then
dieukienloc = dieukienloc & "[tbNhanvien.Tennhanvien] LIKE '*" & Me.txtHoTen & "*' AND "
End If
If Not IsNull(Me.cboBoPhan) Then
dieukienloc = dieukienloc & "[tbMaBophan.TenBophan] LIKE '" & Me.cboBoPhan & "' AND "
End If
If Not IsNull(Me.txtLyDo) Then
dieukienloc = dieukienloc & "[LyDo] LIKE '*" & Me.txtLyDo & "*' AND "
End If
Select Case Me.fraThoiGian.Value
Case 1
If Not IsNull(Me.cboThang) Then
dieukienloc = dieukienloc & "Month([BatDau]) = " & Me.cboThang & " AND "
End If
Case 2
If Not IsNull(Me.cboQuy) Then
dieukienloc = dieukienloc & "(Month([BatDau])+2)\3 = " & Me.cboQuy & " AND "
End If
Case 3
If Not IsNull(Me.txtTuNgay) Then
dieukienloc = dieukienloc & "[BatDau] >= " & Format(Me.txtTuNgay, conJetDate) & " AND "
End If
If Not IsNull(Me.txtDenNgay) Then
dieukienloc = dieukienloc & "[BatDau] < " & Format(Me.txtDenNgay, conJetDate) & " 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$(dieukienloc, lngLen)
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.
HIện tại, em thêm code cho sự kiện double click để xoa nội dung cboBophan
Em Cảm ơnMã PHP:Private Sub cboBoPhan_DblClick(Cancel As Integer)
Me.cboBoPhan = Null
Call Loc
End Sub -
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.TenBophan, tbMabophan.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.TenBophan, tbMabophan.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.cboBoPhan) Then
dieukienloc = dieukienloc & "[tbMaBophan.TenBophan] LIKE '" & Me.cboBoPhan & "' AND "
End If
thành
Mã PHP:
------------
If Not IsNull(Me.cboBoPhan) Then
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.cboBoPhan) Then
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