Sửa giùm em code tìm kiếm dữ liệu bằng listbox trên form (1 người xem)

Liên hệ QC

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

quoc nhat

Thành viên tiêu biểu
Tham gia
8/3/12
Bài viết
567
Được thích
43
Nghề nghiệp
cán bộ ngành y tế
Em đã tham khảo và copy được Filter2DArray của thầy NDU về làm một Form tìm kiếm cho mình.
Nhưng không hiểu sao Form không tìm kiếm được.
Form trong File chỉ ví dụ thôi.
Em muốn tìm kiếm theo điều kiện ngày tháng trong cột số 7 ở sheet Data
Kính nhờ các thầy cô và các anh chị quan tâm và sửa giúp em với
EM cảm ơn
 

File đính kèm

Em đã tham khảo và copy được Filter2DArray của thầy NDU về làm một Form tìm kiếm cho mình.
Nhưng không hiểu sao Form không tìm kiếm được.
Form trong File chỉ ví dụ thôi.
Em muốn tìm kiếm theo điều kiện ngày tháng trong cột số 7 ở sheet Data
Kính nhờ các thầy cô và các anh chị quan tâm và sửa giúp em với
EM cảm ơn
Mình có 1 vài điều thắc mắc:
1) Về việc nhập ngày tháng tại sao ko dùng control khác (Calendar, Dtpicker...) diễn đàn đã giới thiệu nhiều lần. Dùng Textbox dở tệ (nếu chia sẻ cho người khác thì hướng dẫn người ta cài mấy control kia đơn giản thôi)
2) Nếu đã dùng Textbox sao lại chọn sự kiện Change? gõ vào textbox là tìm ngay??? Nên là Textbox1_AfterUpdate()
3) Bị lỗi mà cứ để On Error Resume Next thì bít sai thế nào? thường người ta kiểm tra hết các trường hợp rùi hết nước thì mới dùng cái câu nguy hiểm đó
4) Nên kiểm tra các biến trong quá trình chạy code VD Msgbox FCol
Sửa thử có được ko (Nguyên code của bạn đấy nhé, sửa tí thui)
[GPECODE=vb]Private Sub TextBox1_AfterUpdate()
Dim Clls As Range, Temp As Variant, I As Long, FCol As Long
Dim Arr, Arr1, sArray
sArray = Sheet11.Range("A3:U" & Sheet11.[A65536].End(xlUp).Row).Value '< thêm vào
'On Error Resume Next <== cho vào là để phòng trường hợp không có giá trị ngày thỏa mãn nên báo lỗi
FCol = 7 'FCoal = -(OptionButton1.Value + 7) = -6 <== bạn giải thích giúp cái nì ???
If Len(Trim(TextBox1.Value)) = 0 Then ListBox1.List() = sArray: Exit Sub
Arr = Filter2DArray(sArray, FCol, "*" & TextBox1.Value & "*", False)
If Not IsArray(Arr) Then ListBox1.Clear: Exit Sub
ListBox1.List() = Arr
End Sub[/GPECODE]
 
Lần chỉnh sửa cuối:
Upvote 0
Mình có 1 vài điều thắc mắc:
1) Về việc nhập ngày tháng tại sao ko dùng control khác (Calendar, Dtpicker...) diễn đàn đã giới thiệu nhiều lần. Dùng Textbox dở tệ (nếu chia sẻ cho người khác thì hướng dẫn người ta cài mấy control kia đơn giản thôi)
2) Nếu đã dùng Textbox sao lại chọn sự kiện Change? gõ vào textbox là tìm ngay??? Nên là Textbox1_AfterUpdate()
3) Bị lỗi mà cứ để On Error Resume Next thì bít sai thế nào? thường người ta kiểm tra hết các trường hợp rùi hết nước thì mới dùng cái câu nguy hiểm đó
4) Nên kiểm tra các biến trong quá trình chạy code VD Msgbox FCol
Sửa thử có được ko (Nguyên code của bạn đấy nhé, sửa tí thui)
[GPECODE=vb]Private Sub TextBox1_AfterUpdate()
Dim Clls As Range, Temp As Variant, I As Long, FCol As Long
Dim Arr, Arr1, sArray
sArray = Sheet11.Range("A3:U" & Sheet11.[A65536].End(xlUp).Row).Value '< thêm vào
'On Error Resume Next <== cho vào là để phòng trường hợp không có giá trị ngày thỏa mãn nên báo lỗi
FCol = 7 'FCoal = -(OptionButton1.Value + 7) = -6 <== bạn giải thích giúp cái nì ???
If Len(Trim(TextBox1.Value)) = 0 Then ListBox1.List() = sArray: Exit Sub
Arr = Filter2DArray(sArray, FCol, "*" & TextBox1.Value & "*", False)
If Not IsArray(Arr) Then ListBox1.Clear: Exit Sub
ListBox1.List() = Arr
End Sub[/GPECODE]
Cảm ơn anh đã giúp đỡ
Như trên em đã nói. Em chỉ copy code để tham khảo và vận dụng vào file riêng của mình chứ trìng độ Ex của em còn kém lắm nên sửa lung tung cả lên dẫn đến code chạy sai cả.
Vấn vấn đề đổi textbox thành các control khác em sẽ nghiên cứu vấn đề này còn mới đối với em quá.
Em cảm ơn anh
 
Upvote 0
Mình có 1 vài điều thắc mắc:
1) Về việc nhập ngày tháng tại sao ko dùng control khác (Calendar, Dtpicker...) diễn đàn đã giới thiệu nhiều lần. Dùng Textbox dở tệ (nếu chia sẻ cho người khác thì hướng dẫn người ta cài mấy control kia đơn giản thôi)
2) Nếu đã dùng Textbox sao lại chọn sự kiện Change? gõ vào textbox là tìm ngay??? Nên là Textbox1_AfterUpdate()
3) Bị lỗi mà cứ để On Error Resume Next thì bít sai thế nào? thường người ta kiểm tra hết các trường hợp rùi hết nước thì mới dùng cái câu nguy hiểm đó
4) Nên kiểm tra các biến trong quá trình chạy code VD Msgbox FCol
Sửa thử có được ko (Nguyên code của bạn đấy nhé, sửa tí thui)
[GPECODE=vb]Private Sub TextBox1_AfterUpdate()
Dim Clls As Range, Temp As Variant, I As Long, FCol As Long
Dim Arr, Arr1, sArray
sArray = Sheet11.Range("A3:U" & Sheet11.[A65536].End(xlUp).Row).Value '< thêm vào
'On Error Resume Next <== cho vào là để phòng trường hợp không có giá trị ngày thỏa mãn nên báo lỗi
FCol = 7 'FCoal = -(OptionButton1.Value + 7) = -6 <== bạn giải thích giúp cái nì ???
If Len(Trim(TextBox1.Value)) = 0 Then ListBox1.List() = sArray: Exit Sub
Arr = Filter2DArray(sArray, FCol, "*" & TextBox1.Value & "*", False)
If Not IsArray(Arr) Then ListBox1.Clear: Exit Sub
ListBox1.List() = Arr
End Sub[/GPECODE]
Anh ơi cho em hỏi thêm là
khi đã lọc được dữ liệu rồi mà muốn cộng tổng một cột nào đó trong listbox thì code viết như thế nào
mong anh và các thầy cô cùng các anh chị khác chỉ giáo giùm em.
em cảm ơn
 
Upvote 0
Anh ơi cho em hỏi thêm là
khi đã lọc được dữ liệu rồi mà muốn cộng tổng một cột nào đó trong listbox thì code viết như thế nào
mong anh và các thầy cô cùng các anh chị khác chỉ giáo giùm em.
em cảm ơn
Với list là 1 cột thì cộng thế này
PHP:
For i = 1 To Me.ListBox1.ListCount
        tong = tong + Me.ListBox1.list(i - 1)
Next
 
Upvote 0

File đính kèm

Upvote 0
Anh ơi List của em có 8 cột mà muốn cộng cột thứ 8 thì sửa lại như thế nào hả anh?
Giúp em với
Có 8 cột tức là từ 0 đến 7. Dòng cũng bắt đầu = 0 nên i phải trừ bớt 1
Mã:
[COLOR=#000000][COLOR=#007700]For [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]1 To Me[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]ListBox1[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]ListCount
    tong [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]tong [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]Me[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]ListBox1[/COLOR][COLOR=#007700].list([/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]- [/COLOR][COLOR=#0000BB]1, 7[/COLOR][COLOR=#007700])
[/COLOR][COLOR=#0000BB]Next
[/COLOR][/COLOR]
 
Upvote 0
Có 8 cột tức là từ 0 đến 7. Dòng cũng bắt đầu = 0 nên i phải trừ bớt 1
Mã:
[COLOR=#000000][COLOR=#007700]For [/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]1 To Me[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]ListBox1[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]ListCount
    tong [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]tong [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]Me[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]ListBox1[/COLOR][COLOR=#007700].list([/COLOR][COLOR=#0000BB]i [/COLOR][COLOR=#007700]- [/COLOR][COLOR=#0000BB]1, 7[/COLOR][COLOR=#007700])
[/COLOR][COLOR=#0000BB]Next
[/COLOR][/COLOR]
Sao em dán đoạn code vào thì không thấy txt"tong" làm việc là sao
anh Hải giúp em với
 
Lần chỉnh sửa cuối:
Upvote 0
Hình như trên Listbox có nhiều cột thì không sum được thì phải, gặp trường hợp này tôi hay làm như sau:
- Gán giá trị textbox1 vào 1 ô nào đó trên bảng tính (Ví dụ: ô A1)
Range("A1")= Me.textbox1.value
- Dùng ô A1 để làm điều kiện tính tổng (ví dụ: ô A2= Sumif(vung1,đk là ô A1, vung2)
- Gán giá trị ô A2 vào cho textbox2 (là textbox cần tính tổng theo điều kiện của textbox1)
Me.Textbox2 = Range("A2").value
 
Upvote 0
Hình như trên Listbox có nhiều cột thì không sum được thì phải, gặp trường hợp này tôi hay làm như sau:
- Gán giá trị textbox1 vào 1 ô nào đó trên bảng tính (Ví dụ: ô A1)
Range("A1")= Me.textbox1.value
- Dùng ô A1 để làm điều kiện tính tổng (ví dụ: ô A2= Sumif(vung1,đk là ô A1, vung2)
- Gán giá trị ô A2 vào cho textbox2 (là textbox cần tính tổng theo điều kiện của textbox1)
Me.Textbox2 = Range("A2").value
nhưng ở đây em dùng List để lọc dữ liệu mà anh
 
Upvote 0
Nếu không quen sử lý thì ta lấy ra mảng mà làm
Ví dụ:

Dim Tm()
Tm=Me.Listbox1.List
Msgbox Tm(2,3)
---------------------
 
Upvote 0
Góp vui 1 cách củ chuối theo yêu cầu bài này. Bạn có thể làm từ từ theo cách này cho dễ hiểu
Mã:
Private Sub TextBox1_AfterUpdate()
...
tong = Application.WorksheetFunction.SumIf(Range("G3:G[COLOR=#ff0000]246[/COLOR]"), TextBox1, Range("U3:U[COLOR=#ff0000]246[/COLOR]"))
End Sub
Dòng cuối trong bảng tính tự xác định nhé (1 cơ số cách, diễn đàn nói nhiều rùi)
Cần định dạng cho dễ nhìn thì tong = Format(...)
 
Lần chỉnh sửa cuối:
Upvote 0
Góp vui 1 cách củ chuối theo yêu cầu bài này. Bạn có thể làm từ từ theo cách này cho dễ hiểu
Mã:
Private Sub TextBox1_AfterUpdate()
...
tong = Application.WorksheetFunction.SumIf(Range("G3:G[COLOR=#ff0000]246[/COLOR]"), TextBox1, Range("U3:U[COLOR=#ff0000]246[/COLOR]"))
End Sub
Dòng cuối trong bảng tính tự xác định nhé (1 cơ số cách, diễn đàn nói nhiều rùi)
Cần định dạng cho dễ nhìn thì tong = Format(...)
Đơn giản nhưng hiệu quả, cảm ơn anh nhiều lắm
 
Upvote 0
Mình cũng đang dùng cái file này nhưng ko sửa được 1 phần code. Mình muốn các giá trị được chọn nằm ngang chứ không nằm dọc như trong file
VD như mình chọn 2 sản phẩm


Bar conveyor Bias cutting m/c
Băng tải (thanh) Máy cắt dây

Và muốn như thế này.

Bar conveyor Bias cutting m/c
Băng tải (thanh) Máy cắt dây


Bởi vì mình chỉ cần thể hiện 2 sản phẩm nên đã sửa lại code như thế này

+ Ở sheet 2
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Range("b7:b8"), Target) Is Nothing And Target.Count = 1 Then
ShowForm
Cancel = True
End If
End Sub

+ Và ở Userform1 là

Private Sub lstResult_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
If Not Intersect([b7:b9], ActiveCell) Is Nothing Then
[b7] = lstResult.List(lstResult.ListIndex, 0)
[b8] = lstResult.List(lstResult.ListIndex, 1)
ActiveCell.Offset(1).Select
End If
End Sub

Mong các bạn giúp đỡ
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom