Tạo vòng lặp kiểm tra đúng sai cho Listbox

Liên hệ QC

Thanh Bình PV

Thành viên hoạt động
Tham gia
30/10/19
Bài viết
151
Được thích
19
Em chào mọi người,
Em có 1 Form như hình bên dưới. Em tạo 1 mảng Array(a, b, c, d, e, f, g, h, j) tương ứng với từng hàng trong listbox. Giá trị của a, b, c, d, e, f, g, h, j sẽ giống với cột C (Cột C chỉ là dữ liệu tượng trưng).
Em muốn kiểm tra toàn bộ giá trị a,b,c,... khi nhấn button. Em có viết code như dưới để kiểm tra. Không biết có cách nào viết gọn hơn không ạ.
*Dữ liệu cột A,C,D chỉ là tượng trưng, thực tế không có 3 cột đó.
Em cảm ơn ạ.

1595840220626.png1595840543259.png
Mã:
Private Sub btn_OK_Click()
    Dim i As Integer
    Dim a, b, c, d, e, f, g, h, j As Boolean
    a = False
    b = False
    c = False
    d = False
    e = False
    f = False
    g = False
    h = False
    j = False

    If ListBox1.Selected(0) = True Then
        a = True
    End If

    If ListBox1.Selected(1) = True Then
        b = True
    End If

    If ListBox1.Selected(2) = False Then
        c = True
    End If

    If ListBox1.Selected(3) = True Then
        d = True
    End If

    If ListBox1.Selected(4) = True Then
        e = True
    End If

    If ListBox1.Selected(5) = True Then
        f = True
    End If

    If ListBox1.Selected(6) = False Then
        g = True
    End If

    If ListBox1.Selected(7) = True Then
        h = True
    End If

    If ListBox1.Selected(8) = True Then
        j = True
    End If

    MsgBox a & vbLf & b & vbLf & c & vbLf & d & vbLf & e & vbLf & f & vbLf & g & vbLf & h & vbLf & j

    'sau đó sẽ viết tiếp với các a,b,c,.. đã kiểm tra ở trên.
    'If a = True And b = fasle Then
        'MsgBox "Test"
    'ElseIf c = False And d = False Then
        'MsgBox "Test2"
    'End If
End Sub
 

File đính kèm

  • GPE.xlsm
    33.5 KB · Đọc: 7
Lần chỉnh sửa cuối:
Em chào mọi người,
Em có 1 Form như hình bên dưới. Em tạo 1 mảng Array(a, b, c, d, e, f, g, h, j) tương ứng với từng hàng trong listbox. Giá trị của a, b, c, d, e, f, g, h, j sẽ tương ứng với cột C.
Giả sử: em chọn hết toàn bộ Listbox thì khi em nhấn Button sẽ cho ra kết quả như cột D. Em đã thử viết code như bên dưới nhưng kết quả không đúng.
Em cảm ơn ạ.

Mã:
Private Sub btn_OK_Click()
    Dim i As Integer
    Dim arr As Variant
    arr = Array(a, b, c, d, e, f, g, h, j)
    a = False
    b = False
    c = True
    d = False
    e = False
    f = False
    g = True
    h = False
    j = False
  
    i = 0
  
    Do While i < 9
        i = i + 1
        If ListBox1.Selected(i - 1) = True Then
            arr = True
        End If
    Loop
    MsgBox arr
    MsgBox a & vbLf & b & vbLf & c & vbLf & d & vbLf & e & vbLf & f & vbLf & g & vbLf & h & vbLf & j
End Sub
Bỏ tất cả các code trong Form và thay bằng code này.
Mã:
Private Sub btn_cancel_Click()
    Unload Me
End Sub

Private Sub btn_OK_Click()
    Dim Arr, i As Integer
    Arr = Range("name").Offset(, 2).Value
    For i = 0 To ListBox1.ListCount - 1
        Arr(i + 1, 1) = ListBox1.Selected(i)
    Next i
    Range("name").Offset(, 2).Value = Arr
End Sub

Private Sub UserForm_Initialize()
    Dim Arr, i As Integer
    Arr = Range("name").Offset(, 2).Value
    For i = 1 To UBound(Arr)
        If Arr(i, 1) = True Then ListBox1.Selected(i - 1) = True
    Next i
End Sub
 
Upvote 0
Bỏ tất cả các code trong Form và thay bằng code này.
Em cảm ơn anh. Nhưng kết quả em muốn là khi ta chọn trong listbox thì sẽ trả về kết quả đúng sai của từng đối tượng a,b,c,... để từ đó viết tiếp đoạn code theo các a,b,c,... Nên kết quả em muốn không phải là hiển thị ở cột D mà là trả về giá trị đúng sai trong code.
Cụ thể là em muốn khi nhấn button thì sẽ ra kết quả như hình dưới. Để em biết xác định các giá trị nào đúng, giá trị nào sai ạ.

1595900319815.png
 
Upvote 0
Em cảm ơn anh. Nhưng kết quả em muốn là khi ta chọn trong listbox thì sẽ trả về kết quả đúng sai của từng đối tượng a,b,c,... để từ đó viết tiếp đoạn code theo các a,b,c,... Nên kết quả em muốn không phải là hiển thị ở cột D mà là trả về giá trị đúng sai trong code.
Cụ thể là em muốn khi nhấn button thì sẽ ra kết quả như hình dưới. Để em biết xác định các giá trị nào đúng, giá trị nào sai ạ.

View attachment 241933
Thử cái này.
Mã:
Private Sub btn_OK_Click()
    Dim i As Integer, s$
    For i = 0 To ListBox1.ListCount - 1
        s = s & Chr(97 + i) & " = " & ListBox1.Selected(i) & vbLf
    Next i
    MsgBox s
End Sub
 
Upvote 0
Thử cái này.
Mã:
Private Sub btn_OK_Click()
    Dim i As Integer, s$
    For i = 0 To ListBox1.ListCount - 1
        s = s & Chr(97 + i) & " = " & ListBox1.Selected(i) & vbLf
    Next i
    MsgBox s
End Sub
hic hic. Anh viết rứa sao em xác định được để viết tiếp anh.
Ví dụ em sẽ viết tiếp vào dưới đoạn code của anh như sau:
Mã:
if a = true and b = fasle then
    msgbox "Test"
elseif c = false and d = false then
    msgbox "Test2"
end if
 
Upvote 0
hic hic. Anh viết rứa sao em xác định được để viết tiếp anh.
Ví dụ em sẽ viết tiếp vào dưới đoạn code của anh như sau:
Mã:
if a = true and b = fasle then
    msgbox "Test"
elseif c = false and d = false then
    msgbox "Test2"
end if
hic hic. Anh viết rứa sao em xác định được để viết tiếp anh.
Ví dụ em sẽ viết tiếp vào dưới đoạn code của anh như sau:
Mã:
if a = true and b = fasle then
    msgbox "Test"
elseif c = false and d = false then
    msgbox "Test2"
end if
bạn lồng code tiếp theo trong vòng lặp luôn.
 
Upvote 0
hic hic. Anh viết rứa sao em xác định được để viết tiếp anh.
Ví dụ em sẽ viết tiếp vào dưới đoạn code của anh như sau:
Mã:
if a = true and b = fasle then
    msgbox "Test"
elseif c = false and d = false then
    msgbox "Test2"
end if

Bạn thử cách này xem đúng yêu cầu không.
- Mở rộng cái Range name của bạn bao gồm luôn cột "A".
- Dùng cái hàm này kiểm tra điều kiện True/False: bạn sửa lại T/F theo qui ước của bạn.
Mã:
Function checkItemListBox(sItem As String, lstBox As MSForms.ListBox) As Boolean
    For i = 0 To lstBox.ListCount - 1
        If lstBox.List(i) = sItem And lstBox.Selected(i) = True Then
            checkItemListBox = True
            Debug.Print checkItemListBox
            'GoTo thongbao
            Exit Function
        Else
            checkItemListBox = False
            Debug.Print checkItemListBox
        End If
    Next
    
'thongbao:
'    MsgBox checkItemListBox
End Function

Áp dụng:

Mã:
If checkItemListBox("a", Me.ListBox1) And checkItemListBox("b", Me.ListBox1) = False Then
...
 
Upvote 0
Web KT

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

Back
Top Bottom