Bổ sung code chọn nhiều công việc (1 người xem)

Liên hệ QC

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

matran25251325

Thành viên tiêu biểu
Tham gia
13/1/11
Bài viết
424
Được thích
39
Giúp em bổ sung thêm việc là:
+ Trong Form thêm trước chỗ mã hiệu các ô vuông để em có thể lick vào ô đó và chọn được nhiều mã hiệu thực hiện công việc.
+ Thêm 1 textbox để tìm tên công việc (vi dụ: đánh chữ Sơn thì nó sẽ nhảy đến những mã hiệu có công việc là Sơn đầu tiên)
Em thử làm mà chưa được. Mong các anh giúp.
http://www.mediafire.com/?090aehsf49abso5
 
+ Trong Form thêm trước chỗ mã hiệu các ô vuông để em có thể lick vào ô đó và chọn được nhiều mã hiệu thực hiện công việc.
Bạn bổ sung vào thủ tục UserForm_Initialize đoạn code bôi đậm như dưới đây
PHP:
Private Sub UserForm_Initialize()
On Error Resume Next  
sArray = Filter2DArray(Sheet2.Range("A4:C65536").Value, 1, "[", False)  
Me.ListBox1.List() = sArray  
With ListBox1    
.ListStyle = fmListStyleOption    
.MultiSelect = fmMultiSelectMulti  
End With
End Sub
+ Thêm 1 textbox để tìm tên công việc (vi dụ: đánh chữ Sơn thì nó sẽ nhảy đến những mã hiệu có công việc là Sơn đầu tiên)
Bạn chỉ cần thêm
ListBox1.Selected(0) = True
vào cuối thủ tục Private Sub TextBox1_Change()
là được
 
Upvote 0
+ (Thủ tục UserForm_Initialize đoạn code bôi đậm): chọn được nhiều việc nhưng chỉ thực hiện được 1 công việc
+ Còn thêm
ListBox1.Selected(0) = True
vào cuối thủ tục Private Sub TextBox1_Change()
thì mình thêm sao file không chạy.
Bác giúp em file trên với.
 
Upvote 0
À - giờ mới hiểu ý của bạn.
Để chọn được và trả về nhiều mã hiệu thì phải thêm môt thủ tục nữa, lướt qua toàn bộ listbox, kiểm tra xem phần tử nào được chọn và nhớ lại sau đó trả về cho bảng Excel.
Ví dụ đoạn mã sau sẽ làm việc đó
PHP:
Dim SelItem As String
With ListBox1        
For i = 0 To .ListCount - 1            
If .Selected(i) Then                
' ban co the thay bang mang de luu lai cac phan tu da lua chon                
SelItem = SelItem & "//" & .List(i)            
End If        
Next    
End With    
' Xuat du lieu ra    
MsgBox SelItem
Còn câu hỏi thứ 2 của bạn: Bạn vào thủ tục textbox_change(0), đưa thêm đoạn code tôi có bôi đậm vào dòng cuối trước cái end sub nhé.
 
Upvote 0
Đã thêm vào đoạn code như bác và đánh chữ Xây thì không hiện gì.
Private Sub TextBox1_Change()
Dim Clls As Range, Temp As Variant, i As Long, FCol As Long
Dim Arr, Arr1
On Error Resume Next
If Len(Trim(TextBox1.Value)) = 0 Then Me.ListBox1.List() = sArray: Exit Sub
Arr = Filter2DArray(sArray, 1, "*" & TextBox1.Value & "*", False)
If Not IsArray(Arr) Then ListBox1.Clear: Exit Sub
Me.ListBox1.List() = IIf(Trim(TextBox1.Text) = "", sArray, Arr)
ListBox1.Selected(0) = True
End Sub
+ Còn việc đầu tiên thì bác giúp giùm em với.
 
Upvote 0
Đây, mình gửi bạn nhé...
 

File đính kèm

Upvote 0
Hic vẫn còn lỗi bác ơi
+ Thứ nhất khi chọn 2 công việc thì chỉ có 1 công việc là đầy đủ (có định mức, số lượng của vật liệu), còn 1 công việc thì không có (cột M chỉ có chữ Vật liệu).
+ Thứ 2 sao em nhấp vào Form, đánh chữ Xây thì trên list không hiện lên công việc vây.
 
Upvote 0
1. Mình chỉ sửa giúp cho bạn một yêu cầu thôi nhé ... Việc chọn 2 cái mà cột M chỉ hiển thị một ít thông tin thì bạn phải kiểm tra trong thủ tục Worksheet_Change() tại sheet1 chứ - cái form nó chỉ làm một việc là trả về các giá trị lựa chọn (vì bạn thiết kế như vậy). Nếu muốn sửa bạn hãy tự làm tại thủ tục tôi nói ở trên.
2. Khi đánh chữ Xây, trong list không hiển thị, đơn giản là vì thủ tục tìm kiếm cấp dữ liệu cho mảng chỉ tìm kiểm theo mã. Nếu bạn muốn áp dụng cho các chỗ khác nữa thì phải sửa thủ tục Filter2DArray mới được. Hoặc nếu không muốn sửa, bạn làm thêm thủ tục, kiểm tra xem mảng trả về có phần tử nào không, nếu không thì tìm tiếp theo cột thứ 2.
Arr = Filter2DArray(sArray, 1, "*" & TextBox1.Value & "*", False)
==> thay số 1 bằng 2.
====
Như thế này.... Bạn hãy cố gắng nghiên cứu và thử sáng tạo một chút xem vì mọi thứ đã tự có trong dòng lệnh đó rồi
If Not IsArray(Arr) Then
Arr = Filter2DArray(sArray, 2, "*" & TextBox1.Value & "*", False)
If Not IsArray(Arr) Then ListBox1.Clear: Exit Sub
End If
Vì thấy bạn đang học, nên tôi nghĩ là không nên làm hộ!
 
Lần chỉnh sửa cuối:
Upvote 0
Vì cái này ngoài tầm kiểm soát của em rồi nên em mới nhờ các bác và ngâm cứu từ từ (em ngâm cả tuần nay mà chẳng được). và cũng vì thuận lợi cho công việc nên tạm thời nên em mới cần nhờ gấp. Dù gì cũng cảm ơn bác nhiều. Được bác giúp cho hoàn thiện thì tốt quá, nếu bác không giúp nữa thì thui cũng không sao. %#^#$
 
Upvote 0
Tôi sửa giúp bạn rồi đấy;
Tại thủ thục Worksheet_Change tôi bổ sung dòng này
Target.Offset(iNhay).Select
Để chuyển vị trí lựa chọn sang khối tiếp theo, tránh ghi đè tại sheet hiện thời.
Tại thủ tục chọn của form tôi sửa lại thành
PHP:
Private Sub CommandButton2_Click()
    ' Chuyen cac lua chon sang Sheet    
Dim StartCell As Range    
With ListBox1        
For i = 0 To .ListCount - 1            
Set StartCell = Selection            
If .Selected(i) Then                
StartCell.Value = .List(i, 0)                
StartCell.Offset(, 1).Value = .List(i, 1)                
StartCell.Offset(, 2).Value = .List(i, 2)            
End If        
Next    
End With    
' Thay doi Cell lua chon sang vi tri moi    
StartCell.Select    ' thoat ra    
Unload Me
End Sub
Bạn tải file đính kèm về nhé.
 

File đính kèm

Upvote 0
Cho em hỏi khi chọn 2 mã hiệu khoảng 10 dòng thì phải thếm code sao để cho nó tự insert số dòng đó không?
 
Upvote 0
PHP:
Private Sub CommandButton2_Click()
    ' Chuyen cac lua chon sang Sheet    
Dim StartCell As Range    
With ListBox1        
For i = 0 To .ListCount - 1            
Set StartCell = Selection            
If .Selected(i) Then                
StartCell.Value = .List(i, 0)                
StartCell.Offset(, 1).Value = .List(i, 1)                
StartCell.Offset(, 2).Value = .List(i, 2)            
End If        
Next    
End With    
' Thay doi Cell lua chon sang vi tri moi    
StartCell.Select    ' thoat ra    
Unload Me
End Sub
Cho em hỏi với đoạn code này khi đánh những mã hiệu không có vào form sẽ báo lỗi ở StartCell.Select. Nếu em xóa đoạn này thì không báo lỗi. vậy nếu xóa StartCell.Select thì có ảnh hưởng phần khác không?
 
Upvote 0
Bạn thử xoá xem. đoạn code đó khong cần thiết.
 
Upvote 0
giúp em khắc phục vấn đề khi đánh tên mã hiệu hay tên công việc thì bỏ check ô vuông với. Em bị lỗi sau khi bỏ check ô và chọn ô mã hiệu khác thì đôi lúc nó nhảy theo ô check đầu tiên.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn bỏ dòng ListBox1.Selected(0) = True đi là được. Đây là chỉ thị để listbox chọn đối tượng đầu tiên. Nếu bạn không muốn kích hoạt nó thì thôi, listbox sẽ hiển thị những đối tượng thỏa mãn điều kiện tìm kiếm.
 
Upvote 0

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

Back
Top Bottom