Cần giúp đỡ về Userform và listbox

Liên hệ QC

DarKLov3

Thành viên chính thức
Tham gia
20/12/10
Bài viết
68
Được thích
22
chả là e mày mò theo các clip trên Youtube mãi được 1 bảng theo dõi dữ liệu phục vụ công tác. TUy nhiên do không có kiến thức căn bản nên còn vướng chút lỗi giờ ko biết xử lý dù đã tìm google khá nhiều. Có 2 vấn đề như sau:
1. Hiện bảng của em có 2 form là Nhap_DL và Form_TK trong đó có textbox txtQHNS. E viết code cho textbox này để tìm dữ liệu rồi hiện ra label khác
tuy nhiên hiện tại cứ nhập dữ liệu vào textbox txtQHNS xong Enter thì not resposding luôn. Đặc biệt ở form Nhap_DL thì ấn chuột vào textbox QHNS thì đã đơ rồi.
các textbox khác không vấn đề gì. Mong các thầy chỉ giáo và sửa giúp em.
2. Em đã tạo lisbox và đưa dữ liệu tìm kiếm lên đó, tuy nhiên e đang cần viết code khi ấn chọn dòng nào đó trên listbox vàì sửa dữ liệu của dòng đó thì sửa luôn dữ liệu tương ứng trên file excel. Mong các thầy hướng dẫn em thêm.
Em gửi cùng file dữ liệu, mong các thầy giúp thêm ạ.
 

File đính kèm

  • Trung_THKQTT.xlsb
    286.4 KB · Đọc: 37
. . . . Có 2 vấn đề như sau:
1. Hiện bảng của em có 2 form là Nhap_DL và Form_TK trong đó có textbox txtQHNS. E viết code cho textbox này để tìm dữ liệu rồi hiện ra label khác
tuy nhiên hiện tại cứ nhập dữ liệu vào textbox txtQHNS xong Enter thì not resposding luôn. Đặc biệt ở form Nhap_DL thì ấn chuột vào textbox QHNS thì đã đơ rồi.
các textbox khác không vấn đề gì. Mong các thầy chỉ giáo và sửa giúp em.
. . . . .
Mình xài Excel 365 & nhập thấy bình thường mà!
 
Upvote 0
Mình xài Excel 365 & nhập thấy bình thường mà!
vâng khả năng do bản office 2016, để em thử cài lại.
e tải về làm máy ở nhà thì lại thấy bình thường, chứ máy ở cơ quan đụng vào cái textbox đấy là đơ luôn ạ
 

File đính kèm

  • 12.png
    12.png
    118.5 KB · Đọc: 27
Upvote 0
1. Trong Form_TK bên cạng txtQHNS có Frame9 và Frame10. Chọn lần lượt từng Frame9 và Frame10 và thiết lập TabStop = False. Điều đó có nghĩa là khi nhấn TAB hoặc Enter thì bình thường focus sẽ nhẩy tới txtGHICHU. Bình thường có nghĩa là code không "chặn" ở bất cứ đâu.

Cách thiết lập TabStop = False cho Frame9 và Frame10 chỉ là cách đối phó. Chắc chắn có lỗi gì đó với Frame9. Nếu chọn Frame9 có chứa cả lb_Doituong11 -> nhấn Delete -> chèn lại Frame + Label và đặt tên lại là Frame9 và lb_Doituong11 thì hết lỗi.

Trong Nhap_DL thì làm như trên cho Frame5 và Frame6.

2. Cái này bạn đã làm trong sub btnSua_TK_Click rồi còn gì?

Tôi góp ý về code trong btnSua_TK_Click và Sub ListBox1_Change.

ListBox1 có thuộc tính MultiSelect = fmMultiSelectSingle, tức chỉ có thể chọn 1 mục. Lúc này chỉ số (tính từ 0) của dòng được chọn được nhớ trong thuộc tính ListIndex. Không ai dùng vòng FOR để dò xem dòng nào có Selected = True khi MultiSelect = fmMultiSelectSingle, đơn giản là chỉ số của dòng được chọn được "dâng" lên tận miệng trong thuộc tính ListIndex. Chỉ dùng Selected khi MultiSelect <> fmMultiSelectSingle.

Nếu dùng ListIndex thì code như sau. Chú ý là tôi chỉ sửa thành dùng ListIndex, tôi không kiểm tra xem liệu code có chạy chuẩn hay không, có đúng ý hay không.
Mã:
Private Sub ListBox1_Change() '
    On Error GoTo Loi
    Dim n As Long
    n = ListBox1.ListIndex
    If n = -1 Then Exit Sub
'           dong_cuoi = Sheet4.Range("B10000").End(xlUp).Row
    txt_STT.Value = ListBox1.Column(0, n)
    lb_STT.Caption = ListBox1.Column(0, n)
  
    txtQD.Value = ListBox1.Column(1, n)
    txtNT_QD.Value = ListBox1.Column(2, n)
  
    If ListBox1.Column(3, n) = "KeHoach" Then
        Opt_KH.Value = True
    Else
        Opt_KH.Value = False
        Opt_DX.Value = True
    End If
  
    txtKL.Value = ListBox1.Column(4, n)
    txtNT_KL.Value = ListBox1.Column(5, n)
              
    lb_Doituong11.Caption = ListBox1.Column(6, n)
    lb_Doituong22.Caption = ListBox1.Column(7, n)
  
    txtKN_NSNN.Value = ListBox1.Column(8, n)
    txtKN_GT.Value = ListBox1.Column(9, n)
    txtKN_Khac.Value = ListBox1.Column(10, n)
    txtKN_VPHC.Value = ListBox1.Column(11, n)
  
    txtKL_NSNN.Value = ListBox1.Column(12, n)
    txtKL_GT.Value = ListBox1.Column(13, n)
    txtKL_Khac.Value = ListBox1.Column(14, n)
    txtKL_VPHC.Value = ListBox1.Column(15, n)
  
    txtGHICHU.Value = ListBox1.Column(16, n)
    txtQHNS.Value = ListBox1.Column(17, n)
    Exit Sub
                                           
Loi:
    If ListBox1.Column(0, n) = "" Then
        MsgBox " Khong duoc an vao dong tieu de", vbExclamation, "Canh bao"
    End If
  
End Sub

Private Sub btnSua_TK_Click()
Dim txt1 As String
Dim txt4 As String
Dim sohang
    txt1 = Sheet7.Range("X4").text 'thông báo
    txt4 = Sheet7.Range("X7").text 'da sua du lieu
    Application.EnableEvents = False
    If ListBox1.ListIndex = -1 Then Exit Sub
    sohang = ListBox1.ListIndex + 6
    With Sheets("DATA")
        .Cells(sohang, 5).Value = txtKL.text
        .Cells(sohang, 6).Value = txtNT_KL.text
        .Cells(sohang, 7).Value = lb_Doituong11.Caption
        .Cells(sohang, 8).Value = lb_Doituong22.Caption
        .Cells(sohang, 9).Value = Replace(txtKN_NSNN.text, Mid(Format(1234, "#,##0"), 2, 1), "")
        .Cells(sohang, 10).Value = Replace(txtKN_GT.text, Mid(Format(1234, "#,##0"), 2, 1), "")
        .Cells(sohang, 11).Value = Replace(txtKN_Khac.text, Mid(Format(1234, "#,##0"), 2, 1), "")
        .Cells(sohang, 12).Value = Replace(txtKN_VPHC.text, Mid(Format(1234, "#,##0"), 2, 1), "")
        .Cells(sohang, 13).Value = Replace(txtKL_NSNN.text, Mid(Format(1234, "#,##0"), 2, 1), "")
        .Cells(sohang, 14).Value = Replace(txtKL_GT.text, Mid(Format(1234, "#,##0"), 2, 1), "")
        .Cells(sohang, 15).Value = Replace(txtKL_Khac.text, Mid(Format(1234, "#,##0"), 2, 1), "")
        .Cells(sohang, 16).Value = Replace(txtKL_VPHC.text, Mid(Format(1234, "#,##0"), 2, 1), "")
        .Cells(sohang, 17).Value = txtGHICHU.text
        .Cells(sohang, 18).Value = txtQHNS.text
    End With
    Application.EnableEvents = True
  
    'Call Refresh_data
  
    Application.Assistant.DoAlert txt1, txt4, 0, 2, 0, 0, 0
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
1. Trong Form_TK bên cạng txtQHNS có Frame9 và Frame10. Chọn lần lượt từng Frame9 và Frame10 và thiết lập TabStop = False. Điều đó có nghĩa là khi nhấn TAB hoặc Enter thì bình thường focus sẽ nhẩy tới txtGHICHU. Bình thường có nghĩa là code không "chặn" ở bất cứ đâu.
bác ơi e xoá đi làm lại giờ được rồi ko lỗi nữa. Tuy nhiên có code này e chưa hiểu sao ko chạy, bác xem giúp em với nhé
Em có tạo sheet Trichloc để lọc lấy dữ liệu từ sheet DATA theo nhiều điều kiện (phối hợp dùng InputFromList của bác Huuthang). E đã tạo được danh sách duy nhất và đưa nó vào chỗ ô làm điều kiện. Tuy nhiên code Advandfiler() chỉ chạy được điều kiện DK1 thôi, còn các trường hợp khác thì ko ra kết quả.
Nhờ bác và các thầy trên GPE xem giùm e với ạ.
Mã:
Sub AdvancedFilter()
    Application.ScreenUpdating = False
    Dim a(), b(), i, j, k, lr, DK1, DK2, DK3, DK4, jj, lrow
    
    With Sheets("DATA")
        a = .Range("A6", .Range("A65000").End(3)).Resize(, 18).Value
        lr = UBound(a)
    End With
    ReDim b(1 To lr, 1 To 22)
    With Sheets("DATA")
        DK1 = Sheets("Trichloc").Range("B2").Value
        DK2 = Sheets("Trichloc").Range("C2").Value
        DK3 = Sheets("Trichloc").Range("D2").Value
        DK4 = Sheets("Trichloc").Range("E2").Value
        On Error Resume Next
        For i = 1 To lr
        'neu  chi? có DK1
        If DK2 = "" And DK3 = "" And DK4 = "" Then
            ' Neu cot 2 bang voi dieu kien 1
                If a(i, 2) = DK1 Then
                 k = k + 1
                    b(k, 1) = k
                    For j = 1 To 17
                        b(k, j) = a(i, j)
                    Next
                    b(k, 18) = a(i, 9) - a(i, 13)
                    b(k, 19) = a(i, 10) - a(i, 14)
                    b(k, 20) = a(i, 11) - a(i, 15)
                    b(k, 21) = a(i, 12) - a(i, 16)
                    b(k, 22) = b(k, 18) + b(k, 19) + b(k, 20) + b(k, 21)
                End If
            'neu  chi? có DK2
                If DK1 = "" And DK3 = "" And DK4 = "" Then
            ' Neu cot 5 bang voi dieu kien 2
                    If a(i, 5) = DK2 Then
                     k = k + 1
                        b(k, 1) = k
                        For j = 1 To 17
                            b(k, j) = a(i, j)
                        Next
                        b(k, 18) = a(i, 9) - a(i, 13)
                        b(k, 19) = a(i, 10) - a(i, 14)
                        b(k, 20) = a(i, 11) - a(i, 15)
                        b(k, 21) = a(i, 12) - a(i, 16)
                        b(k, 22) = b(k, 18) + b(k, 19) + b(k, 20) + b(k, 21)
                    End If

                        'neu  chi? có DK3
                        If DK1 = "" And DK2 = "" And DK4 = "" Then
                        ' Neu cot 8 bang voi dieu kien 3
                        If a(i, 8) = DK3 Then
                         k = k + 1
                            b(k, 1) = k
                            For j = 1 To 17
                                b(k, j) = a(i, j)
                            Next
                            b(k, 18) = a(i, 9) - a(i, 13)
                            b(k, 19) = (a(i, 10) - a(i, 14))
                            b(k, 20) = (a(i, 11) - a(i, 15))
                            b(k, 21) = (a(i, 12) - a(i, 16))
                            b(k, 22) = b(k, 18) + b(k, 19) + b(k, 20) + b(k, 21)
                        End If
'       ' neu chi co DK4

                        If DK1 = "" And DK2 = "" And DK3 = "" Then
'           ' Neu cot 17 bang voi dieu kien 4
                            If a(i, 17) = DK4 Then
                             k = k + 1
                                b(k, 1) = k
                                For j = 1 To 17
                                    b(k, j) = a(i, j)
                                Next
                                b(k, 18) = a(i, 9) - a(i, 13)
                                b(k, 19) = a(i, 10) - a(i, 14)
                                b(k, 20) = a(i, 11) - a(i, 15)
                                b(k, 21) = a(i, 12) - a(i, 16)
                                b(k, 22) = b(k, 18) + b(k, 19) + b(k, 20) + b(k, 21)
                            End If
'        ' chi co dieu kien 1 và 2
                            If DK3 = "" And DK4 = "" Then
                            If a(i, 2) = DK1 And a(i, 5) = DK2 Then
                
                                k = k + 1
                                b(k, 1) = k
                                For j = 1 To 17
                                    b(k, j) = a(i, j)
                                Next
                                b(k, 18) = a(i, 9) - a(i, 13)
                                b(k, 19) = a(i, 10) - a(i, 14)
                                b(k, 20) = a(i, 11) - a(i, 15)
                                b(k, 21) = a(i, 12) - a(i, 16)
                                b(k, 22) = b(k, 18) + b(k, 19) + b(k, 20) + b(k, 21)
                            End If
                            ' chi co dieu kien 1 và 3
                            If DK2 = "" And DK4 = "" Then
                            If a(i, 2) = DK1 And a(i, 8) = DK3 Then
                
                                k = k + 1
                                b(k, 1) = k
                                For j = 1 To 17
                                    b(k, j) = a(i, j)
                                Next
                                b(k, 18) = a(i, 9) - a(i, 13)
                                b(k, 19) = a(i, 10) - a(i, 14)
                                b(k, 20) = a(i, 11) - a(i, 15)
                                b(k, 21) = a(i, 12) - a(i, 16)
                                b(k, 22) = b(k, 18) + b(k, 19) + b(k, 20) + b(k, 21)
                            End If
                            ' chi co dieu kien 1 và 4
                            If DK2 = "" And DK3 = "" Then
                            If a(i, 2) = DK1 And a(i, 17) = DK4 Then
                
                                k = k + 1
                                b(k, 1) = k
                                For j = 1 To 17
                                    b(k, j) = a(i, j)
                                Next
                                b(k, 18) = a(i, 9) - a(i, 13)
                                b(k, 19) = a(i, 10) - a(i, 14)
                                b(k, 20) = a(i, 11) - a(i, 15)
                                b(k, 21) = a(i, 12) - a(i, 16)
                                b(k, 22) = b(k, 18) + b(k, 19) + b(k, 20) + b(k, 21)
                            End If
            ' chi co dieu kien 2 và 3
                    ElseIf DK1 = "" And DK4 = "" Then
                        If a(i, 8) = DK3 And a(i, 5) = DK2 Then
            '
                            k = k + 1
                            b(k, 1) = k
                            For j = 1 To 17
                                b(k, j) = a(i, j)
                            Next
                            b(k, 18) = a(i, 9) - a(i, 13)
                            b(k, 19) = a(i, 10) - a(i, 14)
                            b(k, 20) = a(i, 11) - a(i, 15)
                            b(k, 21) = a(i, 12) - a(i, 16)
                            b(k, 22) = b(k, 18) + b(k, 19) + b(k, 20) + b(k, 21)
                        End If
                        ' chi co dieu kien 2 và 4
                    ElseIf DK1 = "" And DK3 = "" Then
                        If a(i, 17) = DK4 And a(i, 5) = DK2 Then
            '
                            k = k + 1
                            b(k, 1) = k
                            For j = 1 To 17
                                b(k, j) = a(i, j)
                            Next
                            b(k, 18) = a(i, 9) - a(i, 13)
                            b(k, 19) = a(i, 10) - a(i, 14)
                            b(k, 20) = a(i, 11) - a(i, 15)
                            b(k, 21) = a(i, 12) - a(i, 16)
                            b(k, 22) = b(k, 18) + b(k, 19) + b(k, 20) + b(k, 21)
                        End If
                    ' chi co dieu kien 3 và 4
                    ElseIf DK1 = "" And DK2 = "" Then
                        If a(i, 8) = DK3 And a(i, 17) = DK2 Then
        '
                            k = k + 1
                            b(k, 1) = k
                            For j = 1 To 17
                                b(k, j) = a(i, j)
                            Next
                            b(k, 18) = a(i, 9) - a(i, 13)
                            b(k, 19) = a(i, 10) - a(i, 14)
                            b(k, 20) = a(i, 11) - a(i, 15)
                            b(k, 21) = a(i, 12) - a(i, 16)
                            b(k, 22) = b(k, 18) + b(k, 19) + b(k, 20) + b(k, 21)
                        End If
'
         Else 'neu co ca 4 dieu kien
        '
                        If a(i, 2) = DK1 And a(i, 5) = DK2 And a(i, 8) = DK3 And a(i, 7) = DK4 Then
        
                            k = k + 1
                            b(k, 1) = k
                            For j = 1 To 17
                                b(k, j) = a(i, j)
                            Next
                            b(k, 18) = a(i, 9) - a(i, 13)
                            b(k, 19) = a(i, 10) - a(i, 14)
                            b(k, 20) = a(i, 11) - a(i, 15)
                            b(k, 21) = a(i, 12) - a(i, 16)
                            b(k, 22) = b(k, 18) + b(k, 19) + b(k, 20) + b(k, 21)
                        End If
                        End If
                    End If
                End If
                End If
            End If
        End If
         End If
        
        Next i
        
        On Error GoTo 0             'mo lai chuc nang bao loi
        With Sheets("Trichloc")
            .Range("A8:V500").ClearContents
            .Range("A8:V500").Borders.LineStyle = 0
        End With
            ' NEU CODE CHAY THI TRANG TRI BANG 1 TI
        If k Then
            With Sheets("Trichloc")
                
                .Range("A8").Resize(k, 22) = b
                .Range("A8").Resize(k + 2, 22).Borders.LineStyle = 1
                    
            End With
        Else
            Exit Sub
        End If
    End With
    
    
        '------------------
   ' Tinh chinh va dinh dang
    With Sheets("Trichloc")
        
            lrow = Sheets("Trichloc").Range("B" & Rows.Count).End(xlUp).Row
                .Range("F4").Value = Range("D2").Value
        ''        .Range("E5").Value = "Tháng " & Right((Range("F8").Value), 7)
                .Range("B" & lrow + 1).Value = Range("AA2").Value  'o AA2 co doan text la Tong cong
                .Range("B" & lrow + 1).Font.Bold = True
                .Range("I" & lrow + 1).Value = Application.WorksheetFunction.Sum(.Range("I8:I" & lrow))
                .Range("J" & lrow + 1).Value = Application.WorksheetFunction.Sum(.Range("J8:J" & lrow))
                .Range("K" & lrow + 1).Value = Application.WorksheetFunction.Sum(.Range("K8:K" & lrow))
                .Range("L" & lrow + 1).Value = Application.WorksheetFunction.Sum(.Range("L8:L" & lrow))
                .Range("M" & lrow + 1).Value = Application.WorksheetFunction.Sum(.Range("M8:M" & lrow))
                .Range("N" & lrow + 1).Value = Application.WorksheetFunction.Sum(.Range("N8:N" & lrow))
                .Range("O" & lrow + 1).Value = Application.WorksheetFunction.Sum(.Range("O8:O" & lrow))
                .Range("P" & lrow + 1).Value = Application.WorksheetFunction.Sum(.Range("P8:P" & lrow))
                .Range("R" & lrow + 1).Value = Application.WorksheetFunction.Sum(.Range("R8:R" & lrow))
                .Range("S" & lrow + 1).Value = Application.WorksheetFunction.Sum(.Range("S8:S" & lrow))
                .Range("T" & lrow + 1).Value = Application.WorksheetFunction.Sum(.Range("T8:T" & lrow))
                .Range("U" & lrow + 1).Value = Application.WorksheetFunction.Sum(.Range("U8:U" & lrow))
                .Range("V" & lrow + 1).Value = Application.WorksheetFunction.Sum(.Range("V8:V" & lrow))
        
                .Range("C" & lrow + 4) = "Ngày       tháng     n" & ChrW(259) & "m"
                .Range("C" & lrow + 4).WrapText = False
                .Range("C" & lrow + 5) = "Ng" & ChrW(432) & ChrW(7901) & "i l" & ChrW(7853) & "p"
                .Range("N" & lrow + 4) = "Ngày       tháng      n" & ChrW(259) & "m"
                .Range("N" & lrow + 5) = "Ng" & ChrW(432) & ChrW(7901) & "i duy" & ChrW(7879) & "t"
'        .Range("P8:V" & lrow + 1).NumberFormat = "#,##0"
'        .Range("P:U" & lrow + 1).Font.Bold = True
''        .Range("C8:C" & lrow).NumberFormat = "mm/yyyy"
''        .Range("F8:F" & lrow).NumberFormat = "mm/yyyy"
'        .Range("A3:R" & lrow + 10).Select
'            With Selection
'                .Font.Name = "Times New Roman"
'                .Font.Size = 14
'            End With
        .Range("a7:V7").Font.Bold = True
'        .Range("A8:V" & lrow).Font.Bold = False
        .Range("C" & lrow + 10).Value = Range("W3").Value 'tên trung
        .Range("N" & lrow + 10).Value = Range("W4").Value 'tên hà
        .Range("C" & lrow + 10).Font.Bold = True
        .Range("N" & lrow + 10).Font.Bold = True
        .Range("A8:V" & lrow + 10).Select
                With Selection
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
                .EntireRow.AutoFit
                End With
'
'        .Range("B7:H" & lrow).Select
'                With Selection
'                    .WrapText = True
'                    .EntireRow.AutoFit
'                End With
        .Range("B" & lrow).Select

    End With
    Call settrangin
      Application.ScreenUpdating = True
End Sub
 

File đính kèm

  • Trung_THKQTT.xlsb
    353.6 KB · Đọc: 21
Upvote 0
Web KT

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

Back
Top Bottom