Thao tác với ListBox (2 người xem)

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

lethanhnhan

Thành viên chính thức
Tham gia
27/5/07
Bài viết
76
Được thích
249
Chào các bạn,
Thao tác với ListBox thực sự ra cũng không phải dễ.
Tại sao chúng ta không dùng module được viết sẵn của trang web http://www.cpearson.com/ để thao tác với chúng?
Tôi xin giới thiệu với các bạn một ví dụ, ứng dụng các thủ tục trong module mà tôi đã đề cập bên trên.
Xin các bạn tham khảo file mẫu.

Thân,
Lê Thanh Nhân
 

File đính kèm

Anh ơi. Em còn dốt về Excel lắm. Anh có thể giãi thích thêm cái này dùng đễ làm gì ko? Nếu có thể dc thì anh cho 1 VD đơn giản đi chứ em nhìn vào file mẫu của anh em cũng ko hiểu lắm!
Miss TT
 
Upvote 0
thanhtri đã viết:
Anh ơi. Em còn dốt về Excel lắm. Anh có thể giãi thích thêm cái này dùng đễ làm gì ko? Nếu có thể dc thì anh cho 1 VD đơn giản đi chứ em nhìn vào file mẫu của anh em cũng ko hiểu lắm!
Miss TT
Chào Thanhtri
Cái này cũng là Listbox nè. Nhưng cũng chỉ là ví dụ tham khảo về Listbox thôi.
(nhưng muốn sử dụng để nhập hàng hoá phải bổ sung thêm nhiều http://www.giaiphapexcel.com/forum/showthread.php?t=2497)
Thân !
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Ai cha cha... Thế thì em NGU rồi. Nhưng cái VD của anh tedaynui thì rất tuyệt. Em biết phải làm gì với nó rồi. Cám ơn tất cả các anh nha!
Miss TT
 
Upvote 0
Chúng ta phát triển thêm một vài thủ tục giúp cho việc nhập liệu.
Khi người dùng nhập vào txtMaSanPham thì chương trình sẽ tìm kiếm những mã nào có chứa những ký tự người dùng nhập vào đưa vào một mảng. Sau đó gọi thủ tục
Mã:
Call PopulateListBoxFromArray(Me.LstBoxMain, InputArray)
để đưa mảng đã lọc vào lại ListBox
Mã:
Private Sub txtMaSanPham_Change()
    Dim sMaSanPham As String, sItem As String
    Dim i As Long, j As Long
    Dim InputArray() As String
    sMaSanPham = txtMaSanPham.Text
    For i = 0 To UBound(KeepArray, 1)
        sItem = KeepArray(i)
        If InStr(1, sItem, sMaSanPham) > 0 Then
            ReDim Preserve InputArray(j)
            InputArray(j) = sItem
            j = j + 1
        End If
    Next i
    If j > 0 Then
        Call PopulateListBoxFromArray(Me.LstBoxMain, InputArray)
    Else
        Me.LstBoxMain.Clear
    End If
End Sub

Mã:
Sub PopulateListBoxFromArray(ByVal AListBox, ByVal InputArray)
'Fill ListBox from an Array one dimention
    Dim iDimensions As Integer, i As Long
    If Not IsArray(InputArray) Then
        'If not an Array then exit sub
        Exit Sub
    End If
    If ArrayDimensions(InputArray) > 1 Then
        'If array dimension > 1 then exit sub
        Exit Sub
    End If
    Debug.Print TypeName(AListBox)
    If TypeName(AListBox) <> "ListBox" Then
        'If AListBox is not ListBox then also exit sub
        Exit Sub
    End If
    AListBox.Clear
    For i = 0 To UBound(InputArray, 1)
        AListBox.AddItem InputArray(i)
    Next i
End Sub
Hoặc ta có thể viết một hàm trả về một mảng sau khi đã lọc như sau:
Mã:
Function ArrListBoxFilter(ByVal KeepArray, ByVal SearchChar As String) As Variant
'Function will return an array of the filter result
    Dim TempArr() As String
    Dim sItem As String
    Dim i As Long, j As Long
    Dim InputArray() As String
    For i = 0 To UBound(KeepArray, 1)
        sItem = KeepArray(i)
        If InStr(1, sItem, SearchChar) > 0 Then
            ReDim Preserve TempArr(j)
            TempArr(j) = sItem
            j = j + 1
        End If
    Next i
    If j > 0 Then
        ArrListBoxFilter = TempArr
    End If
End Function


Lê Thanh Nhân
 
Upvote 0
Đề nghị Admin mở thêm Topic về ListBox, Mr LeThanhNhan sẽ hướng dẫn cụ thể hơn cho mọi người. Vấn đề này rất thực tế.
Mr LeThanhNhan ơi, khó quá, mà lại bằng tiếng Anh. Nên chăng anh có những bài ví dụ kèm theo từng buớc một, chậm thôi.
Chân thành cảm tạ.
 
Upvote 0
Cám ơn Lethanhnhan nhiều, cái này mình đang cần. Để mình làm thử xem.
Thân
 
Upvote 0
To Tedaynui
[
Mã:
QUOTE] Chào Thanhtri
Cái này cũng là Listbox nè. Nhưng cũng chỉ là ví dụ tham khảo về Listbox thôi.
(nhưng muốn sử dụng để nhập hàng hoá phải bổ sung thêm nhiều)[/QUOTE]
Nhờ bác bổ sung hộ file này, file của bác. Mình đã sử 1 chút.
- Hiện lên list box gồm mã hàng + tên hàng để dễ chọn
- Cho phép chọn theo nhóm, hay ký tự đầu thì list sẽ đưa tới gần vùng chọn (như của ListView).
Bác chỉnh hộ nhé, mình chưa thể kham mấy cái này.
Cám ơn Bác nhiều!
 

File đính kèm

Upvote 0
ThuNghi đã viết:
Nhờ bác bổ sung hộ file này, file của bác. Mình đã sử 1 chút.
- Hiện lên list box gồm mã hàng + tên hàng để dễ chọn
- Cho phép chọn theo nhóm, hay ký tự đầu thì list sẽ đưa tới gần vùng chọn (như của ListView).
Chào ThuNghi
Mấy cái này mình cũng không rành lắm, cũng chỉ mày mò thôi. ThuNghi down lại file Multi_Listbox-V2.zip ở bài #3 (mình đã up lại) xem thử có đúng ý không nhé.
Lưu ý
- Cho phép chọn theo nhóm, hay ký tự đầu thì list sẽ đưa tới gần vùng chọn (như của ListView).
Cái này có phân biệt chữ thường và chữ hoa. Nếu không muốn phân biệt thì ThuNghi thêm vào code tí nhé.

Thân
 
Lần chỉnh sửa cuối:
Upvote 0
ThuNghi đã viết:
To Tedaynui
[
Mã:
QUOTE] 
Chào Thanhtri
Cái này cũng là Listbox nè. Nhưng cũng chỉ là ví dụ tham khảo về Listbox thôi.
(nhưng muốn sử dụng để nhập hàng hoá phải bổ sung thêm nhiều)
  Nhờ bác bổ sung hộ file này, file của bác. Mình đã sử 1 chút.
- Hiện lên list box gồm mã hàng + tên hàng để dễ chọn
[B]- Cho phép chọn theo nhóm, hay ký tự đầu thì list sẽ đưa tới gần vùng chọn (như của ListView).[/B]
Bác chỉnh hộ nhé, mình chưa thể kham mấy cái này.
Cám ơn Bác nhiều!
[/quote] 
Không dám múa rìu qua mắt thợ, mạo muội đưa cái này lên, bác xem thử nhé.

Thân!
 

File đính kèm

Upvote 0
Chào Hiếu
Hình như Hiếu nén bằng 7-zip gì đó thì phải. Mình down về chỉ biết nhìn thôi, không bung ra được. Mình down 7-zip theo link ở Topic "Siêu nén" về cũng không chạy được. Soft này ở đâu cho mình cái link nhé hay mail luôn càng tốt.
Cám ơn nhiều nhé !

TDN
 
Lần chỉnh sửa cuối:
Upvote 0
tedaynui đã viết:
Chào Hiếu
Hình như Hiếu nén bằng 7-zip gì đó thì phải. Mình down về chỉ biết nhìn thôi, không bung ra được. Mình down 7-zip theo link ở Topic "Siêu nén" về cũng không chạy được. Soft này ở đâu cho mình cái link nhé hay mail luôn càng tốt.
Cám ơn nhiều nhé !

TDN

Bác vào lại nhé, đã có rồi đấy :
http://www.giaiphapexcel.com/forum/showpost.php?p=16733&postcount=4

Thân!
 
Upvote 0
Gởi Hiếu
File Chon theo Ma Hang.xls làm hay quá. Codes ngắn gọn vô cùng, thật sự mình không nghĩ tới. Cái này rất thường dùng. Cám ơn Bắp OK rất nhiều

Thanks !
TDN
 
Upvote 0
Chân thành cám ơn hai bạn nhiều
- To Tedaynui: phần này hình như áp dụng lấy mang theo dạng listview, nhưng mà khi chọn mã hàng thì nó update luôn mã và tên hàng nằm trong 1 Cell, kỳ này lại không cho chọn hơn 1 mã hàng. Nên thêm Offset sanpham để dễ thêm mã.
AB07 MAT HANG AB07
- To Okebab: chả biết phần nào đưa danh mục hàng hóa vào list cả, nhờ chỉ giáo.
Nếu có thể thì thêm phần Double Click vào mã nào thì tự cập nhật vào sh, và thêm phần nhấn shift thì chọn nhiều mã gần nhau, hay ctr thì chọn cách nhau.
AB07 MAT HANG AB07
 
Upvote 0
Gởi ThuNghi
- Đúng là dựa trên Listview, còn dùng Listbox thì có thể dùng thuộc tính Column trong listbox nhưng lâu quá không dùng nên quên rồi, để mình xem lại nhé.
- Còn khi Update thì mình nghĩ có thể dùng hàm Right là có thể khắc phục được mà. (chưa thử, hi hi)

TDN
 
Upvote 0
Gởi ThuNghi
Cái này là dùng Listbox 100% nè, ThuNghi xem thử nhé

TDN
 

File đính kèm

Upvote 0
ThuNghi đã viết:
Chân thành cám ơn hai bạn nhiều
...
- To Okebab: chả biết phần nào đưa danh mục hàng hóa vào list cả, nhờ chỉ giáo.
...

Dear ThuNghi !

Trong file đó có 1 Name in workbook tên là mahang
Bạn vào trong phần cửa sổ sọan thảo VBA click chọn Listbox trong Form Bebe

Bạn hãy để ý xem trong Propeties (một số thuộc tính sau):
Mục Rowsource: mahang (đó chính là thuộc tính để đưa danh mục hàng hóa vào list đây)
Mục Boundclumn: 1 (Tức là lấy giá trị cột thứ nhất của danh mục)
Mục ColumnCount: 2 (Tức là hiển thị vào trong list 2 cột - Nếu muốn hơn thì thay đổi số 2 thành 3 hoặc hơn nữa ...)
Mục ColumnWidths: 60pt;80pt (Đây là phần định dạng độ rộng cho cột thứ nhất = 60pt, cột thứ 2 = 80pt)

Vài dòng cùng bạn. Chúc bạn luôn vui vẻ !

Thân mến !
 
Upvote 0
có cách nào mà tạo listbox trực tiếp luôn hôn là tạo combo list và nhấn vào hiện ra môt dãy mh và tên hàng để chọn, có ai biết viết dum mình dzoii!!!
 
Upvote 0
quên combo box chứ không phải combo list
 
Upvote 0
tạo một combo box

mình muốn tạo một combo box để chọn mã hàng và tên hàng, ai biết làm dùm mình nha
 

File đính kèm

Upvote 0
Bạn xem thử file này nha. Nó hướng dẫn rất kẹn kẽ đấy
 

File đính kèm

Upvote 0
Trần đại thiếu gia viết hộ code tạo "HHFind" trong file "chon theo ma hang" của phần này. Chớ dùng công thức =IF(ISERROR(FIND(UPPER($D$1),B2,1))=FALSE,MAX($D$1:D1)+1,"")
Nếu 2.000 dòng thì hơi bị "phê"
Cám ơn nhiều.
 
Upvote 0
ThuNghi đã viết:
Trần đại thiếu gia viết hộ code tạo "HHFind" trong file "chon theo ma hang" của phần này. Chớ dùng công thức =IF(ISERROR(FIND(UPPER($D$1),B2,1))=FALSE,MAX($D$1:D1)+1,"")
Nếu 2.000 dòng thì hơi bị "phê"
Cám ơn nhiều.
Chỉ là múa rìu qua mắt thợ, nếu có thiếu sót chưa được xin chỉnh lại.

Mình dùng 2000 dòng, mình nghĩ dùng mảng trong VBA thì tốt hơn và nhanh hơn, nhưng mình lại không biết cách triển khai.

Mong được chỉ giáo

Thân!
 

File đính kèm

Upvote 0
Sao dạo này Bác khách sáo quá, cám ơn bác nhiều lắm. Đang triển khai file đó thay thế dùng listView, đang thêm tìm theo tên hàng.

To kellyfe: Bạn cần yêu cầu gì nữa, còn tạo combo box theo như file của bạn, chỉ c6àn vào Properties (Click phải) và chọn ListFillRange là là bảng danh mục (mahang), chọn listrow: tuỳ, chọn linkcell dể gán giá trị chọn, chọn Column Count để gán số cột hiển thị.
Trần đại thiếu gia ơi, hình như dùng VBA tạo HHfind nó chạy chậm hơn là công thức đã lập, chắc dùng công thức và chỉ cho những dòng dữ liệu thì có ct. Không biết còn hàm nào nhanh hơn Instr không nhỉ.
 
Upvote 0
file của mr okebab thì gần đúng nhưng chưa được như yêu cầu mình cần làm, Mr Okebab viết lại dùm mình nhe!!!
 
Upvote 0
ThuNghi đã viết:
Trần đại thiếu gia ơi, hình như dùng VBA tạo HHfind nó chạy chậm hơn là công thức đã lập, chắc dùng công thức và chỉ cho những dòng dữ liệu thì có ct. Không biết còn hàm nào nhanh hơn Instr không nhỉ.

Đúng là có lâu hơn một chút, nhưng bù lại File gọn hơn rất nhiều. Cái nào cũng có cái giá của nó cả. Làm công thức thì phải tạo cột phụ và chạy đủ 2000 hàng (cho list mới được tạo ra)

Thôi thì tùy vậy.

Thân!
 
Upvote 0
Lại Listbox nũa cần hỏi các bạn ?

Cung tương tự la bảng Hàng hóa khi nhập liệu thi mình ghi ra 1 sheet tạm khi xong lưu thì ghi vao sheet nhật ký vậy có cách nào để and vào listbox khi xong việc thi lưu váo sheet nhật ký luôn không
- Tức là thêm vào listbox từ các textbox trong form không các ban biết giúp mình nhe , hoặc có ví dụ luôn thì tuyệt vời


Minh cảm ơn trươc nhé
 
Upvote 0
Cung tương tự la bảng Hàng hóa khi nhập liệu thi mình ghi ra 1 sheet tạm khi xong lưu thì ghi vao sheet nhật ký vậy có cách nào để and vào listbox khi xong việc thi lưu váo sheet nhật ký luôn không
- Tức là thêm vào listbox từ các textbox trong form không các ban biết giúp mình nhe , hoặc có ví dụ luôn thì tuyệt vời
Minh cảm ơn trươc nhé
Bạn xem bài 10 trong link sau nhé.
http://www.giaiphapexcel.com/forum/showthread.php?t=13557

Chào bạn.
Về mặt nguyên tắc của CB và LB theo tôi thì các bước sau:
1- Xác định nguồn DL cho CB hay LB là từ đâu (ở đay là ở tại 1 sheet nào đó)
2- Tạo dữ liệu cho nó (CB hay LB)
3- Load lên trên Form (bước khởi tạo Form) và làm tươi (Re-load CB hay LB)DL cho nó sau các sự kiện(thao tác trên Form) như: Edit/Insert/Delete/.... -> thường thì sau các sự kiện này thì đi kèm với sự kiện Save -> nên gọi thủ tục load CB hay LB ở cuối thủ tục Save dư liệu.
Chúc bạn thành cong.
 
Lần chỉnh sửa cuối:
Upvote 0
Minh dã xem rồi nhưng vẫn cần phải lưu tạm rồi sau đó mới load lên LB

- Ý minh là khi chon nút ghi thì sẽ lưu vào LB rồi khi xong phiếu đó thì chọn nút lưu thì mới ghi vào Sheet kìa
- mình vẫn dang dùng cách ghi tạm lên sheet

- à sẵn bạn chỉ giúp minh sao mà máy của minh ko co ListWie

Cảm ơn bạn nhé
 
Upvote 0
Em muốn tạo 1 listbox trên form (1 hàng thôi), các item chỉ lấy giá trị từ các ô cách đều (trong cùng 1 cột) trong sheet. Có cách làm nào gọn nhẹ nhất không? Đọc code của các bài viết trên đây thật là "ù cả mắt" đối với dân nghèo kiến thức như em! Mong được giúp đỡ!
 
Upvote 0
Em muốn tạo 1 listbox trên form (1 hàng thôi), các item chỉ lấy giá trị từ các ô cách đều (trong cùng 1 cột) trong sheet. Có cách làm nào gọn nhẹ nhất không? Đọc code của các bài viết trên đây thật là "ù cả mắt" đối với dân nghèo kiến thức như em! Mong được giúp đỡ!
Ít ra bạn cũng phải đưa lên 1 file chứa dử liệu, chứ nói không thế biết sao mà giúp
 
Upvote 0
Cái Chon theo Ma Hang.xls rất hay nhưng mình không hiểu HHFind lấy ở đâu? Tìm không thấy Code của nó đâu cả.
 
Upvote 0
Em muốn lấy giá trị từ ô A2 (ô thứ nhất), F2 (ô thứ 6), K2 (ô thứ 11),... trên cùng một hàng. Phải làm thế nào?
Bạn phải nói rõ lấy từ đâu, đặt vào đâu và như thế nào thì sẽ có trả lời (Có thể chưa hay nhưng chấp nhận được). Chứ như bạn hỏi thì anh em rất khó để hiểu ý bạn ra sao ?
 
Upvote 0
Sự kiện "se" chuột giữa trong listbox?

Nhờ các Pro viết cho câu lệnh để sử dụng chuột giữa trong listbox của userform. Xin cảm ơn!
 

File đính kèm

Upvote 0
có anh/chị nào biết làm cách nào để khi nhập mã hàng thì tên hàng tự động hiện ra khộng?a/c nào biết chỉ giúp em với e cảm ơn nhìu.
 
Upvote 0
Có ai giúp mình viết code thêm cho file này với
Bạn muốn code cho nút Xem công nợ phải không? Theo mình nên dùng Combobox để tự động nạp danh sách nhân viên vào, khi người dùng chọn một mã thì các textbox sẽ tính toán công nợ luôn, không cần nút Xem công nợ nữa.
 
Upvote 0
Bạn muốn code cho nút Xem công nợ phải không? Theo mình nên dùng Combobox để tự động nạp danh sách nhân viên vào, khi người dùng chọn một mã thì các textbox sẽ tính toán công nợ luôn, không cần nút Xem công nợ nữa.

Do mình chỉ biết tạo được như vậy thôi à. Mới lò mò học lén í mà. Bạn có cách nào giúp mình với.
 
Upvote 0
Do mình chỉ biết tạo được như vậy thôi à. Mới lò mò học lén í mà. Bạn có cách nào giúp mình với.
Bạn xóa textbox1 chứa mã nhân viên đi, thay bằng combobox1, đặt thuộc tính style của combobox1 là 2-frmdropdownlist; xóa command button đi. Thêm code vào form
Mã:
Private Sub ComboBox1_Click()
Dim i, j, arr(), tamung, hoanung
i = ComboBox1.ListIndex + 5
With Sheets("Danhmuc")
TextBox2.Text = .Range("C" & i)
TextBox3.Text = .Range("D" & i)
TextBox4.Text = CLng(.Range("E" & i))
End With
With Sheets("Nhatky")
i = .Range("F65536").End(xlUp).Row
arr = .Range("F6:I" & i).Value
End With
For j = 1 To i - 5
If arr(j, 1) = ComboBox1.Text Then
tamung = tamung + arr(j, 3)
hoanung = hoanung + arr(j, 4)
End If
Next
TextBox5.Text = tamung
TextBox6.Text = hoanung
TextBox7.Text = CLng(TextBox4.Text) + tamung - hoanung
End Sub
Private Sub UserForm_Initialize()
ComboBox1.RowSource = "'Danhmuc'!B5:B" & Sheets("danhmuc").Range("B65536").End(xlUp).Row
End Sub
 
Upvote 0
Em làm báo cáo trên file này, khi xếp xem công nợ ở userform thì bảo là khó nhìn những con số quá. Bác có cách nào giúp em điều chỉnh khoảng cách giữa hàng trăm, hàng ngìn, hàng triệu không ạ?
 

File đính kèm

Upvote 0
Em làm báo cáo trên file này, khi xếp xem công nợ ở userform thì bảo là khó nhìn những con số quá. Bác có cách nào giúp em điều chỉnh khoảng cách giữa hàng trăm, hàng ngìn, hàng triệu không ạ?
Bạn sử dụng hàm Format, ví dụ Textbox4.Text = Format (1000000 , "##,##").
Bạn nên sửa caption của form thành tiêu đề "Xem công nợ" chẳng hạn.
 
Upvote 0
Em làm báo cáo trên file này, khi xếp xem công nợ ở userform thì bảo là khó nhìn những con số quá. Bác có cách nào giúp em điều chỉnh khoảng cách giữa hàng trăm, hàng ngìn, hàng triệu không ạ?
Bạn thêm 3 dòng lệnh tro thủ tục Form là được:
TextBox5.Value = Format(TextBox5.Value, "#,##0")
TextBox6.Value = Format(TextBox6.Value, "#,##0")
TextBox7.Value = Format(TextBox7.Value, "#,##0")
Xem file kèm nhé
 

File đính kèm

Upvote 0
Cám ơn bác Hau151978 và bác hanhpptc nhiều nhé
 
Upvote 0

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

Back
Top Bottom