Sửa dùm code lọc sang sổ cái (1 người xem)

  • Thread starter Thread starter NH_DK
  • Ngày gửi Ngày gửi
Liên hệ QC

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

NH_DK

Let's patience
Tham gia
29/7/10
Bài viết
865
Được thích
1,204
Nghề nghiệp
Kế toán
AC xem dùm em code này:
PHP:
Option Explicit
Sub Tao_So()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim eRw1 As Long, eRw2 As Long, FirstAddress As String, i As Long
    Dim MyR As Range, TimCell As Range
    Set ws1 = Sheets("Data")
    Set ws2 = Sheets("SCAI")
    Application.ScreenUpdating = False
    ws2.Range("A11:G65535").Clear
    eRw1 = ws1.Range("A65535").End(xlUp).Row
    eRw2 = ws2.Range("A65535").End(xlUp).Row
    Set MyR = ws1.Range("F5:G" & eRw1)
    Set TimCell = MyR.Find(what:=[D3] & "*", after:=.[F4], LookIn:=xlValues, _
                            LookAt:=xlWhole, searchorder:=xlByRows)
    If Not TimCell Is Nothing Then
    FirstAddress = TimCell
    i = 11
    Do
    Cells(i, 1).Resize(, 4) = ws1.Cells(TimCell.Row, 1).Resize(, 4).Value
    Select Case TimCell.Column
    Case 6
        Cells(i, 5) = TimCell.Offset(, 1).Value
        Cells(i, 6) = TimCell.Offset(, 2).Value
    Case 7
        Cells(i, 5) = TimCell.Offset(, -1).Value
        Cells(i, 7) = TimCell.Offset(, 2).Value
    End Select
    i = i + 1
    Set TimCell = MyR.FindNext(TimCell)
    Loop While FirstAddress <> TimCell.Address
    End If
    If i > 11 Then Rows(i & eRw2).EntireRow.Hidden = True
    Set TimCell = Nothing: Set MyR= Nothing
    Set ws1 = Nothing: Set ws2 = Nothing
    Application.ScreenUpdating = True
End Sub
AC chỉ dùm em chỗ sai!?
 

File đính kèm

Lần chỉnh sửa cuối:
AC xem dùm em code này:
PHP:
Option Explicit
Sub Tao_So()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim eRw1 As Long, eRw2 As Long, FirstAddress As String, i As Long
    Dim MyR As Range, TimCell As Range
    Set ws1 = Sheets("Data")
    Set ws2 = Sheets("SCAI")
    Application.ScreenUpdating = False
    ws2.Range("A11:G65535").Clear
    eRw1 = ws1.Range("A65535").End(xlUp).Row
    eRw2 = ws2.Range("A65535").End(xlUp).Row
    Set MyR = ws1.Range("F5:G" & eRw1)
    Set TimCell = MyR.Find(what:=[D3] & "*", after:=.[F4], LookIn:=xlValues, _
                            LookAt:=xlWhole, searchorder:=xlByRows)
    If Not TimCell Is Nothing Then
    FirstAddress = TimCell
    i = 11
    Do
    Cells(i, 1).Resize(, 4) = ws1.Cells(TimCell.Row, 1).Resize(, 4).Value
    Select Case TimCell.Column
    Case 6
        Cells(i, 5) = TimCell.Offset(, 1).Value
        Cells(i, 6) = TimCell.Offset(, 2).Value
    Case 7
        Cells(i, 5) = TimCell.Offset(, -1).Value
        Cells(i, 7) = TimCell.Offset(, 2).Value
    End Select
    i = i + 1
    Set TimCell = MyR.FindNext(TimCell)
    Loop While FirstAddress <> TimCell.Address
    End If
    If i > 11 Then Rows(i & eRw2).EntireRow.Hidden = True
    Set TimCell = Nothing: Set MyR= Nothing
    Set ws1 = Nothing: Set ws2 = Nothing
    Application.ScreenUpdating = True
End Sub
AC chỉ dùm em chỗ sai!?
Tôi nghĩ code trên sai 3 chổ!
1> FirstAddress = TimCell
Lý ra phải là
FirstAddress = TimCell.Address
2> Set TimCell = MyR.Find(what:=[D3] & "*", after:=.[F4], LookIn:=xlValues, LookAt:=xlWhole, searchorder:=xlByRows)
Lý ra phải là
Set TimCell = MyR.Find(Ws2.[D3].Value & "*", , xlValues, xlWhole)
3> Set MyO = Nothing
Lý ra phải là:
Set MyR = Nothing
-----------------------
Ngoài ra: Nhớ ghi rõ tên sheet... Chẳng hạn bạn ghi Cells(i, 5) thì mặc định đang nói cell này tại ActiveSheet ---> Đồng nghĩa là code chỉ chạy đúng khi ta đang đứng tại sheet SCAI ---> Nhảy sang sheet DMTK mà Run code thì... ôi thôi... banh ta long ---> Lý ra phải ghi đầy đủ ws2.Cells(i, 5) ---> Như vậy, cho dù bạn đang đứng tại bất cứ sheet nào thì code vẫn đặt kết quả vào chính xác nơi bạn cần
 
Lần chỉnh sửa cuối:
Upvote 0
Theo tôi hiểu số 65535 là số hàng của 1 cột trong Excel 2003, còn nếu 2007 thì sao?
Để linh hoạt thay số đó bằng ActiveSheet.rows.count xem có hay hơn không?
 
Upvote 0
Theo tôi hiểu số 65535 là số hàng của 1 cột trong Excel 2003, còn nếu 2007 thì sao?
Để linh hoạt thay số đó bằng ActiveSheet.rows.count xem có hay hơn không?

Thầy ơi, sao em sửa mà lại không được ah? Excel 2003 chạy tốt nhưng 2007 thì.............không chạy được! Thầy chỉ dùm em nha?
 
Lần chỉnh sửa cuối:
Upvote 0
Thầy ơi, sao em sửa mà lại không được ah? Excel 2003 chạy tốt nhưng 2007 thì.............không chạy được! Thầy chỉ dùm em nha?
Sao lại không được chứ! Bạn xem file đây (Excel 2007)
Lưu ý rằng: Nếu bạn mở file XLS bằng Excel 2007 thì không nói làm gì... còn như bạn tạo 1 file hoàn toàn mới trên Excel 2007 thì khi lưu file, BẮT BUỘC phải lưu ở định dạng XLSM mới có thể chạy được macro
 

File đính kèm

Upvote 0
Sao lại không được chứ! Bạn xem file đây (Excel 2007)
Lưu ý rằng: Nếu bạn mở file XLS bằng Excel 2007 thì không nói làm gì... còn như bạn tạo 1 file hoàn toàn mới trên Excel 2007 thì khi lưu file, BẮT BUỘC phải lưu ở định dạng XLSM mới có thể chạy được macro

Anh ơi, có công thức nào chuyển số liều từ sheet DaTa ( Cơ sở dữ liệu ) sang sheet Sổ Cái không ạ ? Mong anh chỉ giùm.
 
Upvote 0

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

Back
Top Bottom