Đưa dữ liệu từ listbox vào mảng (multi select) (2 người xem)

Liên hệ QC

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

Hamedanger

Thành viên chính thức
Tham gia
2/12/14
Bài viết
60
Được thích
25
ThacmacGPE.jpg

Câu hỏi như tiêu đề ạ. Mong được giúp đỡ
 

File đính kèm

View attachment 149369

Câu hỏi như tiêu đề ạ. Mong được giúp đỡ
Bạn cho 1 biến i chạy từ đầu đến cuối listbox, dựa vào thuộc tính Listbox.Selected(i) để quyết định việc đưa hay không đưa Listbox.List(i) vào mảng. Tôi chỉ gợi ý vậy thôi, hiện tại tôi không dùng máy tính nên không viết code vào file được.
 
Upvote 0
Private Sub CommandButton1_Click()
Dim ARR(), i, j
For i = 1 To ListBox1.ListCount


If ListBox1.Selected(i) = True Then
j = j + 1
ARR(j, 1) = ListBox1.Column(0).Selected(i)
ARR(j, 2) = ListBox1.Column(1).Selected(i)
ARR(j, 3) = ListBox1.Column(2).Selected(i)
End If
Next i
If j > 0 Then Sheet1.Range("H1").Resize(j, 3) = ARR
End Sub

E viêt thế này không hiểu có sai ở đâu không mà ko chạy được
 
Upvote 0
E viêt thế này không hiểu có sai ở đâu không mà ko chạy được

tôi ko hiểu nạp a2:C35==>listbox===>nạp vào mảng==>chép xuống sheet
ko có lọc, ko có diều kiện gì hết, tức là bê nguyên xi chổ này bỏ qua chổ khác
vậy làm chi lòng vòng cho mệt vậy?
===========
còn vòng lặp ở trên của bạn hình như phải bắt đầu =0 và kết thúc ở list.count-1
 
Upvote 0
Chuẩn luôn, bắt đầu từ 0 kết thúc ở listcount -1. Cảm ơn anh
Điều kiện là hàng nào được selected thì gắn vào mảng
E mò mẫm mãi ko ra
 
Upvote 0
Private Sub CommandButton1_Click()


Dim ARR(), i, j
ReDim ARR(1 To 10, 1 To 3)
For i = 0 To ListBox1.ListCount - 1


If ListBox1.Selected(i) = True Then
j = j + 1
ARR(j, 1) = ListBox1.List(i)
ARR(j, 2) = ListBox1.Column(1, i)
ARR(j, 3) = ListBox1.Column(2, i)
End If
Next i
If j > 0 Then Sheet1.Range("H1").Resize(j, 3) = ARR
End Sub

Cuối cùng cũng giải quyết xong. Cảm ơn GPE nhiều
 
Upvote 0
Thêm 1 cách dùng ngay cái mảng list của Listbox

Mã:
Private Sub CommandButton1_Click()
Dim i, j, Tm
Tm = Me.ListBox1.List
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(i) Then
Tm(j, 0) = Tm(i, 0)
Tm(j, 1) = Tm(i, 1)
Tm(j, 2) = Tm(i, 2)
j = j + 1
End If
Next
If j > 0 Then
Sheet1.[H2:J21].ClearContents
Sheet1.[H2:J2].Resize(j) = Tm
End If
End
End Sub
 
Upvote 0
Cũng bài này , e tạo thêm một textbox để tiện cho việc tra cứu (gõ ký tự vào textbox để tra )
Vấn đề này e đã giải quyết bằng hàm filter2Darray của thầy NDU. Nhưng còn chỗ này :
Khi e tra cứu lần 1 với từ khóa "abc" e tích chọn ra được dòng A
Khi e tra cứu lần 2 với từ khóa "def" e chọn ra được dòng B thì cái dòng A e đã chọn ko được lưu lại trên listbox nữa

Có cách nào để nó lưu lại rồi nhấn button là gắn tất cả những j mình từng chọn trên listbox xuống bảng tính không ạ +-+-+-+

Thực sự cảm thấy vấn đề này quá sức e rồi
 
Upvote 0
Cũng bài này , e tạo thêm một textbox để tiện cho việc tra cứu (gõ ký tự vào textbox để tra )
Vấn đề này e đã giải quyết bằng hàm filter2Darray của thầy NDU. Nhưng còn chỗ này :
Khi e tra cứu lần 1 với từ khóa "abc" e tích chọn ra được dòng A
Khi e tra cứu lần 2 với từ khóa "def" e chọn ra được dòng B thì cái dòng A e đã chọn ko được lưu lại trên listbox nữa

Có cách nào để nó lưu lại rồi nhấn button là gắn tất cả những j mình từng chọn trên listbox xuống bảng tính không ạ +-+-+-+

Thực sự cảm thấy vấn đề này quá sức e rồi
Bạn sử dụng thêm listbox2 phụ cho ẩn đi, khi tìm lần đầu thì sẽ add dòng A trong listbox sang listbox2, tìm lần 2 được dòng B. Sau đó bạn Add listbox2 (Dòng A) xuống ô trước sau đó add listbox (Dòng B) xuống tiếp theo.
 
Upvote 0
Theo tôi thì nên dùng 1 cái Dictionary để lưu các mã đã chọn thì hơn, như vậy sẽ rất linh hoạt khi sử dụng phương thức Exist để kiểm tra và khi chọn hay bỏ chọn bằng Add hay Remove cũng tiện.

Bạn cứ đưa file lên anh em làm luôn vào đó chứ viết lại thì xin mạn phép.
 
Upvote 0
Đây là file của e ạ. cái code tra cứu không hiểu sao máy thì chạy được , máy thì không . Đều là office 2003 cả
Thông qua ví dụ này mong được anh chị chỉ bảo thêm về việc vận dụng các phương thức của dictionary
 

File đính kèm

Upvote 0
Sơ bộ viết theo ý tưởng nên Code còn chưa được hoàn thiện, bạn tham khảo
 

File đính kèm

Upvote 0
Tuyệt quá , cảm ơn anh
E không hiểu đoạn

Id = ListBox1.ListIndexWith Me.ListBox1
On Error Resume Next
If .Selected(Id) Then
If Not Dic.Exists(.List(Id, 0)) Then _
Dic.Add .List(Id, 0), .List(Id, 0) & ";" & .List(Id, 1) & ";" & .List(Id, 2)
Else
Dic.Remove (.List(Id, 0))
End If
End With

Có ý nghĩa gì, nhất là cái tô đỏ
 
Upvote 0
Đây là đoạn Code sử lý khi Listbox thay đổi, nếu 1 Item nào được chọn thì ta kiểm tra trong Dic nếu chưa có thì thêm vào. Nếu bỏ chọn trên list thì ta cũng bỏ luôn nó trong Dic.
Đoạn có dấu màu đỏ mình tận dụng luôn Item của Dic lưu luôn giá trị của 3 cot và phân cách = ";". Khi nhập xuông sheet ta chỉ cần Dic là đủ.
 
Upvote 0
E muốn hỏi sâu thêm tý nữa
Nêu như e muốn nó add xuốg bảng tính như hình này chẳng hạn thì cái đoạn code sẽ thay đổi như thế nào ?
ThacmacGPE.jpg
 
Upvote 0
Vấn đề của em bây giờ là dữ liệu là kiểu số thì lỗi đã phát sinh anh à ! Làm sao để giữ được định dạng của data-0-/.-0-/.
 

File đính kèm

Upvote 0
Vấn đề của em bây giờ là dữ liệu là kiểu số thì lỗi đã phát sinh anh à ! Làm sao để giữ được định dạng của data-0-/.-0-/.
Theo cách củ chuối của mình hy vọng giúp ích cho bạn.
Bạn thêm đoạn code sau đây và nút lệnh ADD của bạn:
Mã:
[COLOR=#ff0000]With Sheet1[/COLOR]
[COLOR=#ff0000]For i = 2 To WorksheetFunction.CountA(.Range("j1:j100"))[/COLOR]
[COLOR=#ff0000]   .Range("j" & i).Value = .Range("j" & i).Formula[/COLOR]
[COLOR=#ff0000]Next i[/COLOR]
[COLOR=#ff0000]End With[/COLOR]
Cụ thể nút ADD của bạn bây giờ có code sau:
Mã:
Private Sub CommandButton1_Click()
Dim i, Tm()
Sheet1.[H2:J100].ClearContents
Tm = Dic.Items
For i = 0 To Dic.Count - 1
Sheet1.Cells(i + 2, "H").Resize(, 3) = Split(Tm(i), ";")
Next
[COLOR=#ff0000]With Sheet1[/COLOR]
[COLOR=#ff0000]For i = 2 To WorksheetFunction.CountA(.Range("j1:j100"))[/COLOR]
[COLOR=#ff0000]   .Range("j" & i).Value = .Range("j" & i).Formula[/COLOR]
[COLOR=#ff0000]Next i[/COLOR]
[COLOR=#ff0000]End With[/COLOR]
Unload Me
End Sub
 
Upvote 0
Select ô tô vàng rồi chạy code, cột J thậm chí còn không định dạng được kiểu số +-+-+-++-+-+-++-+-+-++-+-+-++-+-+-+
 

File đính kèm

Upvote 0
Select ô tô vàng rồi chạy code, cột J thậm chí còn không định dạng được kiểu số +-+-+-++-+-+-++-+-+-++-+-+-++-+-+-+
Vậy bạn sử code như sau:
Mã:
Private Sub CommandButton1_Click()
Dim i, Tm()
Sheet1.[H2:J100].ClearContents
Tm = Dic.Items
For i = 0 To Dic.Count - 1
Sheet1.Cells(i + ActiveCell.Row, "H").Resize(, 3) = Split(Tm(i), ";")
Sheet1.Cells(i + ActiveCell.Row, "J").Value = Sheet1.Cells(i + ActiveCell.Row, "J").Formula
Next
Unload Me
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom