Hỏi về Listbox (1 người xem)

Liên hệ QC

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

kawaicandy

Thành viên chính thức
Tham gia
2/4/11
Bài viết
69
Được thích
9
Xin chào mọi người.
Sau khi tìm tòi trên diễn đàn thì mình có tập làm 1 form bao gồm 1 combobox và 1 listbox. Trong sheet TH VL-NC-MTC thì khi mình click chuột phải thì form sẽ xuất hiện với các nội dung trong listbox như các file trong diễn đàn hướng dẫn. Tuy nhiên mình muốn phát triển thếm là khi lựa chọn theo từng lựa chọn trong combobox thì nội dung trong listbox cũng thay đổi theo tương ứng. Vì trình độ VBA íu quá nên nhờ các anh/chị trên diễn đàn giúp đỡ.
Mình cảm ơn
 

File đính kèm

loay hoay với vấn đề này cả tuần nay rồi. Có anh/chị nào biết có thể chỉ giúp mình tí được ko.
Cảm ơn rất nhiều
 
Upvote 0
Upvote 0
Hì, mình làm được rồi. Thật là cảm ơn bạn nhìu lắm, file của bạn rất hữu ích với mình
 
Upvote 0
Bạn ơi cho mình hỏi chút, bây giờ mình muốn tìm kiếm theo từ khoá thì phải làm như thế nào. Bạn giúp mình tí nhe.
Cảm ơn bạn nhìu!!!

http://www.mediafire.com/download/gmpq0c5wxki4nwi/VDListbox.rar

Mình không up file lên diễn đàn được mong bạn thông cảm.
Hôm nay tôi mới thấy bài này, trên file của bạn lọc cũng khá khó khăn vì dùng trên 4 mảng!

Dưới đây là toàn bộ những code chính của form bạn:

1) Sự kiện UserForm:

Mã:
Option Explicit


Private pri_ArrDanhMuc()
Private pri_IsMH As Boolean
Private pri_Ubd1 As Long, pri_Ubd2 As Long
Private pri_FltCol As Byte, pri_DanhMuc As Byte


Private Sub UserForm_Initialize()
    Dim ArrDanhMuc1(), ArrDanhMuc2(), ArrDanhMuc3(), ArrDanhMuc4()
    
    ArrDanhMuc1 = Sheet17.Range("A4:E" & Sheet17.[A65536].End(3).Row)
    ArrDanhMuc2 = Sheet18.Range("A5:F" & Sheet18.[A65536].End(3).Row)
    ArrDanhMuc3 = Sheet19.Range("A8:F" & Sheet19.[A65536].End(3).Row)
    ArrDanhMuc4 = Sheet16.Range("A6:H" & Sheet16.[A65536].End(3).Row)
    
    pri_ArrDanhMuc = Array(ArrDanhMuc1, ArrDanhMuc2, ArrDanhMuc3, ArrDanhMuc4)
    
    OptionButton1 = True
    optNoiDung = True
End Sub

2) Các nút Option:

a) Option chọn mảng:

Mã:
Private Sub OptionButton1_Change()
    If OptionButton1 Then
        pri_DanhMuc = 0
        pri_Ubd1 = UBound(pri_ArrDanhMuc(pri_DanhMuc), 1)
        pri_Ubd2 = UBound(pri_ArrDanhMuc(pri_DanhMuc), 2)
        HHList.List = pri_ArrDanhMuc(pri_DanhMuc)
        lblSoMuc.Caption = Format(HHList.ListCount, "#,##0")
        tbxTuKhoa = ""
        tbxTuKhoa.SetFocus
    End If
End Sub

b) Option chọn cột cần lọc:

Mã:
Private Sub optMaHieu_Change()
    If optMaHieu Then
        pri_FltCol = 1
        pri_IsMH = True
        tbxTuKhoa = ""
        tbxTuKhoa.SetFocus
    End If
End Sub

3) Thủ tục lọc chính:

[GPECODE=vb]
Private Sub tbxTuKhoa_Change()
Dim GetRows()
Dim strType As String
Dim n As Long, r As Long
If pri_IsMH Then
strType = UCase(tbxTuKhoa) & "*"
Else
strType = "*" & UCase(tbxTuKhoa) & "*"
End If
For r = 1 To pri_Ubd1
If UCase(pri_ArrDanhMuc(pri_DanhMuc)(r, pri_FltCol)) Like strType Then
n = n + 1
ReDim Preserve GetRows(1 To n)
GetRows(n) = r
End If
Next
If n Then
Dim ArrFilter(), c As Byte
ReDim ArrFilter(1 To n, 1 To pri_Ubd2)
For r = 1 To n
For c = 1 To pri_Ubd2
ArrFilter(r, c) = pri_ArrDanhMuc(pri_DanhMuc)(GetRows(r), c)
Next
Next
HHList.List = ArrFilter
Else
HHList.List = Array()
End If
lblSoMuc.Caption = Format(HHList.ListCount, "#,##0")
End Sub
[/GPECODE]




Bạn xem file và cho ý kiến nhé!
 

File đính kèm

Upvote 0
Hay quá bạn ah. Mình muốn hỏi thêm 1 vấn đề nữa nhé.
Bây giờ bên các sheet dữ liệu mình có nhập thêm các đơn giá của các hạng mục. Và bình thường thì mình dùng hàm vlookup để tham chiếu nhưng với dữ liệu lên đến vài ba chục ngàn và rất nhiều sheet nên làm cho file rất chậm. Chính vì vậy mà mình bỏ hàm vlookup và thay thế bằng đoạn code như sau
Mã:
Private Sub Nhap_Click()
 On Error Resume Next
        ActiveCell.Value = Me.HHList.Value
        Sheet12.Range("D" & ActiveCell.Row).Value = Me.HHList.Column(1)
        Sheet12.Range("E" & ActiveCell.Row).Value = Me.HHList.Column(2)
        If OptionButton1 Then
        Sheet12.Range("H" & ActiveCell.Row).Value = Me.HHList.Column(4)
        ElseIf OptionButton2 Then
        Sheet12.Range("I" & ActiveCell.Row).Value = Me.HHList.Column(3)
        Sheet12.Range("J" & ActiveCell.Row).Value = Me.HHList.Column(4)
        Sheet12.Range("K" & ActiveCell.Row).Value = Me.HHList.Column(5)
        ElseIf OptionButton3 Then
        Sheet12.Range("I" & ActiveCell.Row).Value = Me.HHList.Column(3)
        Sheet12.Range("J" & ActiveCell.Row).Value = Me.HHList.Column(4)
        Sheet12.Range("K" & ActiveCell.Row).Value = Me.HHList.Column(5)
        ElseIf OptionButton4 Then
        Sheet12.Range("H" & ActiveCell.Row).Value = Me.HHList.Column(4)
        Sheet12.Range("I" & ActiveCell.Row).Value = Me.HHList.Column(5)
        Sheet12.Range("J" & ActiveCell.Row).Value = Me.HHList.Column(6)
        Sheet12.Range("K" & ActiveCell.Row).Value = Me.HHList.Column(7)
        End If
        Unload Me
End Sub
Nhưng lúc này thì nếu mình cập nhập đơn giá mới thì những j dùng code sẽ ko tự cập nhập được như vlookup mà phải làm lại từ đầu. Vậy mình không biết có cách nào hay đoạn code nào có thể khắc phục được vấn đề trên không.
Một lần nữa cảm ơn bạn rất nhiều
 
Upvote 0
Bác ơi giúp em với, chắc bác đang bận việc. Chờ tin bác bấy lâu.
 
Upvote 0
Nhưng lúc này thì nếu mình cập nhập đơn giá mới thì những j dùng code sẽ ko tự cập nhập được như vlookup mà phải làm lại từ đầu. Vậy mình không biết có cách nào hay đoạn code nào có thể khắc phục được vấn đề trên không.
Một lần nữa cảm ơn bạn rất nhiều

Cho mình hỏi, khi bạn cập nhập đơn giá mới thì form Danhsach đang đóng hay đang mở? **~**
 
Upvote 0
Đang đóng bạn ah, mình cập nhập đơn giá trong các sheet dữ liệu thì bên sheet nhập ko cập nhập theo. Muốn đơn giá cập nhập theo lại phải mở lại form.
 
Upvote 0
Đang đóng bạn ah, mình cập nhập đơn giá trong các sheet dữ liệu thì bên sheet nhập ko cập nhập theo. Muốn đơn giá cập nhập theo lại phải mở lại form.

Bạn xem cách dùng InputBox để cập nhật đơn giá từ các sheet dữ liệu về sheet TH VL-NC-MTC xem sao! --=0

Bạn Doube_click vào cột đơn giá sheet VL-TB để thay đổi đơn giá.

Link MediaFire: VDListbox_V1 (dongia)
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bạn nhiều lắm, mình sẽ tìm hiểu có j minh ko biết mình xin hỏi bạn sau
 
Upvote 0
Bạn cho mình hỏi tí, bên sheet VL-TB đơn giá (cột E) là đơn giá thiết bị thì khi Doube_click sẽ hiện ra bảng InputBox để mình cập nhật. Vậy bây giờ mình muốn chèn thêm 1 cột đơn giá nhân công (cột F) và thủ tục cũng như bên đơn giá thiết bị thì code phải thêm những j
Cảm ơn bạn!!
 
Upvote 0
Bạn cho mình hỏi tí, bên sheet VL-TB đơn giá (cột E) là đơn giá thiết bị thì khi Doube_click sẽ hiện ra bảng InputBox để mình cập nhật. Vậy bây giờ mình muốn chèn thêm 1 cột đơn giá nhân công (cột F) và thủ tục cũng như bên đơn giá thiết bị thì code phải thêm những j
Cảm ơn bạn!!

Cũng tương tự thế, bạn xem file nhé **~**
Link MediaFire: VDListbox_V1 (don gia 1)
 
Lần chỉnh sửa cuối:
Upvote 0
Chào bạn.
Sau khi tìm hiểu và áp dụng file bạn gởi cho mình thì mình gặp vấn đề mong bạn giúp đỡ. Đó là trong nhiều sheet dữ liệu của mình thì mình dùng cách của bạn rất là OK, tuy nhiên có sheet dữ liệu thì mình lại cộng (+) giá trị từ nhiều sheet khác nhau chứ không phải là 1 value nên không thể nhập tay như cách của bạn được nên mình đành phải giải quyết theo hướng code vlookup. +-+-+-+
Mình xin mựơn file và code sau của anh ndu96081631 nhưng khi dữ liệu là 2 sheet trở lên thì mình ko giải quyết được mong được bạn chỉ giáo và giúp đỡ (yêu cầu chi tiết cụ thể mình có ghi trong file).
Chúc bạn 1 ngày đầu tuần sức khoẻ. Mình xin cảm ơn.
Mong MOD thông cảm, mình ko có ý spam vì đã post 1 bài tương tự bên topic vlookup nhưng đây cũng là vấn đề mà mình muốn hỏi khi lập topic này
 

File đính kèm

Upvote 0
Chào bạn.
Sau khi tìm hiểu và áp dụng file bạn gởi cho mình thì mình gặp vấn đề mong bạn giúp đỡ. Đó là trong nhiều sheet dữ liệu của mình thì mình dùng cách của bạn rất là OK, tuy nhiên có sheet dữ liệu thì mình lại cộng (+) giá trị từ nhiều sheet khác nhau chứ không phải là 1 value nên không thể nhập tay như cách của bạn được nên mình đành phải giải quyết theo hướng code vlookup. +-+-+-+
Mình xin mựơn file và code sau của anh ndu96081631 nhưng khi dữ liệu là 2 sheet trở lên thì mình ko giải quyết được mong được bạn chỉ giáo và giúp đỡ (yêu cầu chi tiết cụ thể mình có ghi trong file).
Chúc bạn 1 ngày đầu tuần sức khoẻ. Mình xin cảm ơn.
Mong MOD thông cảm, mình ko có ý spam vì đã post 1 bài tương tự bên topic vlookup nhưng đây cũng là vấn đề mà mình muốn hỏi khi lập topic này

Mời bạn xem file, +-+-+-+

Yêu cầu, Sheet "CT" cột A phải giống với các tên sheet mà bạn có + mã tại sheet đó, thì nó mới tìm ra.

Link MediaFire: vlookup (3)
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bạn đã giúp đỡ nhưng có 1 vài vấn đề bạn ah
- Bên sheet "MA" khi ta thay đổi thì bên sheet "CT" thay đổi tuy nhiên bên sheet "MA (2)" thì không làm được vậy bạn ah.
- Bên sheet "CT" khi ta gõ vào cột MA (B) trước cột tham chiếu (A) thì cho ra kết quả còn ngược lại nếu ta gõ vào cột tham chiếu trước (A) và cột MA (B) sau thì nó lại không cho ra kết quả. Cả 2 đều xảy ra đồng thời liệu có được không bạn
 
Upvote 0
- Bên sheet "MA" khi ta thay đổi thì bên sheet "CT" thay đổi tuy nhiên bên sheet "MA (2)" thì không làm được vậy bạn ah.

Do Sub Auto_Open() chỉ cài mặc định là 1 Sheets("MA").

=> mình dựa vào code của a ndu96081631 để làm theo yêu cầu của bạn.

1. Tại sheet MA, MA (2), mình thêm (mục đích là hỗ trợ Sub Auto_Open)
Mã:
Private Sub Worksheet_Activate()
    Sheets("CT").Range("I1").Value = ActiveSheet.Name
End Sub

2. Trong Sub Auto_Open mình sửa
Set wks = Sheets("MA") thành Set wks = Sheets(Sheets("CT").Range("I1").Value)


- Bên sheet "CT" khi ta gõ vào cột MA (B) trước cột tham chiếu (A) thì cho ra kết quả còn ngược lại nếu ta gõ vào cột tham chiếu trước (A) và cột MA (B) sau thì nó lại không cho ra kết quả. Cả 2 đều xảy ra đồng thời liệu có được không bạn
Tại sheet CT - Private Sub Worksheet_Change(ByVal Target As Range)
Bạn sửa If Target.Column = 1 Then
thành If Target.Column = 1 Or Target.Column = 2 Then
là được

chúc vui ! --=0

Link MediaFire: vlookup (4)
 
Lần chỉnh sửa cuối:
Upvote 0
Hì, chào bạn. Sau khi test thử thì mình vẫn thấy còn 1 lỗi này nữa bạn ah.
Trong sheet "CT" khi ta tham chiếu theo "MA" và "MA (2)" thì không vấn đề j xảy ra cả. Nhưng khi ta cập nhật trong sheet "MA" thì lúc đó trong sheet "CT" cũng sẽ cập nhật theo những j liên quan đến sheet "MA" tuy nhiên nhưng j tham chiếu theo sheet "MA (2)" sẽ bị xoá trắng. Ngược lại cũng vậy.
Cảm ơn bạn đã nhiệt tình giúp đỡ
 
Upvote 0
Hì, chào bạn. Sau khi test thử thì mình vẫn thấy còn 1 lỗi này nữa bạn ah.
Trong sheet "CT" khi ta tham chiếu theo "MA" và "MA (2)" thì không vấn đề j xảy ra cả. Nhưng khi ta cập nhật trong sheet "MA" thì lúc đó trong sheet "CT" cũng sẽ cập nhật theo những j liên quan đến sheet "MA" tuy nhiên nhưng j tham chiếu theo sheet "MA (2)" sẽ bị xoá trắng. Ngược lại cũng vậy.
Cảm ơn bạn đã nhiệt tình giúp đỡ

Mình chưa thể tuỳ biến được code của a ndu96081631 (nó liên quan đến "Scripting.Dictionary" mà mình thì mù tịt cái đó +-+-+-+)

Chắc bạn phải liên hệ đến a ấy rồi. --=0
 
Upvote 0
Hihi, cảm ơn bạn đã nhiệt tình giúp đỡ mình trong những ngày qua. Chắc mình phải liên hệ với anh ndu96081631 để tìm kiếm sự trợ giúp.
Một lần nữa cảm ơn bạn
 
Upvote 0

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

Back
Top Bottom