Hỏi về cách sử dụng CHECKBOX trong VBA (1 người xem)

Liên hệ QC

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

Se7enKhoe

Thành viên mới
Tham gia
3/1/14
Bài viết
5
Được thích
0
Yêu cầu:
- Tạo 1 file tìm kiếm thông tin Location và Model theo Concept (Phần này đã làm xong)
- Kết quả hiện ra sẽ có ô CHECKBOX cho người dùng chọn. Sau đó bấm PRINT để in kết quả sang 1 sheet khác

Vấn đề gặp phải:
- Em dự định sẽ cho 1 dòng for chạy từ trên xuống, xem ô Checkbox nào có dấu thì sẽ in dòng đó qua sheet kia. Nhưng không biết phải viết thế nào?
- Thêm một vấn đề nữa là không xóa được các checkbox bằng code

Mong các bậc cao nhân ra tay cứu vớt !!!!

Đây là file excel của em
 

File đính kèm

Lần sau bạn kiên nhẫn đợi trả lời trên GPE nhé. Đừng gửi tin nhắn làm gì

Yêu cầu:
- Tạo 1 file tìm kiếm thông tin Location và Model theo Concept (Phần này đã làm xong)
- Kết quả hiện ra sẽ có ô CHECKBOX cho người dùng chọn. Sau đó bấm PRINT để in kết quả sang 1 sheet khác

Vấn đề gặp phải:
- Em dự định sẽ cho 1 dòng for chạy từ trên xuống, xem ô Checkbox nào có dấu thì sẽ in dòng đó qua sheet kia. Nhưng không biết phải viết thế nào?
Mã:
Dim k As Long
    For k = 1 To Worksheets("Search").CheckBoxes.count
        With Worksheets("Search").CheckBoxes(k)
            If .Value = 1 Then
                Debug.Print "checkbox voi index = " & .Index & ", va nam tai dong "; [B][COLOR=#ff0000].Name[/COLOR][/B] & " tren sheet, duoc chon"
            End If
        End With
    Next

hoặc

Dim chk As Object
    For Each chk In Worksheets("Search").CheckBoxes
        If chk.Value = 1 Then
            Debug.Print "checkbox voi index = " & chk.Index & ", va nam tai dong "; chk[B][COLOR=#ff0000].Name[/COLOR][/B] & " tren sheet, duoc chon"
        End If
    Next

- Thêm một vấn đề nữa là không xóa được các checkbox bằng code

Mã:
Sub Clear()
Dim i As Integer
    Range("A1").ClearContents
    Range("A3:AB100").Delete
    For i = Worksheets("Search").CheckBoxes.count To 1 Step -1
        Worksheets("Search").CheckBoxes(i).Delete
    Next i
End Sub
----------------
Theo tôi thì code của bạn nhiều chỗ chưa chuẩn nhưng tôi không muốn góp ý. Sửa code mệt lắm.
Chỉ có 2 chỗ tôi thấy vô lý đến buồn cười nên góp ý.

Trích
Mã:
'    Tim location
        If test = True Then                
            For i = 1 To 14
                Worksheets("Search").Cells(thutu2, i + 1).Value = Worksheets("Location Bin").Cells(thutu, 

i).Value
                
                MyLeft = Cells(thutu2, "A").Left
                MyTop = Cells(thutu2, "A").Top
                MyHeight = Cells(thutu2, "A").Height
                MyWidth = MyHeight = Cells(thutu2, "A").Width

                ActiveSheet.CheckBoxes.Add(MyLeft, MyTop, MyWidth, MyHeight).Select
                With Selection
                    .Caption = ""
                End With
            Next i  
...

'    Tim model
        If test = True Then
            thutu2 = thutu2 + 1
            For i = 1 To 26
                Worksheets("Search").Cells(thutu2, i + 1).Value = Worksheets("Model Bin").Cells(thutu, 

i).Value
                Worksheets("Search").Cells(thutu2, i + 1).Interior.Color = Worksheets("Model Bin").Cells

(thutu, i).Interior.Color

                MyLeft = Cells(thutu2, "A").Left
                MyTop = Cells(thutu2, "A").Top
                MyHeight = Cells(thutu2, "A").Height
                MyWidth = MyHeight = Cells(thutu2, "A").Width
                ActiveSheet.CheckBoxes.Add(MyLeft, MyTop, MyWidth, MyHeight).Select
                With Selection
                    .Caption = ""
                End With                
            Next i 
...

Sao bạn mỗi lần tìm thấy 1 location lại thêm 14 checkbox? Và mỗi lần tìm thấy 1 model lại thêm 26 checkbox?

Bỏ đoạn code ấy ra khỏi vòng lặp FOR

Đề nghị:

Mã:
        If test = True Then
            thutu2 = thutu2 + 1
            MyLeft = Cells(thutu2, "A").Left
            MyTop = Cells(thutu2, "A").Top
            MyHeight = Cells(thutu2, "A").Height
            MyWidth = MyHeight

            With ActiveSheet.CheckBoxes.Add(MyLeft, MyTop, MyWidth, MyHeight)
                .Caption = ""
                [B][COLOR=#ff0000].Name[/COLOR][/B] = thutu2
            End With
                
            For i = 1 To 14
                Worksheets("Search").Cells(thutu2, i + 1).Value = Worksheets("Location Bin").Cells(thutu, 

i).Value
            Next i
...
        If test = True Then
            thutu2 = thutu2 + 1
            MyLeft = Cells(thutu2, "A").Left
            MyTop = Cells(thutu2, "A").Top
            MyHeight = Cells(thutu2, "A").Height
            MyWidth = MyHeight

            With ActiveSheet.CheckBoxes.Add(MyLeft, MyTop, MyWidth, MyHeight)
                .Caption = ""
                [B][COLOR=#ff0000].Name[/COLOR][/B] = thutu2
            End With
                
            For i = 1 To 26
                Worksheets("Search").Cells(thutu2, i + 1).Value = Worksheets("Model Bin").Cells(thutu, 

i).Value
                Worksheets("Search").Cells(thutu2, i + 1).Interior.Color = Worksheets("Model Bin").Cells

(thutu, i).Interior.Color
            Next i

Tôi nhập chỉ số dòng mà trên đó có checkbox vào thuộc tính Name của nó để sau đó trong code khi kiểm tra thấy checkbox được chọn thì biết đường đọc ra để biết checkbox được chọn nằm ở dòng nào, tức phải copy dòng nào sang sheet "kia"
 
Lần chỉnh sửa cuối:
Upvote 0

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

Back
Top Bottom