Hỏi về form lọc dữ liệu (1 người xem)

  • Thread starter Thread starter sthdfx
  • Ngày gửi Ngày gửi
Liên hệ QC

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

sthdfx

Thành viên mới
Tham gia
26/4/13
Bài viết
16
Được thích
0
Chào mọi người, em đang tập tẹ làm quen với VBA nay có một vấn đề muốn nhờ mọi người ra tay giúp đỡ.
Trong file của em ở userform FrmLTK, ở listbox bên trái em đã cho hiển thị hết lên các loại hàng tồn kho ở trong sheet LUOINKHAU bây giờ em muốn ở listbox bên phải sẽ hiện thị các giao dịch của một loại hàng hóa nào đó khi kích chọn ở listbox bên trái (tham chiếu qua Mã sản phẩm). Sau đó dữ liệu trong tab Nhập kho sẽ lấy ở sheet MUAHANG từ cột F đến cột K.
Vậy mong các cao nhân demo thử cho e 1 cái để em bắt chước học hỏi theo ạ. Em cảm ơn mọi người
 

File đính kèm

Chào mọi người, em đang tập tẹ làm quen với VBA nay có một vấn đề muốn nhờ mọi người ra tay giúp đỡ.
Trong file của em ở userform FrmLTK, ở listbox bên trái em đã cho hiển thị hết lên các loại hàng tồn kho ở trong sheet LUOINKHAU bây giờ em muốn ở listbox bên phải sẽ hiện thị các giao dịch của một loại hàng hóa nào đó khi kích chọn ở listbox bên trái (tham chiếu qua Mã sản phẩm). Sau đó dữ liệu trong tab Nhập kho sẽ lấy ở sheet MUAHANG từ cột F đến cột K.
Vậy mong các cao nhân demo thử cho e 1 cái để em bắt chước học hỏi theo ạ. Em cảm ơn mọi người

Mã:
Private Sub UserForm_Initialize()
    With Sheet1
            Me.LstLuoiNK.List = .[A2].Resize(.[A10000].End(3).Row, 7).Value
    End With
End Sub

vào properties của listbox1 set columncount=6
code nạp list cho listbox1 (nhập kho)
Mã:
Private Sub LstLuoiNK_Change()
Dim tim As Range
Set tim = Sheet12.[c:c].Find(Me.LstLuoiNK, , , xlWhole)
    If Not tim Is Nothing Then
        Me.ListBox1.List = tim.Offset(, 3).Resize(, 6).Value
    Else
        MsgBox "KHONG TIM THAY"
    End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
Private Sub UserForm_Initialize()
    With Sheet1
            Me.LstLuoiNK.List = .[A2].Resize(.[A10000].End(3).Row, 7).Value
    End With
End Sub

vào properties của listbox1 set columncount=6
code nạp list cho listbox1 (nhập kho)
Mã:
Private Sub LstLuoiNK_Change()
Dim tim As Range
Set tim = Sheet12.[c:c].Find(Me.LstLuoiNK, , , xlWhole)
    If Not tim Is Nothing Then
        Me.ListBox1.List = tim.Offset(, 3).Resize(, 6).Value
    Else
        MsgBox "KHONG TIM THAY"
    End If
End Sub

Dạ em cảm ơn bác nhiều ạ
 
Upvote 0
Bác ơi nhưng code này chỉ đưa ra được một kết quả đầu tiên thôi ạ, với những sản phẩm có nhiều hơn một giao dịch nghĩa là ở listbox bên phải cần thể hiện 2 hoặc nhiều giá trị thì vẫn chưa được ạ
 
Upvote 0
Dùng vòng lặp nạp vô mảng, rồi lấy mảng này làm source cho list. Chiều rảnh, nêu ban chưa có lời giải, tôi làm cho
 
Upvote 0
Vâng, chiều rảnh a giúp e vs nhé.

vừa mới về nhà, làm cho bạn nè, xem vừa ý chưa nha
Mã:
Private Sub LstLuoiNK_Change()
Dim muahang As Variant, i, j As Long
muahang = Sheet12.[C2:K2].Resize(Sheet12.[c10000].End(3).Row).Value
Me.ListBox1.Clear
For i = 1 To UBound(muahang)
    If muahang(i, 1) = Me.LstLuoiNK Then
        For j = 1 To 6
        With Me.ListBox1
            .AddItem
            .List(i - 1, j - 1) = muahang(i, j)
        End With
        Next
    End If
Next
Erase muahang
End Sub
 
Upvote 0
.List(i - 1, j - 1) = muahang(i, j)

Anh ơi hình như chỗ này bị lỗi hay sao í ạ, cứ khi chọn sản phẩm có nhiều hơn 1 giao dịch là sẽ báo lỗi
 
Upvote 0
.List(i - 1, j - 1) = muahang(i, j)

Anh ơi hình như chỗ này bị lỗi hay sao í ạ, cứ khi chọn sản phẩm có nhiều hơn 1 giao dịch là sẽ báo lỗi

thêm hai lệnh nào vào code xem
Mã:
Private Sub LstLuoiNK_Change()
[COLOR=#ff0000]On Error GoTo thoat[/COLOR]
Dim muahang As Variant, i, j As Long
muahang = Sheet12.[C2:K2].Resize(Sheet12.[c10000].End(3).Row).Value
Me.ListBox1.Clear
For i = 1 To UBound(muahang)
    If muahang(i, 1) = Me.LstLuoiNK Then
        For j = 1 To 6
        With Me.ListBox1
            .AddItem
            .List(i - 1, j - 1) = muahang(i, j)
        End With
        Next
    End If
Next
Erase muahang
[COLOR=#ff0000]thoat:
On Error GoTo 0[/COLOR]

End Sub

nếu có lổi bạn gởi file đó lên xem, sao tôi test không thấy xảy ra lổi
 
Upvote 0
thêm hai lệnh nào vào code xem
Mã:
Private Sub LstLuoiNK_Change()
[COLOR=#ff0000]On Error GoTo thoat[/COLOR]
Dim muahang As Variant, i, j As Long
muahang = Sheet12.[C2:K2].Resize(Sheet12.[c10000].End(3).Row).Value
Me.ListBox1.Clear
For i = 1 To UBound(muahang)
    If muahang(i, 1) = Me.LstLuoiNK Then
        For j = 1 To 6
        With Me.ListBox1
            .AddItem
            .List(i - 1, j - 1) = muahang(i, j)
        End With
        Next
    End If
Next
Erase muahang
[COLOR=#ff0000]thoat:
On Error GoTo 0[/COLOR]

End Sub

nếu có lổi bạn gởi file đó lên xem, sao tôi test không thấy xảy ra lổi

Em thử nhiều rồi mà vẫn không được, anh gửi giúp em file vào mail sthdfx@gmail.com được không ạ. Em cảm ơn anh !
 
Upvote 0
Em thử nhiều rồi mà vẫn không được, anh gửi giúp em file vào mail sthdfx@gmail.com được không ạ. Em cảm ơn anh !

àh, tôi sai chổ màu đỏ
Mã:
Private Sub LstLuoiNK_Change()
Dim muahang As Variant, i, j As Long
muahang = Sheet12.[C2:K2].Resize(Sheet12.[c10000].End(3).Row).Value
Me.ListBox1.Clear
For i = 1 To UBound(muahang)
    If muahang(i, 1) = Me.LstLuoiNK Then
   [COLOR=#ff0000] k = k + 1[/COLOR]
        For j = 1 To 6
        With Me.ListBox1
            .AddItem
            [COLOR=#ff0000].List(k - 1, j - 1)[/COLOR] = muahang(i, j)
        End With
        Next
    End If
Next
Erase muahang
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom