Nếu tìm không thấy thì thoát Form đồng thời Con trỏ nhảy qua sheet khác

Liên hệ QC

AnhThu-1976

Thành viên tích cực
Tham gia
17/10/14
Bài viết
1,061
Được thích
175
Các anh/chị thêm code giùm em trường hợp sau:
Tại sheet Data cột H, em sẽ tiến hành tìm Mã, Nếu tìm mã không thấy thì "SAU KHI EM BẤM OK" thì nó sẽ thoát khỏi Form, đồng thời con trỏ sẽ nhảy qua Sheet Note1 ở dòng trống cuối cùng trong danh sách (cell cuối cùng ở đây đang là cell H35) để em nhập mã mới
P/s: code này em tìm được trên GPE
Em cảm ơn
Mã:
Private Sub CB_Tim_Click()
    With Application
        .ScreenUpdating = False
    End With
    Dim endR As Long, i As Long, s As Long, k As Long
    Dim arr(), arrKQ()
    Dim MaHHTim As String
    With Sheets("Note1")
        endR = .Cells(65000, 8).End(xlUp).Row
        arr = .Range(.Cells(10, 8), .Cells(endR, 10)).Value
    End With
    ReDim arrKQ(1 To endR, 1 To 3)
    s = 0
    MaHHTim = Me.NhomHang.Value
    For i = 1 To UBound(arr)
        If InStr(UCase(arr(i, 1)), UCase(MaHHTim)) Then
            s = s + 1
            For k = 1 To 3
                arrKQ(s, k) = arr(i, k)
            Next k
        End If
    Next i
    If s = 0 Then
        MsgBox "No Ma"
        Me.NhomHang.SetFocus
        With Me.MHList
            .ColumnCount = 5
            .List = arr
        End With
    End If
    With Me.MHList
        .Clear
        .ColumnCount = 5
        .List = arrKQ
    End With
    With Application
        .ScreenUpdating = False
    End With
    Erase arr(), arrKQ()
End Sub
Private Sub Nhap_Click()
    On Error Resume Next
    Dim j&, i&, SelectItem
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With
    j = ActiveCell.Row
    If ActiveSheet.Name = "Data" Then
        ActiveSheet.Select
        For i = 0 To MHList.ListCount - 1
            If MHList.Selected(i) Then
                Cells(j, 8) = MHList.List(i)
                Cells(j, 9) = MHList.List(i, 1)
                Cells(j, 10) = MHList.List(i, 2)
                j = j + 1
                SelectItem = 1
            End If
        Next
    End If
    If SelectItem = 0 Then
        MsgBox "Ban da khong chon ten nao trong danh sach !"
    End If
    Unload Me
    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
    End With
End Sub
Private Sub NhomHang_AfterUpdate()
    CB_Tim.SetFocus
End Sub
Private Sub Thoat_Click()
    Unload Me
End Sub
Private Sub UserForm_Initialize()
    Dim endR As Long
    Dim arr()
    With Sheets("Note1")
        endR = .Cells(65000, 8).End(xlUp).Row
        arr = .Range(.Cells(10, 8), .Cells(endR, 10)).Value
    End With
    With Me.MHList
        .ColumnCount = 3
        .List = arr
    End With
    'MHList.Selected(0) = True
    NhomHang.SetFocus
    Erase arr
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Code dưới tôi đã viết gọn một tí, và giúp theo yêu cầu.

PHP:
Private LastRow_Down As Long
Private DataArray()
Private Sub CB_Tim_Click()
    Application.ScreenUpdating = False
    Dim i&, s&, k&, arrKQ(), MaHHTim$
    ReDim arrKQ(1 To LastRow_Down, 1 To 3)
    s = 0
    MaHHTim = Me.NhomHang.Value
    For i = 1 To UBound(DataArray)
        If InStr(UCase(DataArray(i, 1)), UCase(MaHHTim)) Then
            s = s + 1
            For k = 1 To 3
                arrKQ(s, k) = DataArray(i, k)
            Next k
        End If
    Next i
    If s = 0 Then
      MsgBox "No Ma"
      Me.NhomHang.SetFocus
      With Me.MHList: .ColumnCount = 5: .List = DataArray: End With
     Unload Me
      Application.Goto Sheets("Note1").Range("H" & LastRow_Down + 1)
    End If
    With Me.MHList: .Clear: .ColumnCount = 5: .List = arrKQ: End With
    Application.ScreenUpdating = False
    Erase DataArray(), arrKQ()
End Sub
Private Sub Nhap_Click()
    On Error GoTo Ends
    Dim j&, i&, SelectItem
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With
    j = ActiveCell.Row
    If ActiveSheet.Name = "Data" Then
        ActiveSheet.Select
        For i = 0 To MHList.ListCount - 1
            If MHList.Selected(i) Then
                Cells(j, 8) = MHList.List(i)
                Cells(j, 9) = MHList.List(i, 1)
                Cells(j, 10) = MHList.List(i, 2)
                j = j + 1
                SelectItem = 1
            End If
        Next
    End If
    If SelectItem = 0 Then MsgBox "Ban da khong chon ten nao trong danh sach !"
    Unload Me
Ends:
    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
    End With
End Sub
Private Sub NhomHang_AfterUpdate()
    CB_Tim.SetFocus
End Sub
Private Sub Thoat_Click()
    Unload Me
    Application.ScreenUpdating = True
End Sub

Private Sub UserForm_Initialize()
    With Sheets("Note1")
        LastRow_Down = .Cells(65000, 8).End(xlUp).Row
        DataArray = .Range(.Cells(10, 8), .Cells(LastRow_Down, 10)).Value
    End With
    With Me.MHList: .ColumnCount = 3: .List = DataArray: End With
    'MHList.Selected(0) = True
    NhomHang.SetFocus
    Erase DataArray
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bạn nhiều
Vừa rồi tôi có sửa ở bài 1 là
Nếu tìm mã không thấy thì "SAU KHI EM BẤM OK" thì nó sẽ thoát khỏi Form
Vì muốn kiểm tra mã nhập vào có đúng không? nghĩa là nó vẫn hiện MsgBox "No Ma", mục đích kiểm tra lại mã đã nhập, nếu:

Trường hợp: Nếu nhập không đúng thì nhập lại ở mục "Tìm mã HH" sau đó sẽ bấm lại nút "Tìm"
Trường hợp: Nếu nhập đúng thì bấm OK của MsgBox "No Ma" (nghĩa là không có mã đó trong list) thì lúc đó sau khi bấm OK thì thoát form đồng thời con trỏ mới nhảy sang sheet Note1 để nhập mã mới
Xin lỗi bạn vì từ đầu đã không đưa ra không đủ các tình huống!
 
Upvote 0
Tôi nghỉ hộp Msgbox sẽ hiện ra sẽ có 2 nút "Yes" và "No"
"Yes" ---> thoát ra khỏi form và con trỏ nhảy qua sheet Note1 để nhập mã mới
"No" ----> không thoát form và người nhập sẽ nhập lại mã (vì lúc đầu có thể nhập mã sai) sau đó nhập mã lại và tìm kiếm
Không biết ý trên có làm được không, nhờ các bạn giúp. Cảm ơn các bạn
 
Upvote 0
Cảm ơn bạn nhiều
Vừa rồi tôi có sửa ở bài 1 là

Vì muốn kiểm tra mã nhập vào có đúng không? nghĩa là nó vẫn hiện MsgBox "No Ma", mục đích kiểm tra lại mã đã nhập, nếu:

Trường hợp: Nếu nhập không đúng thì nhập lại ở mục "Tìm mã HH" sau đó sẽ bấm lại nút "Tìm"
Trường hợp: Nếu nhập đúng thì bấm OK của MsgBox "No Ma" (nghĩa là không có mã đó trong list) thì lúc đó sau khi bấm OK thì thoát form đồng thời con trỏ mới nhảy sang sheet Note1 để nhập mã mới
Xin lỗi bạn vì từ đầu đã không đưa ra không đủ các tình huống!
Cách diễn đạt lời của bạn tôi hơi khó hiểu.
Bạn sửa code. Nếu chưa đúng thì hỏi lại.
PHP:
    If s = 0 Then
      Dim QT: QT = MsgBox("No Ma", vbokcancel)
      If QT = vbOK Then
        Application.Goto Sheets("Note1").Range("H" & LastRow_Down + 1)
        GoTo Ends
      End If
      Me.NhomHang.SetFocus
      With Me.MHList: .ColumnCount = 5: .List = DataArray: End With
    End If
 
Upvote 0
Cảm ơn bạn nhiều
Mình đã áp dụng code của bạn đã thành công!
 
Upvote 0
Web KT

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

Back
Top Bottom