Xin hỗ trợ cách reset lại các mục đã chọn trong ListBox sau khi đã chọn để thuận tiện cho việc nhập dữ liệu mới.

Liên hệ QC

Hữu_Nghĩa

Thành viên mới
Tham gia
2/8/21
Bài viết
0
Được thích
3
mình có 1 Sheet Form( dùng để nhập dữ liệu), ở Ô Chỉ Tiêu mình có làm 1 listBox1 với VBA(mã ở bên dưới).
Ở Ô Chỉ Tiêu sau khi kích vào thì hiện ra bảng listBox1 thì mình chọn mục cần chọn sau đó nhấn Select thì các mục được chọn sẽ vào ô Chỉ Tiêu, sau đó mình cập Nhập dữ liệu, Lúc mình nhập dữ liệu mới thì ở listBox1 có mục mình đã chọn trước đó kg tự xóa đi nên mình phải tích bỏ chọn rất mắc công. Cho mình hỏi có cách nào rest lại các mục đã chọn trước đó để cho tiện việc nhập mới không ạ. Xin cảm ơn.
Mã VBA:
Sub Rectangle1_Click()
'Updated by Extendoffice 20200730
Dim xSelShp As Shape, xSelLst As Variant, I, J As Integer
Dim xV As String
Set xSelShp = ActiveSheet.Shapes(Application.Caller)
Set xLstBox = ActiveSheet.ListBox1
If xLstBox.Visible = False Then
xLstBox.Visible = True
xSelShp.TextFrame2.TextRange.Characters.Text = "Select"
xStr = ""
xStr = Range("ListBoxOutput").Value

If xStr <> "" Then
xArr = Split(xStr, ";")
For I = xLstBox.ListCount - 1 To 0 Step -1
xV = xLstBox.list(I)
For J = 0 To UBound(xArr)
If xArr(J) = xV Then
xLstBox.Selected(I) = True
Exit For
End If
Next
Next I
End If
Else
xLstBox.Visible = False
xSelShp.TextFrame2.TextRange.Characters.Text = "Chi Tieu"
For I = xLstBox.ListCount - 1 To 0 Step -1
If xLstBox.Selected(I) = True Then
xSelLst = xLstBox.list(I) & ";" & xSelLst
End If
Next I
If xSelLst <> "" Then
Range("ListBoxOutput") = Mid(xSelLst, 1, Len(xSelLst) - 1)
Else
Range("ListBoxOutput") = ""
End If
End If
End Sub







481.JPG482.JPG
 

File đính kèm

  • File sua 4_8.xlsm
    518.8 KB · Đọc: 18
mình có 1 Sheet Form( dùng để nhập dữ liệu), ở Ô Chỉ Tiêu mình có làm 1 listBox1 với VBA(mã ở bên dưới).
Ở Ô Chỉ Tiêu sau khi kích vào thì hiện ra bảng listBox1 thì mình chọn mục cần chọn sau đó nhấn Select thì các mục được chọn sẽ vào ô Chỉ Tiêu, sau đó mình cập Nhập dữ liệu, Lúc mình nhập dữ liệu mới thì ở listBox1 có mục mình đã chọn trước đó kg tự xóa đi nên mình phải tích bỏ chọn rất mắc công. Cho mình hỏi có cách nào rest lại các mục đã chọn trước đó để cho tiện việc nhập mới không ạ. Xin cảm ơn.
Mã VBA:
Sub Rectangle1_Click()
'Updated by Extendoffice 20200730
Dim xSelShp As Shape, xSelLst As Variant, I, J As Integer
Dim xV As String
Set xSelShp = ActiveSheet.Shapes(Application.Caller)
Set xLstBox = ActiveSheet.ListBox1
If xLstBox.Visible = False Then
xLstBox.Visible = True
xSelShp.TextFrame2.TextRange.Characters.Text = "Select"
xStr = ""
xStr = Range("ListBoxOutput").Value

If xStr <> "" Then
xArr = Split(xStr, ";")
For I = xLstBox.ListCount - 1 To 0 Step -1
xV = xLstBox.list(I)
For J = 0 To UBound(xArr)
If xArr(J) = xV Then
xLstBox.Selected(I) = True
Exit For
End If
Next
Next I
End If
Else
xLstBox.Visible = False
xSelShp.TextFrame2.TextRange.Characters.Text = "Chi Tieu"
For I = xLstBox.ListCount - 1 To 0 Step -1
If xLstBox.Selected(I) = True Then
xSelLst = xLstBox.list(I) & ";" & xSelLst
End If
Next I
If xSelLst <> "" Then
Range("ListBoxOutput") = Mid(xSelLst, 1, Len(xSelLst) - 1)
Else
Range("ListBoxOutput") = ""
End If
End If
End Sub
bạn thử thêm vào sub nhap_lieu() 2 dòng sau chuyển qua lại chế độ singleselect và multiselect thì mặc định sẽ reset lại các dòng chọn thôi:

ListBox1.MultiSelect = fmMultiSelectSingle
ListBox1.MultiSelect = fmMultiSelectMulti

mà sub nhap_lieu() chuyển lên sheet1(Form) đừng để ở module. Nhớ chỉnh lại Assign Macro ở nút "Nhập Dữ Liệu"
 

File đính kèm

  • Edit 1.JPG
    Edit 1.JPG
    111.5 KB · Đọc: 10
  • Edit 2.JPG
    Edit 2.JPG
    43.4 KB · Đọc: 10
Lần chỉnh sửa cuối:
bạn thử thêm vào sub nhap_lieu() 2 dòng sau chuyển qua lại chế độ singleselect và multiselect thì mặc định sẽ reset lại các dòng chọn thôi:

ListBox1.MultiSelect = fmMultiSelectSingle
ListBox1.MultiSelect = fmMultiSelectMulti

mà sub nhap_lieu() chuyển lên sheet1(Form) đừng để ở module. Nhớ chỉnh lại Assign Macro ở nút "Nhập Dữ Liệu"
Hay quá bạn ơi. Cảm ơn bạn nhiều nhé.
Cho mình hỏi thêm cái này nữa được không. làm sao để bảng Listbox không bị mất đi sao khi chọn. Ý là sau khi chọn mục cần chọn xong thì vẫn hiện bảng trắng Listbox này.
581.JPG582.JPG
 
Hay quá bạn ơi. Cảm ơn bạn nhiều nhé.
Cho mình hỏi thêm cái này nữa được không. làm sao để bảng Listbox không bị mất đi sao khi chọn. Ý là sau khi chọn mục cần chọn xong thì vẫn hiện bảng trắng Listbox này.
View attachment 263608View attachment 263609
Theo như code thì Listbox2 chỉ hiện khi ô C3 có thay đổi, và khi click vào listbox 2 này thì dòng được chọn sẽ được gán vào ô C8, còn listbox được nạp các Item là Tên vùng được chọn khi ô C3 thay đổi. Còn nếu muốn nó luôn tồn tại (trong listbox luôn luôn có dữ liệu) thì vào code sửa lại dòng Sheet1.Listbox2.vissibli=false (thay true=false).
 
Theo như code thì Listbox2 chỉ hiện khi ô C3 có thay đổi, và khi click vào listbox 2 này thì dòng được chọn sẽ được gán vào ô C8, còn listbox được nạp các Item là Tên vùng được chọn khi ô C3 thay đổi. Còn nếu muốn nó luôn tồn tại (trong listbox luôn luôn có dữ liệu) thì vào code sửa lại dòng Sheet1.Listbox2.vissibli=false (thay true=false).
Sao mình làm rồi mà kg được bạn ơi.583.JPG
 
Sao mình làm rồi mà kg được bạn ơi.View attachment 263632
Trên máy của mình thì bình thường mà.
Bạn thử đánh dấu" ' ' trước dòng code ấy thử xem.
Tiện cho hỏi luôn là cái Listbox 1 của bạn có hoạt động được không? cái Sub Reclangta1_Change hoạt động thế nào mà mình cố gắng vận hành nó mãi mà không được?
 
Lần chỉnh sửa cuối:
Trên máy của mình thì bình thường mà.
Bạn thử đánh dấu" ' ' trước dòng code ấy thử xem.
Tiện cho hỏi luôn là cái Listbox 1 của bạn có hoạt động được không? cái Sub Reclangta1_Change hoạt động thế nào mà mình cố gắng vận hành nó mãi mà không được?
mình làm được rồi nha Bạn. Cảm ơn Bạn nhiều.
cái Sub Reclangta1_Change hoạt động như thế này bạn:
+ Chỉ Tiêu: ở Chỉ tiêu thì tích chọn “ Chi Tieu” thì xuất hiện bảng để chọn, sau khi chọn xong thì nhấn “ Select”.681.JPG682.JPG
Bài đã được tự động gộp:

Thử cho dòng này xuống dòng, rồi thêm End If ở cuối
Sheet1.ListBox2.Visible = True
mình làm được rồi. Cảm ơn bạn nhiều nhé.
 
Sau này khi đăng code vba nhớ dùng thẻ CODE chứ dán kiểu này đọc mệt lắm
 
Web KT
Back
Top Bottom