Đây là control gì? Excel có nó không?

Liên hệ QC
Anh Trọng Nghĩa mến! Lúc này anh khỏe không ? em thấy có bài này dùng nhập tên cũng hay lắm, tuy nhiên còn bị hạn chế về tốc độ xử lý dò tìm dử liệu, vì vậy em muốn hỏi anh : ở bài này http://www.giaiphapexcel.com/forum/showthread.php?72633-Hỏi-cách-tạo-combo-box-thông-minh/page5 Trang #41
Người ta dùng textbox kết hợp listbox, vậy anh có thể thay textbox kết hợp listbox bằng combox anh tạo cho em dùng bấy lâu nay không? Em thấy combox của anh chạy rất nhẹ rất nhanh trong khi textbox kết hợp listbox chạy rất nặng nề nhất là khi danh sách dài khoảng 1000 dòng ,danh sách càng dài chạy càng nặng. Em đã thử mày mò lắp ghép đủ thứ nhưng nó cứ báo lổi hoặc không nhút nhít gì hết, tóm lại là không thể làm được gì cả.
Vậy em xin anh dành chút thời gian quý báu xem thử có thể giúp em không nhé, em rất cám ơn anh.
 
Lần chỉnh sửa cuối:
Anh Trọng Nghĩa mến! Lúc này anh khỏe không ? em thấy có bài này dùng nhập tên cũng hay lắm, tuy nhiên còn bị hạn chế về tốc độ xử lý dò tìm dử liệu, vì vậy em muốn hỏi anh : ở bài này http://www.giaiphapexcel.com/forum/showthread.php?72633-Hỏi-cách-tạo-combo-box-thông-minh/page5 Trang #41
Người ta dùng textbox kết hợp listbox, vậy anh có thể thay textbox kết hợp listbox bằng combox anh tạo cho em dùng bấy lâu nay không? Em thấy combox của anh chạy rất nhẹ rất nhanh trong khi textbox kết hợp listbox chạy rất nặng nề nhất là khi danh sách dài khoảng 1000 dòng ,danh sách càng dài chạy càng nặng. Em đã thử mày mò lắp ghép đủ thứ nhưng nó cứ báo lổi hoặc không nhút nhít gì hết, tóm lại là không thể làm được gì cả.
Vậy em xin anh dành chút thời gian quý báu xem thử có thể giúp em không nhé, em rất cám ơn anh.

bạn hỏi anh Nghĩa, nhưng tôi thất nghiệp quá, trả lời đại luôn nha
tôi thấy việc nó nhanh hay chậm ko phụ thuộc vào textbox, listbox hay combobox, mà do bạn sử dụng bao nhiêu cái vòng lặp, lặp càng nhiều thì chạy càng chậm
ở sub loc (module 2), tôi thấy anh QuangHai có sử dụng cái function TV, tôi ko rỏ mục đích cuả function này là gì. nhưng bạn thử bỏ nó xem có nhanh hơn ko
Mã:
Sub loc()
Dim dl(), i As Long, c As Byte
dl = Sheet2.[A4:D1000].Value
ActiveSheet.ListBox1.Clear
c = ActiveCell.Column - 2
For i = 1 To UBound(dl)
   If dl(i, c) <> "" Then
      If LCase(dl(i, c)) Like "*" & LCase(ActiveSheet.TextBox1.Value) & "*" Then
         ActiveSheet.ListBox1.AddItem dl(i, c)
      End If
   End If
Next
End Sub
 
bạn hỏi anh Nghĩa, nhưng tôi thất nghiệp quá, trả lời đại luôn nha
tôi thấy việc nó nhanh hay chậm ko phụ thuộc vào textbox, listbox hay combobox, mà do bạn sử dụng bao nhiêu cái vòng lặp, lặp càng nhiều thì chạy càng chậm
ở sub loc (module 2), tôi thấy anh QuangHai có sử dụng cái function TV, tôi ko rỏ mục đích cuả function này là gì. nhưng bạn thử bỏ nó xem có nhanh hơn ko
Mã:
Sub loc()
Dim dl(), i As Long, c As Byte
dl = Sheet2.[A4:D1000].Value
ActiveSheet.ListBox1.Clear
c = ActiveCell.Column - 2
For i = 1 To UBound(dl)
   If dl(i, c) <> "" Then
      If LCase(dl(i, c)) Like "*" & LCase(ActiveSheet.TextBox1.Value) & "*" Then
         ActiveSheet.ListBox1.AddItem dl(i, c)
      End If
   End If
Next
End Sub



Cám ơn anh Let'GâuGâu nhé đúng là có cải thiện về tốc độ rồi đấy nhưng vẫn chưa bằng combox box của anh Trọng Nghĩa, combox của anh Trọng Nghĩa có dùng hàm lọc rất nhanh nhẹ là Filter2Darray gì gì đó của anh Siwtom. Còn cái function TV theo em biết nó dùng hổ trợ gỏ từ không dấu khi lọc ra có thêm các từ có dấu, ví dụ hiện tại không dùng cái function TV, nếu gỏ THI listbox sẻ cho ra các tên với chử I không có dấu ví dụ như THI THINH THIÊN… .Khi dùng cái function TV nếu gỏ THI không những chỉ ra THI THINH THIÊN mà còn có thêm THÍ THÌ THĨNH THỊNH tức là ghỏ THI chử I không có dấu nhưng vẩn ra I Í Ì Ĩ Ị…
 
Cám ơn anh Let'GâuGâu nhé đúng là có cải thiện về tốc độ rồi đấy nhưng vẫn chưa bằng combox box của anh Trọng Nghĩa, combox của anh Trọng Nghĩa có dùng hàm lọc rất nhanh nhẹ là Filter2Darray gì gì đó của anh Siwtom. Còn cái function TV theo em biết nó dùng hổ trợ gỏ từ không dấu khi lọc ra có thêm các từ có dấu, ví dụ hiện tại không dùng cái function TV, nếu gỏ THI listbox sẻ cho ra các tên với chử I không có dấu ví dụ như THI THINH THIÊN… .Khi dùng cái function TV nếu gỏ THI không những chỉ ra THI THINH THIÊN mà còn có thêm THÍ THÌ THĨNH THỊNH tức là ghỏ THI chử I không có dấu nhưng vẩn ra I Í Ì Ĩ Ị…

Anh Let'GâuGâu ơi anh còn thất nghiệp không ? em nhờ anh sửa code sao cho textbox listbox hiện ra cho ta gỏ nhập tên chỉ khi có gỏ kí tự vào ô(nghĩa là chỉ show ra khi gỏ tên cần tìm), còn lúc ta click hoặc di chuyễn bằng bàn phím mà chưa gỏ kí tự tìm tên vào thì ô sẻ không show ra testbox – listbox .

Nếu làm được việc này excel sẻ chạy nhẹ hơn vì không cần phải luôn hiện listbox-testbox đồng thời nhìn đọc cũng khỏe mắt hơn do không bị testbox-listbox che các ô.
 
Anh Let'GâuGâu ơi anh còn thất nghiệp không ? em nhờ anh sửa code sao cho textbox listbox hiện ra cho ta gỏ nhập tên chỉ khi có gỏ kí tự vào ô(nghĩa là chỉ show ra khi gỏ tên cần tìm), còn lúc ta click hoặc di chuyễn bằng bàn phím mà chưa gỏ kí tự tìm tên vào thì ô sẻ không show ra testbox – listbox .

Nếu làm được việc này excel sẻ chạy nhẹ hơn vì không cần phải luôn hiện listbox-testbox đồng thời nhìn đọc cũng khỏe mắt hơn do không bị testbox-listbox che các ô.

ở module 1 (thaydoi)
bỏ đi đoạn code listbox1
Mã:
Sub thaydoi()
With ActiveSheet.TextBox1
        .Visible = False
        .Visible = True
        .Left = ActiveCell.Left
        .Top = ActiveCell.Top
        .Width = ActiveCell.Width
        .Height = ActiveCell.Height
        .Value = ""
        .Activate
End With
'With ActiveSheet.ListBox1
        '.Visible = False
        '.Visible = True
        '.Left = ActiveCell.Offset(1).Left
        '.Top = ActiveCell.Offset(1).Top
       ' .Width = ActiveCell.Offset(1).Width
        '.Clear
'End With
End Sub
chuyển nó qua sheet nào có sử dụng Textbox& listbox
Mã:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
With ActiveSheet.ListBox1
        .Visible = False
        .Visible = True
        .Left = ActiveCell.Offset(1).Left
        .Top = ActiveCell.Offset(1).Top
        .Width = ActiveCell.Offset(1).Width
        .Clear
End With
End Sub

chừng nào siêng tôi chuyển qua combobox cho bạn (nhưng chưa có cái filter2Darray nha, tôi chua học hàm đó)
 
ở module 1 (thaydoi)
bỏ đi đoạn code listbox1
Mã:
Sub thaydoi()
With ActiveSheet.TextBox1
        .Visible = False
        .Visible = True
        .Left = ActiveCell.Left
        .Top = ActiveCell.Top
        .Width = ActiveCell.Width
        .Height = ActiveCell.Height
        .Value = ""
        .Activate
End With
'With ActiveSheet.ListBox1
        '.Visible = False
        '.Visible = True
        '.Left = ActiveCell.Offset(1).Left
        '.Top = ActiveCell.Offset(1).Top
       ' .Width = ActiveCell.Offset(1).Width
        '.Clear
'End With
End Sub
chuyển nó qua sheet nào có sử dụng Textbox& listbox
Mã:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
With ActiveSheet.ListBox1
        .Visible = False
        .Visible = True
        .Left = ActiveCell.Offset(1).Left
        .Top = ActiveCell.Offset(1).Top
        .Width = ActiveCell.Offset(1).Width
        .Clear
End With
End Sub

chừng nào siêng tôi chuyển qua combobox cho bạn (nhưng chưa có cái filter2Darray nha, tôi chua học hàm đó)

Anh Let'GâuGâu ơi cách hướng dẫn của anh không đáp ứng đúng yêu cầu của em rồi, bỏ nó đi chỉ làm mất đi textbox thôi anh ạ, yêu cầu của em là muốn nó show ra khi cân thiết chứ không bỏ đi.
 
Anh Let'GâuGâu ơi cách hướng dẫn của anh không đáp ứng đúng yêu cầu của em rồi, bỏ nó đi chỉ làm mất đi textbox thôi anh ạ, yêu cầu của em là muốn nó show ra khi cân thiết chứ không bỏ đi.

không biết là bạn làm sao? tôi khoá code của listbox mà có liên quan gì tới textbox đâu?
khi gõ chữ vào tẽxtbox thì listbox mới xuất hiện (là do sự kiện keypress)
 
không biết là bạn làm sao? tôi khoá code của listbox mà có liên quan gì tới textbox đâu?
khi gõ chữ vào tẽxtbox thì listbox mới xuất hiện (là do sự kiện keypress)

Vì chưa hiểu hướng dẫn của anh nên em trách nhầm, cho em xin lổi nhé, bây giờ trông khỏe mắt hơn nhiều rồi cám ơn anh nhiều ạ.

Anh giỏi về textbox listbox quá ta. Nhân đây em nhờ anh rở rối giúp nhé:

1.Em mài mò chắp ghép được đoạn code này :

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then
    If Target.Rows.Count = 1 Then
        If Target <> "" Then
            Target.Offset(, 2).Activate
        End If
    End If
ElseIf Target.Column = 5 Then
    If Target.Rows.Count = 1 Then
        If Target <> "" Then
            Target.Offset(, 1).Activate
        End If
    End If
ElseIf Target.Column = 6 Then
    If Target.Rows.Count = 1 Then
        If Target <> "" Then
            Target.Offset(1, -3).Activate
        End If
    End If
End If
End Sub

Với mong muốn là khung chọn ô di chuyễn có qui luật đúng theo thứ tự như ta cài đặt. ở đây em bắt nó di chuyễn theo cột C --> cột E --> cột F --> xuống dòng quay về cột C tiếp tục chu kỳ mới.

Nhưng em gặp phải lổi: khi khung chọn ô xuống dòng nhảy đến cột C có textbox, lẻ ra nó phải hiện ra , không hiểu sao nó biến đi đâu mất cả khung chọn ô cũng biến luôn.

2.Em nhờ anh giúp em chỉnh lại cái listbox sao cho khi hiện ra có thêm mấy cột kế tiếp, lưu ý chỉ hiện view ra để xem thêm thôi còn mọi cái khác không có gì thay đổi. Em lấy file củ sửa sheet Lenh.giao.hang và DANHMUC đôi chút để minh họa anh xem giúp nhé.
 

File đính kèm

Lần chỉnh sửa cuối:
Vì chưa hiểu hướng dẫn của anh nên em trách nhầm, cho em xin lổi nhé, bây giờ trông khỏe mắt hơn nhiều rồi cám ơn anh nhiều ạ.

Với mong muốn là khung chọn ô di chuyễn có qui luật đúng theo thứ tự như ta cài đặt. ở đây em bắt nó di chuyễn theo cột C --> cột E --> cột F --> xuống dòng quay về cột C tiếp tục chu kỳ mới.

Nhưng em gặp phải lổi: khi khung chọn ô xuống dòng nhảy đến cột C có textbox, lẻ ra nó phải hiện ra , không hiểu sao nó biến đi đâu mất cả khung chọn ô cũng biến luôn.

2.Em nhờ anh giúp em chỉnh lại cái listbox sao cho khi hiện ra có thêm mấy cột kế tiếp, lưu ý chỉ hiện view ra để xem thêm thôi còn mọi cái khác không có gì thay đổi. Em lấy file củ sửa sheet Lenh.giao.hang và DANHMUC đôi chút để minh họa anh xem giúp nhé.

bạn xem thử có vừa ý ko?, ở sheet "lenh giao hang"
 

File đính kèm

bạn xem thử có vừa ý ko?, ở sheet "lenh giao hang"


Cám ơn anh Let'GâuGâu nhiều ạ! em xin nói lại nhé:

* khi gõ ký tự(ví dụ chử a) listbox hiện như thế là đúng rồi.


* Cái chưa đúng:

- khi chọn tên--> enter -->chỉ cần nhập vào cột tên hàng (tức chỉ nhập nguyễn văn an thôi) , các cột còn lại em phải nhập gõ bằng tay.
Ví dụ: em gõ vào texbox tìm nhập tên hàng hóa ở cột tên hàng, các cột còn lại là số lương thùng, số lượng hộp, đương nhiên phải gõ nhập bằng tay.


-Vì vậy khi gõ nhập bằng tay em muốn: sau khi enter nhập xong tên hàng khung chọn ô nó tự nhảy từ cột C (cột tên hàng) ----> cột E(cột kho hàng <=> cột số lượng thùng)ví dụ nhập 1(thùng) --> enter --> khung chọn ô nhảy ngang qua cột F(cột khách hàng <=> cột số lượng hộp)ví dụ nhập 10(hộp) --> enter --> khung chọn ô tự xuống dòng ở cột C -->tự hiện texbox chờ ta gỏ nhập tên hàng kế tiếp -->cột E--> cột F, tức là sau khi xuống dòng lập lại chu kỳ nhập tên hàng, số lượng thùng, số lượng hộp kế tiếp.

Anh sửa lại giúp em nhé.
 
Lần chỉnh sửa cuối:
Em đã sửa lại file ở bài #68 mô tả chi tiết hơn đính kèm vào đây, các anh xem giúp em nhé em rất cám ơn ạ.
 

File đính kèm

Em đã sửa lại file ở bài #68 mô tả chi tiết hơn đính kèm vào đây, các anh xem giúp em nhé em rất cám ơn ạ.

lúc đầu tôi nghĩ nó đơn giản chỉ là offset, nhưng khi làm thì mới thấy khó.
tôi có đem vấn đề của bạn hỏi ở đây
http://www.giaiphapexcel.com/forum/showthread.php?85576-Chuyên-mục-xử-lý-gỡ-rối-code-VBA/page10
có được 2 vị Hoang Trong Nghia và ThanhLanh tra lời, bạn tham khảo thêm.
từ các góp ý của các anh ấy tôi thử làm như trong file,
nhưng bạn fải đảm bảo là kết thúc bằng phím Enter nha, dùng mũi tên phải hoặc tab sẽ ko đúng
 

File đính kèm

Lần chỉnh sửa cuối:
lúc đầu tôi nghĩ nó đơn giản chỉ là offset, nhưng khi làm thì mới thấy khó.
tôi có đem vấn đề của bạn hỏi ở đây
http://www.giaiphapexcel.com/forum/showthread.php?85576-Chuyên-mục-xử-lý-gỡ-rối-code-VBA/page10
có được 2 vị Hoang Trong Nghia và ThanhLanh tra lời, bạn tham khảo thêm.
từ các góp ý của các anh ấy tôi thử làm như trong file,
nhưng bạn fải đảm bảo là kết thúc bằng phím Enter nha, dùng mũi tên phải hoặc tab sẽ ko đúng

Em cám ơn anh Let'GâuGâu rất nhiệt tình giúp em , nhưng rất tiếc file anh làm chưa đúng ý em, hiện tại em còn bận việc, xong việc em sẻ trình bài tường tận file em yêu cầu đã làm được gì, chưa làm được gì ,công dụng của những yêu cầu đó để anh và các anh chị khác muốn giúp mới hiểu rỏ và giúp chính xác hơn. Xin cám ơn tất cả anh chị nhé!
 
Em cám ơn anh Let'GâuGâu rất nhiệt tình giúp em , nhưng rất tiếc file anh làm chưa đúng ý em, hiện tại em còn bận việc, xong việc em sẻ trình bài tường tận file em yêu cầu đã làm được gì, chưa làm được gì ,công dụng của những yêu cầu đó để anh và các anh chị khác muốn giúp mới hiểu rỏ và giúp chính xác hơn. Xin cám ơn tất cả anh chị nhé!

Em đã chỉnh sửa lại chi tiết hơn nhờ các anh xem giúp em nhé.
 

File đính kèm

Chào các anh! em xin hỏi ở bài #69 file Listbox.rar

2.Em nhờ anh giúp em chỉnh lại cái listbox sao cho khi hiện ra có thêm mấy cột kế tiếp, lưu ý chỉ hiện view ra để xem thêm thôi còn mọi cái khác không có gì thay đổi. Em lấy file củ sửa sheet Lenh.giao.hang và DANHMUC đôi chút để minh họa anh xem giúp nhé.

bạn xem thử có vừa ý ko?, ở sheet "lenh giao hang"

Cái sub loc em muốn nó hiển thị từ cột thứ tư đến thứ 7 nên em sữa thành như vầy

Mã:
Sub loc()Dim dl(), i As Long, c As Byte
dl = danhsach.[A4:G3000].Value
ActiveSheet.ListBox1.Clear
For i = 1 To UBound(dl)
   If dl(i, 1) <> "" Then
      If LCase(dl(i, 1)) Like "*" & LCase(ActiveSheet.TextBox1.Value) & "*" Then
         With ActiveSheet.ListBox1
            .AddItem dl(i, 1)
            .List(.ListCount - 1, 3) = dl(i, 4)
            .List(.ListCount - 1, 4) = dl(i, 5)
            .List(.ListCount - 1, 5) = dl(i, 6)
            [COLOR=#0000ff].List(.ListCount - 1, 6)[/COLOR] = dl(i, [B][COLOR=#ff0000]7[/COLOR][/B])
          End With
      End If
   End If
Next
End Sub

Cho nên em gặp lỗi ở dòng màu xanh .List(.ListCount - 1, 6)= dl(i, 7) khi gỏ tăng đến số 7 (bôi màu đỏ), vì thế không thể hiện ra cột thứ 7, như vậy có phải em làm sai hay lại là hạn chế nữa phải không hả anh ?
 
Lần chỉnh sửa cuối:
Mến chào anh Trọng Nghĩa! Lúc này anh vẫn khỏe chứ ? thời gian qua cái addin TimTenTool ở bài #43 của anh làm chạy rất tốt. Do có thêm chút nhu cầu mới là khi list hiện ra có thêm 4 cột rồi khi tìm thấy tên ---> enter---> khung chọn ô chọn cả đoạn 5 ô( thay vì chỉ 1 ô như ở addin TimTenTool #43) em đã mày mò mãi mà không làm được.

Em đã thêm Resize(, 4) vào FindRange.Value cũng không xong nay xin nhờ anh giúp em thêm 1 lần nhé ,em có trình bài chi tiết trong file mong anh giúp em nhé em rất cám ơn anh.
 

File đính kèm

Lần chỉnh sửa cuối:
Mến chào anh Trọng Nghĩa! Lúc này anh vẫn khỏe chứ ? thời gian qua cái addin TimTenTool ở bài #43 của anh làm chạy rất tốt. Do có thêm chút nhu cầu mới là khi list hiện ra có thêm 4 cột rồi khi tìm thấy tên ---> enter---> khung chọn ô chọn cả đoạn 5 ô( thay vì chỉ 1 ô như ở addin TimTenTool #43) em đã mày mò mãi mà không làm được.

Em đã thêm Resize(, 4) vào FindRange.Value cũng không xong nay xin nhờ anh giúp em thêm 1 lần nhé ,em có trình bài chi tiết trong file mong anh giúp em nhé em rất cám ơn anh.
Bạn phải sửa như thế này:

Set FindRange = Range(Rng, Cells(65536, c).End(xlUp)).Resize(, 5)

Sau đó kéo form cho chiều cao giản cao ra để thấy combobox. Chọn thuộc tính của combobox tại mục:

+ ColumnCount là: 5

+ ColumnWidths: 162 pt;72 pt;72 pt;72 pt

+ ListWidth: 450

Thế là xong.
 
Bạn phải sửa như thế này:

Set FindRange = Range(Rng, Cells(65536, c).End(xlUp)).Resize(, 5)

Sau đó kéo form cho chiều cao giản cao ra để thấy combobox. Chọn thuộc tính của combobox tại mục:

+ ColumnCount là: 5

+ ColumnWidths: 162 pt;72 pt;72 pt;72 pt

+ ListWidth: 450

Thế là xong.

Cám ơn anh Trọng Nghĩa nhiều ạ, theo hướng dẫn của anh em làm được rồi còn yêu cầu thứ 2 khung chọn ô chọn cả đoạn 5 ô có làm được luôn không anh ?
 
Cám ơn anh Trọng Nghĩa nhiều ạ, theo hướng dẫn của anh em làm được rồi còn yêu cầu thứ 2 khung chọn ô chọn cả đoạn 5 ô có làm được luôn không anh ?
Tại sự kiện KeyUp, bạn sửa thành:

FindRange.Find(.Text, LookIn:=xlValues, LookAt:=xlWhole).Resize(, 5).Select
 
Tại sự kiện KeyUp, bạn sửa thành:

FindRange.Find(.Text, LookIn:=xlValues, LookAt:=xlWhole).Resize(, 5).Select


:clap:Ôi mừng quá ! Anh Trọng Nghĩa giỏi thật anh chỉ dẫn rất hay rất gọn em làm được ngay, không có anh em lọ mọ loay hoay mải vẫn không biết làm thế nào. Cám ơn anh nhiều lắm nhe.
 
Web KT

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

Back
Top Bottom