Giúp Code Userform tìm kiếm

Liên hệ QC

vova2209

Thành viên tích cực
Tham gia
5/4/17
Bài viết
825
Được thích
110
Giới tính
Nam
Nghề nghiệp
Đường bộ
Anh chị giúp em code tìm kiếm:
VD khi đánh chữ "cắt" thì sẽ tìm được những dòng nào có chữ cắt hiện lên form, khi kích đúp vào thì sẽ đi đến vị trí dòng đó
Mong anh chị giúp đỡ em!

Untitled.png
 

File đính kèm

  • Don gia Nhan Cong 2.xlsm
    62.9 KB · Đọc: 22
Cho biết tại sao Ctrl+f không làm được rồi nói chuyện tiếp.
 
Upvote 0
Người ta thường thiết kế Form bằng tay, bạn này chơi sang: Thiết kế nhờ VBA

Mình sẽ lót dép chờ & học hỏi vậy! :D
 
Upvote 0
Anh chị giúp em code tìm kiếm:
VD khi đánh chữ "cắt" thì sẽ tìm được những dòng nào có chữ cắt hiện lên form, khi kích đúp vào thì sẽ đi đến vị trí dòng đó
Mong anh chị giúp đỡ em!

View attachment 231570
Mình thấy code trong file của bạn mình không hiểu để làm gì, mình đã dọn dẹp sang 1 bên. Mình thấy trên diễn đàn code của anh huthang_bd áp dụng vào bài của bạn cũng được, mình làm ra file gửi lên . Bạn tham khảo. Mình không biết nhiều về code, chỉ biết copy paste vào nên bạn tự nghiên cứu thêm nhé.
 

File đính kèm

  • Don gia nhan cong 3.xlsm
    84.9 KB · Đọc: 29
Upvote 0
Mình thấy code trong file của bạn mình không hiểu để làm gì, mình đã dọn dẹp sang 1 bên. Mình thấy trên diễn đàn code của anh huthang_bd áp dụng vào bài của bạn cũng được, mình làm ra file gửi lên . Bạn tham khảo. Mình không biết nhiều về code, chỉ biết copy paste vào nên bạn tự nghiên cứu thêm nhé.
Cảm ơn bạn! Tối mình về xem.
Bạn cho mình hỏi, chiều rộng listbox các cột chỉnh như nào bạn.. tối về up cả file lên bạn xem dùm
 
Upvote 0
Mình thấy code trong file của bạn mình không hiểu để làm gì, mình đã dọn dẹp sang 1 bên. Mình thấy trên diễn đàn code của anh huthang_bd áp dụng vào bài của bạn cũng được, mình làm ra file gửi lên . Bạn tham khảo. Mình không biết nhiều về code, chỉ biết copy paste vào nên bạn tự nghiên cứu thêm nhé.
Được rồi bạn! đúng ý mình.. cảm ơn bạn nhiều!
 
Upvote 0
Upvote 0
Bạn ơi! mình bị như này chỉ mà không được, cột thứ 2 dài ngoẵng ra ý. 319.95pt chỉnh thành 100pt vẫn bị dài, nên đẩy hết các phần khác không xem được. không biết do lỗi gì
Muốn 100 thì dứt khoát phải được 100.

Hiện tại cột 3, 4, 5 làm gì có giá tri. Nhập giá trị vào 3, 4, 5 thì mới thấy chúng ở đúng vị trí.

Đoán mò thôi.

Tôi đã nhiều lần nói mà bạn không sửa. Lần cuối cùng tôi trả lời bạn nếu bạn còn chơi ảnh thay tập tin.
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Mò thêm chút nữa đi bác, biết đâu vớ bở. Cũng có thể trong code đã có đoạn chỉnh độ rộng rùi ý ạ.
Trong code có không thì nhìn ảnh sao biết được? Mà nếu trong code đổi thành 100 thì phải có 100 chứ không thể 319 được.
 
Upvote 0
Muốn 100 thì dứt khoát phải được 100.

Hiện tại cột 3, 4, 5 làm gì có giá tri. Nhập giá trị vào 3, 4, 5 thì mới thấy chúng ở đúng vị trí.

Đoán mò thôi.

Tôi đã nhiều lần nói mà bạn không sửa. Lần cuối cùng tôi trả lời bạn nếu bạn còn chơi ảnh thay tập tin.
cột 3 4 5 có giá trị, cột 2 đang bị đẩy rộng ra nên ko nhìn thấy cột 3 4 5
Bài đã được tự động gộp:

Toàn hình (ảnh) thế này dễ lắm, dùng photoshop cắt dán kéo chuột mấy cái là xong, việc chi phải Excel
^^! file ở #14 bạn xem dùm.. lúc mới làm thì được. khi tắt đi hôm sau mở lại thấy cột 2 dài ngoẵng ra không tài nào chỉnh lại được
Bài đã được tự động gộp:

Trong code có không thì nhìn ảnh sao biết được? Mà nếu trong code đổi thành 100 thì phải có 100 chứ không thể 319 được.
Làm thế nào để xuống dòng ở listbox khi chữ dài quá khổ cột bạn nhỉ
 

File đính kèm

  • Don gia Nhan Cong.xlsm
    262.1 KB · Đọc: 6
Lần chỉnh sửa cuối:
Upvote 0
cột 3 4 5 có giá trị, cột 2 đang bị đẩy rộng ra nên ko nhìn thấy cột 3 4 5
Đã nói là cột 3, 4, 5 không có dữ liệu mà còn cãi.
Nếu không tin thì sau dòng
Mã:
MaxCol = .End(xlToRight).Column
thì thêm dòng
Mã:
msgbox MaxCol
Sau đó mở Form sẽ có 2 trong MsgBox. Tức mảng chỉ có 2 cột -> trong ListBox chỉ 2 cột đầu có dữ liệu.

Tôi đã sửa trong cửa sổ Properties thành 28 pt;100 pt;44 pt;59 pt;150 pt như mong muốn. Nhưng theo tôi cứ để 319.95 vì vẫn còn chỗ cho cột 3, 4 và 5. Và thiết lập ColumnCount = 5.

Và sửa lại thành
Mã:
Sub ganSourceListbox()
Dim k As Long
    MaxCol = Range("A3").End(xlToRight).Column
    MaxRow = Cells(Rows.Count, "A").End(xlUp).Row
    For k = MaxRow To 4 Step -1
        If Len(Range("A" & k).Value) Then Exit For
    Next k
    MaxRow = k
    ArrayData = Range("A4").Resize(MaxRow - 3, MaxCol).Value
    ReDim TempArr(1 To MaxRow - 3, 1 To MaxCol)
    Me.lstDanhSachVPP.List = ArrayData
End Sub
 

File đính kèm

  • Don gia Nhan Cong.xlsm
    190.2 KB · Đọc: 9
Lần chỉnh sửa cuối:
Upvote 0
Đã nói là cột 3, 4, 5 không có dữ liệu mà còn cãi.
Nếu không tin thì sau dòng
Mã:
MaxCol = .End(xlToRight).Column
thì thêm dòng
Mã:
msgbox MaxCol
Sau đó mở Form sẽ có 2 trong MsgBox. Tức mảng chỉ có 2 cột -> trong ListBox chỉ 2 cột đầu có dữ liệu.

Tôi đã sửa trong cửa sổ Properties thành 28 pt;100 pt;44 pt;59 pt;150 pt như mong muốn.

Và sửa lại thành
Mã:
Sub ganSourceListbox()
Dim k As Long
    MaxCol = Range("A3").End(xlToRight).Column
    MaxRow = Cells(Rows.Count, "A").End(xlUp).Row
    For k = MaxRow To 4 Step -1
        If Len(Range("A" & k).Value) Then Exit For
    Next k
    MaxRow = k
    ArrayData = Range("A4").Resize(MaxRow - 3, MaxCol).Value
    ReDim TempArr(1 To MaxRow - 3, 1 To MaxCol)
    Me.lstDanhSachVPP.List = ArrayData
End Sub
vâng đúng rồi! mình vừa chỉnh lên dòng thứ 5 trở đi thì nó hiện lại chiều rộng cột
Bài đã được tự động gộp:

Đã nói là cột 3, 4, 5 không có dữ liệu mà còn cãi.
Nếu không tin thì sau dòng
Mã:
MaxCol = .End(xlToRight).Column
thì thêm dòng
Mã:
msgbox MaxCol
Sau đó mở Form sẽ có 2 trong MsgBox. Tức mảng chỉ có 2 cột -> trong ListBox chỉ 2 cột đầu có dữ liệu.

Tôi đã sửa trong cửa sổ Properties thành 28 pt;100 pt;44 pt;59 pt;150 pt như mong muốn.

Và sửa lại thành
Mã:
Sub ganSourceListbox()
Dim k As Long
    MaxCol = Range("A3").End(xlToRight).Column
    MaxRow = Cells(Rows.Count, "A").End(xlUp).Row
    For k = MaxRow To 4 Step -1
        If Len(Range("A" & k).Value) Then Exit For
    Next k
    MaxRow = k
    ArrayData = Range("A4").Resize(MaxRow - 3, MaxCol).Value
    ReDim TempArr(1 To MaxRow - 3, 1 To MaxCol)
    Me.lstDanhSachVPP.List = ArrayData
End Sub
+Chỉnh dùm mình cột D định dạng ngăn cách phần đơn vị với như kiểu này 1000000 thành 1.000.000
và khi kích vào sẽ đi đến dòng có chứa giữ liệu đang chọn
+ Định dạng kẻ dòng list
+BoundColumn có tác dụng như nào bạn
 
Lần chỉnh sửa cuối:
Upvote 0
+Chỉnh dùm mình cột D định dạng ngăn cách phần đơn vị với như kiểu này 1000000 thành 1.000.000
và khi kích vào sẽ đi đến dòng có chứa giữ liệu đang chọn
+BoundColumn có tác dụng như nào bạn
Bạn đã thấy là có những cái không thể phán trên cơ sở hình ảnh chưa?

Tôi đi nhậu đây. Nếu đợi được thì đến tối (chỗ tôi) tôi sẽ xem.
 
Upvote 0
Upvote 0
Tôi làm cho bạn lần cuối. Có vấn đề gì thêm thì cứ nhờ mọi người, đừng gọi tên tôi. Nếu tôi có hứng thì tôi sẽ tự tham gia.
+Chỉnh dùm mình cột D định dạng ngăn cách phần đơn vị với như kiểu này 1000000 thành 1.000.000
Muốn thế thì sau khi lấy dữ liệu vào mảng ArrayData thì duyệt từng dòng của nó và định dạng thích hợp cho cột 4.
và khi kích vào sẽ đi đến dòng có chứa giữ liệu đang chọn
Nếu thế thì phải gán cho mỗi dòng dữ liệu trong mảng ArrayData, cũng đồng thời là trong ListBox, chỉ số dòng của nó trên sheet. Khi click mục trong ListBox thì đọc ra chỉ số dong trên sheet của mục được chọn. "Gán" được thực hiện bằng cách sau khi lấy dữ liệu vào mảng ArrayData thì duyệt từng dòng của nó và nhâp chỉ số dòng trên sheet của dòng hiện hành vào cột cuối cùng được thêm sau khi nhập dữ liệu vào ArrayData. Khi click thì đọc ra chỉ số dòng từ cột cuối. Thế thôi.
1. sửa thành
Mã:
Sub ganSourceListbox()
Dim k As Long
Dim lastRow As Long
    With ThisWorkbook.Worksheets("Don Gia Nhan Cong")
        MaxCol = .Range("A3").End(xlToRight).Column
        lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
        If lastRow < 4 Then Exit Sub
'        lastRow trong truong hop nay khong chua du lieu. Di len tren toi khi gap gia tri <> ""
        For k = lastRow To 4 Step -1
            If Len(.Range("A" & k).Value) Then Exit For
        Next k
        MaxRow = k - 3
'        lay du lieu vao mang ArrayData
        ArrayData = .Range("A4").Resize(MaxRow, MaxCol).Value
    End With
'    them 1 cot cuoi vao mang ArrayData
    ReDim Preserve ArrayData(1 To UBound(ArrayData, 1), 1 To MaxCol + 1)
'    duyet tung dong cua mang ArrayData
    For k = 1 To UBound(ArrayData, 1)
'        ghi chi so dong tren sheet cua muc hien hanh vao cot cuoi da them
        ArrayData(k, MaxCol + 1) = k + 3
'        dinh dang cot DON GIA
        ArrayData(k, 4) = Format(ArrayData(k, 4), "#,##0.00")   ' neu DON GI khong co phan thap phan thi Format(ArrayData(k, 4), "#,##0")
    Next k
    ReDim TempArr(1 To MaxRow, 1 To MaxCol)
'    nhap mang ArrayData vao ListBox
    Me.lstDanhSachVPP.List = ArrayData
End Sub
2. Thêm
Mã:
Private Sub lstDanhSachVPP_Change()
Dim r As Long
    With lstDanhSachVPP
        If .ListIndex < 0 Then Exit Sub
'        doc ra chi so dong tren sheet cua muc duoc chon
        r = .List(.ListIndex, MaxCol)
    End With
'    chon o o dong r va cot D
    ThisWorkbook.Worksheets("Don Gia Nhan Cong").Range("D" & r).Select
End Sub
+ Định dạng kẻ dòng list
Tôi chả hiểu "Định dạng kẻ dòng list" là gì. Cũng chả biết "dòng list" là dòng gì. Hãy tập giải thích cho người khác, kể cả những người chậm hiểu như tôi, hiểu ý của mình. Vấn đề của mình mà muốn nhanh nhanh, tốn ít công sức thời gian thì tôi bó tay.
+BoundColumn có tác dụng như nào bạn
Như bài #7 thôi: View -> Object Browser -> ListBox -> BoundColumn -> F1
Hoặc gú gồ.

Chỉ nên hỏi những cái không tự làm được. Bạn biết đọc, biết dịch thì sao tôi lại phải đọc và dịch thay bạn?
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom