Lọc dữ liệu theo điều kiện listbox (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

vulunktheky

Thành viên thường trực
Tham gia
2/3/18
Bài viết
274
Được thích
84
Giới tính
Nam
Chào anh chị và các bạn.

Hiện tại mình làm 1 user form như file đính kèm, mình muốn trích lọc dữ liệu theo điều kiện ra listbox2 trên userform khi click vào listbox1 building + line (như hình đính kèm) nhưng mình chưa tìm ra cách xử lý.
Trích lọc lên listbox với điều kiện như sau:
+Năm
+ Tháng
+ Building + line (được load từ listbox1)
Và dữ liệu lấy tương ứng sẽ là từ sheets “E1- E6” và từ cột E đến cột L tương ứng với từng Building và line trong listbox1.
Xin cảm ơn các anh chị và các bạn.

1.PNG
 

File đính kèm

Chào anh chị và các bạn.

Hiện tại mình làm 1 user form như file đính kèm, mình muốn trích lọc dữ liệu theo điều kiện ra listbox2 trên userform khi click vào listbox1 building + line (như hình đính kèm) nhưng mình chưa tìm ra cách xử lý.
Trích lọc lên listbox với điều kiện như sau:
+Năm
+ Tháng
+ Building + line (được load từ listbox1)
Và dữ liệu lấy tương ứng sẽ là từ sheets “E1- E6” và từ cột E đến cột L tương ứng với từng Building và line trong listbox1.
Xin cảm ơn các anh chị và các bạn.

View attachment 213308
Hi vọng đúng được cho bạn.
1. Trong 1 Module bất kỳ, khai báo biến toàn cục và dùng 1 hàm tự tạo như sau:
PHP:
Public Nam As Long, Thang As Long, Bd As String, Line As String
Public Dk1 As String, Dk2 As String, Dk3 As String, Dk4 As String

Public Function TransposeArray(myarray As Variant) As Variant
    Dim X As Long
    Dim Y As Long
    Dim Xupper As Long
    Dim Yupper As Long
    Dim tempArray As Variant
    Xupper = UBound(myarray, 2)
    Yupper = UBound(myarray, 1)
    ReDim tempArray(Xupper, Yupper)
    For X = 0 To Xupper
        For Y = 0 To Yupper
            tempArray(X, Y) = myarray(Y, X)
        Next Y
    Next X
    TransposeArray = tempArray
End Function
2. Trong Userform Frmmain
PHP:
Private Sub Report_Details_ListBox1_Click()
    With Me
        If .Report_Details_ListBox1.ListIndex >= 0 Then _
            .Report_Details_txtXuong = .Report_Details_ListBox1.List(.Report_Details_ListBox1.ListIndex, 0)
            .Report_Details_txtChuyen = .Report_Details_ListBox1.List(.Report_Details_ListBox1.ListIndex, 1)
            Bd = .Report_Details_txtXuong
            Line = .Report_Details_txtChuyen
            .Report_Details_InforXuong.Caption = Bd
            .Report_Details_InforChuyen.Caption = Line
            .Report_Details_InforThang.Caption = Format(Thang, "00") & "/" & Nam
    End With
    Call SearchbySQL
End Sub

Private Sub SearchbySQL()
    Dim arr
    Dim Cn As Object, Rst As Object
    Dim sqlStr As String, lR As Long, Filename As String, X As Long
    
    Set Cn = CreateObject("ADODB.Connection")
    Set Rst = CreateObject("ADODB.Recordset")
    
    lR = Sheets(Bd).Range("B" & Rows.Count).End(xlUp).Row
    Filename = ThisWorkbook.FullName
    sqlStr = "SELECT F4, F5, F6, F7, F8, F9, F10, F11 FROM [" & Bd & "$B4:L" & lR & "] WHERE" & " Year(F1) = " & Nam & "" & " And Month(F1) = " & Thang & "" & " And F2 = """ & Bd & """" & " And F3 = """ & Line & """"
    With Cn
        If Val(Application.Version) >= 12 Then 'EXCEL 2007 INSTANCE
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Filename & _
                      ";Extended Properties=""Excel 12.0 Xml;HDR=NO;"""
        Else
            .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Filename
        End If
        .Open
    End With
    
    On Error GoTo lbEndSub
    Set Rst = Cn.Execute(sqlStr)
    
    Me.Report_Details_ListBox2.ColumnCount = 8
    Me.Report_Details_ListBox2.List = TransposeArray(Rst.getrows())
    
lbEndSub:
    'Close connection and free memory
    If Not Rst Is Nothing Then
        If Rst.State = 1 Then Rst.Close
        Set Rst = Nothing
    End If
    
    If Cn.State = 1 Then Cn.Close
    Set Cn = Nothing
    If Err <> 0 Then
        MsgBox Err.Description, vbCritical, "Nguyen Duy Tuan thong bao loi"
        Me.Report_Details_ListBox2.Clear
    End If
End Sub
 
Upvote 0
Hi vọng đúng được cho bạn.
1. Trong 1 Module bất kỳ, khai báo biến toàn cục và dùng 1 hàm tự tạo như sau:
PHP:
Public Nam As Long, Thang As Long, Bd As String, Line As String
Public Dk1 As String, Dk2 As String, Dk3 As String, Dk4 As String

Public Function TransposeArray(myarray As Variant) As Variant
    Dim X As Long
    Dim Y As Long
    Dim Xupper As Long
    Dim Yupper As Long
    Dim tempArray As Variant
    Xupper = UBound(myarray, 2)
    Yupper = UBound(myarray, 1)
    ReDim tempArray(Xupper, Yupper)
    For X = 0 To Xupper
        For Y = 0 To Yupper
            tempArray(X, Y) = myarray(Y, X)
        Next Y
    Next X
    TransposeArray = tempArray
End Function
2. Trong Userform Frmmain
PHP:
Private Sub Report_Details_ListBox1_Click()
    With Me
        If .Report_Details_ListBox1.ListIndex >= 0 Then _
            .Report_Details_txtXuong = .Report_Details_ListBox1.List(.Report_Details_ListBox1.ListIndex, 0)
            .Report_Details_txtChuyen = .Report_Details_ListBox1.List(.Report_Details_ListBox1.ListIndex, 1)
            Bd = .Report_Details_txtXuong
            Line = .Report_Details_txtChuyen
            .Report_Details_InforXuong.Caption = Bd
            .Report_Details_InforChuyen.Caption = Line
            .Report_Details_InforThang.Caption = Format(Thang, "00") & "/" & Nam
    End With
    Call SearchbySQL
End Sub

Private Sub SearchbySQL()
    Dim arr
    Dim Cn As Object, Rst As Object
    Dim sqlStr As String, lR As Long, Filename As String, X As Long
   
    Set Cn = CreateObject("ADODB.Connection")
    Set Rst = CreateObject("ADODB.Recordset")
   
    lR = Sheets(Bd).Range("B" & Rows.Count).End(xlUp).Row
    Filename = ThisWorkbook.FullName
    sqlStr = "SELECT F4, F5, F6, F7, F8, F9, F10, F11 FROM [" & Bd & "$B4:L" & lR & "] WHERE" & " Year(F1) = " & Nam & "" & " And Month(F1) = " & Thang & "" & " And F2 = """ & Bd & """" & " And F3 = """ & Line & """"
    With Cn
        If Val(Application.Version) >= 12 Then 'EXCEL 2007 INSTANCE
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Filename & _
                      ";Extended Properties=""Excel 12.0 Xml;HDR=NO;"""
        Else
            .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Filename
        End If
        .Open
    End With
   
    On Error GoTo lbEndSub
    Set Rst = Cn.Execute(sqlStr)
   
    Me.Report_Details_ListBox2.ColumnCount = 8
    Me.Report_Details_ListBox2.List = TransposeArray(Rst.getrows())
   
lbEndSub:
    'Close connection and free memory
    If Not Rst Is Nothing Then
        If Rst.State = 1 Then Rst.Close
        Set Rst = Nothing
    End If
   
    If Cn.State = 1 Then Cn.Close
    Set Cn = Nothing
    If Err <> 0 Then
        MsgBox Err.Description, vbCritical, "Nguyen Duy Tuan thong bao loi"
        Me.Report_Details_ListBox2.Clear
    End If
End Sub
Hi Anh, khi e click sang một chuyền khác thì lại báo lỗi như thế này và không hiển thi CSDl, office e đang sử dụng là office 2010 standards
1552091198643.png
 
Upvote 0
Hi Anh, khi e click sang một chuyền khác thì lại báo lỗi như thế này và không hiển thi CSDl, office e đang sử dụng là office 2010 standards
View attachment 213340
Tôi gửi thiếu cho bạn, còn 2 thủ tục nữa trong Userform Frmmain như sau:
PHP:
Private Sub Report_Details_cbxNam_Change()
    Nam = Report_Details_cbxNam.Value
End Sub

Private Sub Report_Details_cbxThang_Change()
    Thang = Report_Details_cbxThang.Value
End Sub
Khi hiện lỗi như bạn nói là trường hợp không có kết quả thỏa mãn, listbox kết quả sẽ hiện ra bảng trắng
 
Upvote 0
Tôi gửi thiếu cho bạn, còn 2 thủ tục nữa trong Userform Frmmain như sau:
PHP:
Private Sub Report_Details_cbxNam_Change()
    Nam = Report_Details_cbxNam.Value
End Sub

Private Sub Report_Details_cbxThang_Change()
    Thang = Report_Details_cbxThang.Value
End Sub
Khi hiện lỗi như bạn nói là trường hợp không có kết quả thỏa mãn, listbox kết quả sẽ hiện ra bảng trắng
Mã:
 sqlStr = "SELECT F4, F5, F6, F7, F8, F9, F10, F11 FROM [" & Bd & "$B4:L" & lR & "] WHERE" & " Year(F1) = " & Nam & "" & " And Month(F1) = " & Thang & "" & " And F2 = """ & Bd & """" & " And F3 = """ & Line & """"
Đoạn này có bị sai vùng dữ liệu không anh, e thấy vẫn chưa hiển thị dữ liệu lên listbox
 
Upvote 0
Mã:
 sqlStr = "SELECT F4, F5, F6, F7, F8, F9, F10, F11 FROM [" & Bd & "$B4:L" & lR & "] WHERE" & " Year(F1) = " & Nam & "" & " And Month(F1) = " & Thang & "" & " And F2 = """ & Bd & """" & " And F3 = """ & Line & """"
Đoạn này có bị sai vùng dữ liệu không anh, e thấy vẫn chưa hiển thị dữ liệu lên listbox
Sau khi thêm 2 sự kiện textbox tôi vừa gửi bạn.
Bạn chạy Userform lên, chọn E4 - L01 sẽ có kết quả.
E1, E2 không có dữ liệu nên sẽ không có kết quả
 
Upvote 0
Sau khi thêm 2 sự kiện textbox tôi vừa gửi bạn.
Bạn chạy Userform lên, chọn E4 - L01 sẽ có kết quả.
E1, E2 không có dữ liệu nên sẽ không có kết quả
Không biết có sai chỗ nào không mà form của e vẫn không hiển thị kết quả
1552101364068.png
Anh có thể cho e xin file được không?
Bài đã được tự động gộp:

Không biết có sai chỗ nào không mà form của e vẫn không hiển thị kết quả
1552101364068.png
Anh có thể cho e xin file được không?
E muốn giữ lại ngày tháng thì se không có kết quả á anh.
1552101534732.png
 
Upvote 0
Không biết có sai chỗ nào không mà form của e vẫn không hiển thị kết quả
View attachment 213350
Anh có thể cho e xin file được không?
Bài đã được tự động gộp:


E muốn giữ lại ngày tháng thì se không có kết quả á anh.
View attachment 213351
Gửi bạn.
File của bạn có nhiều code quá, tôi nói thật là tôi không đủ khả năng xem hết.
Bạn cần gì thì tôi chỉ có thể giúp cái trực tiếp cái đó thôi, ảnh hưởng đến cái khác thì chắc tôi không làm được.
 

File đính kèm

Upvote 0
Gửi bạn.
File của bạn có nhiều code quá, tôi nói thật là tôi không đủ khả năng xem hết.
Bạn cần gì thì tôi chỉ có thể giúp cái trực tiếp cái đó thôi, ảnh hưởng đến cái khác thì chắc tôi không làm được.
Cảm ơn anh nhiều!
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom