Lỗi code tổng hợp dữ liệu theo ngày (1 người xem)

Liên hệ QC

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

phongkiemtinh

Thành viên thường trực
Tham gia
22/7/09
Bài viết
224
Được thích
5
GPE xem dùm file e bị lỗi gì về code dùm e: sheet "Tong hop" em sort theo ngày mà bào lỗi không chạy được.
paperclip.png
Tập tin đính kèm
 
Lần chỉnh sửa cuối:
GPE xem dùm file e bị lỗi gì về code dùm e: sheet "Tong hop (2)" em sort theo ngày mà bào lỗi không chạy được.
paperclip.png
Tập tin đính kèm
Trong Sub GPE1 có câu lệnh này:
Mã:
If K Then Sheets("Tong Hop").[C6].Resize([COLOR=#ff0000][B]U[/B][/COLOR], 5).Value = Arr
U là cái gì vậy bạn? Tôi đọc code không thấy đề cập đến nó ở các câu lệnh phía trên.
Thêm nữa, cái Sub Worksheet_SelectionChange của bạn có lẽ phải sửa lại như thế này mới phù hợp chứ nhỉ:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.ScreenUpdating = False
    If Target.Cells.Count > 1 Then Exit Sub
    If Target.Row <> [COLOR=#ff0000][B]5[/B][/COLOR] Then Exit Sub
    [[COLOR=#ff0000][B]5[/B][/COLOR]:65536].Sort Key1:=Cells([COLOR=#ff0000][B]5[/B][/COLOR], Target.Column), Order1:=xlAscending, Header:=[COLOR=#ff0000][B]xlYes[/B][/COLOR]
    Application.ScreenUpdating = True
End Sub
 
Upvote 0
Thật quá bực mình với kiểu file thế này, không hiểu cố tình hay vô ý mở file xong là các thiết lập loạn hết cả lên.
Theo tôi, học và hành nên tập trung vào mục đích chính chứ mấy cái râu ria chả hù doạ được ai mà chỉ tổ bực mình thôi.

Sheet thì chép thành Tong hop (2) trong khi Code là Tong hop nó báo lỗi là đúng rồi.
 
Lần chỉnh sửa cuối:
Upvote 0
Thật quá bực mình với kiểu file thế này, không hiểu cố tình hay vô ý mở file xong là các thiết lập loạn hết cả lên.
Theo tôi, học và hành nên tập trung vào mục đích chính chứ mấy cái râu ria chả hù doạ được ai mà chỉ tổ bực mình thôi.

Sheet thì chép thành Tong hop (2) trong khi Code là Tong hop nó báo lỗi là đúng rồi.

E cảm ơn nhiều, e chỉnh lại rồi mà kết quả tổng hợp các sheet còn lại cũng chưa được. a thông cảm e mới tập làm macro, chủ yếu là xem code trên GPE rồi vận dụng làm file này.Mong GPE và các a giúp đỡ,
Sheet "Tong hop" là tổng hợp các sheet như: toyo3, KWT2 (đã có data), ...cho đi tới các sheet cuối cùng phía bên tay trái.(trừ sheet "gcas list " đã hide.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử đ/c code như sau xem sao:
Mã:
Public Sub GPE1()
Dim Tu As Long, Den As Long, Rng(), I As Long, K As Long
Dim Arr(1 To 1000, 1 To 4), Ws As Worksheet
    Application.ScreenUpdating = False
        Tu = Sheet21.[E2].Value
            Den = Sheet21.[E3].Value
                If Tu <> 0 And Den <> 0 Then
                    Sheet21.[C6:U16000].ClearContents
                    For Each Ws In Worksheets
                        If Ws.CodeName <> "Sheet21" And Ws.CodeName <> "Sheet4" Then
                             If Ws.[B65536].End(3).Row > 5 Then
                                Rng = Ws.Range(Ws.[B4], Ws.[B65000].End(xlUp)).Resize(, 19).Value
                                    For I = 1 To UBound(Rng, 1)
                                        If Rng(I, 1) <= Den And Rng(I, 1) >= Tu Then
                                            K = K + 1
                                                Arr(K, 1) = K: Arr(K, 2) = Rng(I, 1)
                                            Arr(K, 3) = Rng(I, 2): Arr(K, 4) = Rng(I, 3)
                                        End If
                                    Next I
                                End If
                            End If
                        Next
                    If K Then Sheet21.[C6].Resize(K, 5).Value = Arr
                    Sheet21.Select
                Sheet21.Range([C6], [C65000].End(xlUp)).Sort Key1:=Range("C5")
            End If
        Sheet21.Range("$C$5:$U$65000").AutoFilter Field:=15, Criteria1:="<>"""
    Application.ScreenUpdating = True
End Sub
 
Upvote 0
Bạn thử đ/c code như sau xem sao:
Mã:
Public Sub GPE1()
Dim Tu As Long, Den As Long, Rng(), I As Long, K As Long
Dim Arr(1 To 1000, 1 To 4), Ws As Worksheet
    Application.ScreenUpdating = False
        Tu = Sheet21.[E2].Value
            Den = Sheet21.[E3].Value
                If Tu <> 0 And Den <> 0 Then
                    Sheet21.[C6:U16000].ClearContents
                    For Each Ws In Worksheets
                        If Ws.CodeName <> "Sheet21" And Ws.CodeName <> "Sheet4" Then
                             If Ws.[B65536].End(3).Row > 5 Then
                                Rng = Ws.Range(Ws.[B4], Ws.[B65000].End(xlUp)).Resize(, 19).Value
                                    For I = 1 To UBound(Rng, 1)
                                        If Rng(I, 1) <= Den And Rng(I, 1) >= Tu Then
                                            K = K + 1
                                                Arr(K, 1) = K: Arr(K, 2) = Rng(I, 1)
                                            Arr(K, 3) = Rng(I, 2): Arr(K, 4) = Rng(I, 3)
                                        End If
                                    Next I
                                End If
                            End If
                        Next
                    If K Then Sheet21.[C6].Resize(K, 5).Value = Arr
                    Sheet21.Select
                Sheet21.Range([C6], [C65000].End(xlUp)).Sort Key1:=Range("C5")
            End If
        Sheet21.Range("$C$5:$U$65000").AutoFilter Field:=15, Criteria1:="<>"""
    Application.ScreenUpdating = True
End Sub

Không được a ạ. A thử file dùm e với, file đính kèm .
 
Lần chỉnh sửa cuối:
Upvote 0
Sao ko thấy GPE giúp e thêm chút với. e làm lỗi không ra
 
Upvote 0
Thật quá bực mình với kiểu file thế này, không hiểu cố tình hay vô ý mở file xong là các thiết lập loạn hết cả lên.
Theo tôi, học và hành nên tập trung vào mục đích chính chứ mấy cái râu ria chả hù doạ được ai mà chỉ tổ bực mình thôi.
.

Em cũng thấy vậy! Chính thế mà:
- Nếu xóa hết mấy cái "râu ria" kia cho đở bực mình rồi mới tập trung sửa code thì sợ tác giả phiền lòng (ai mượn anh xóa "đồ chơi" của tôi)
- Nếu để nguyên vậy thì... thôi thà khỏi làm luôn cho đở bực mình
 
Upvote 0
Thầy giúp chỉnh sửa cho gọn dùm cũng được ah, cái này file còn hơi lộn xộn up lên nhơ GPE xem dùm mà.
 
Upvote 0
Tôi thấy bạn đã là thành viên"2 sao" rồi mà vẫn gửi file dạng này, hoàn toàn không có 1 chút dữ liệu nào làm sao kiểm tra. Nhập giả định vào e không chuẩn.
Đề nghị:
-Rem toàn bộ 2 đoạn Code Auto_Open và Auto_Close (Khi nào bạn dùng thì bỏ Rem đi)
-Trong file các sheet cần tổng hợp cần phải có ít nhất vài dòng dữ liệu.
-Mẫu kết quả tổng hợp như thế nào (Vì mình tin dại đa số ít người hiểu chính xác bạn cần làm gì)
Vậy nha, bạn làm khó bạn nên chậm trả lời thôi. Nếu bạn chi tiết chắc không phải giục đâu.
 
Upvote 0
Tôi thấy bạn đã là thành viên"2 sao" rồi mà vẫn gửi file dạng này, hoàn toàn không có 1 chút dữ liệu nào làm sao kiểm tra. Nhập giả định vào e không chuẩn.
Đề nghị:
-Rem toàn bộ 2 đoạn Code Auto_Open và Auto_Close (Khi nào bạn dùng thì bỏ Rem đi)
-Trong file các sheet cần tổng hợp cần phải có ít nhất vài dòng dữ liệu.
-Mẫu kết quả tổng hợp như thế nào (Vì mình tin dại đa số ít người hiểu chính xác bạn cần làm gì)
Vậy nha, bạn làm khó bạn nên chậm trả lời thôi. Nếu bạn chi tiết chắc không phải giục đâu.
E gửi file mới nhất để GPE giúp đỡ, file e đã nhập dữ liệu vào 2 sheet "toyo3" và "KWT2".File e có thử code cho sheet "Tong hợp" nhưng chưa lọc theo ngày được.(pass unlock sheet là : "gpe"

Yêu cầu : Tại sheet "Tong hop" sẽ tổng hộp dữ liệu từ 2 sheet "Toyo3" và "KWT2", lọc theo ngày tại cell "E2" và fill "end" ở cột "O".



 
Upvote 0
Tôi thấy bạn đã là thành viên"2 sao" rồi mà vẫn gửi file dạng này, hoàn toàn không có 1 chút dữ liệu nào làm sao kiểm tra. Nhập giả định vào e không chuẩn.
Đề nghị:
-Rem toàn bộ 2 đoạn Code Auto_Open và Auto_Close (Khi nào bạn dùng thì bỏ Rem đi)
-Trong file các sheet cần tổng hợp cần phải có ít nhất vài dòng dữ liệu.
-Mẫu kết quả tổng hợp như thế nào (Vì mình tin dại đa số ít người hiểu chính xác bạn cần làm gì)
Vậy nha, bạn làm khó bạn nên chậm trả lời thôi. Nếu bạn chi tiết chắc không phải giục đâu.
E gửi file mới nhất để GPE giúp đỡ, file e đã nhập dữ liệu vào 2 sheet "toyo3" và "KWT2".File e có thử code cho sheet "Tong hợp" nhưng chưa lọc theo ngày được.(pass unlock sheet là : "gpe"

Yêu cầu : Tại sheet "Tong hop" sẽ tổng hộp dữ liệu từ 2 sheet "Toyo3" và "KWT2", lọc theo ngày tại cell "E2" và fill "end" ở cột "O".
 
Upvote 0
Trước hết bạn nên thêm một Hàm để đặt Sheet theo Codename. Như vậy,ta tập hợp chính xác các sheet theo danh sách, nó an toàn hơn so với tên sheet vì người dung đổi tên Sheet là vỡ code và lấy đúng các sheet cụ thể. Mặt khác, sau này dùng vòng lặp để khoá các sheet chỉ định.

Mã:
Function MySh(ByVal CodeName As String) As Worksheet
    Dim Sh As Worksheet
    For Each Sh In Worksheets
        If Sh.CodeName = CodeName Then
            Set MySh = Sh
            Exit Function
        End If
    Next
    Set MySh = Nothing
End Function

Và đây là Code tổng hợp

Mã:
Public Sub GPE()
Dim tu As Date, ShList(), Res(1 To 6000, 1 To 20), Tm, i, j, n, m
tu = Sheet21.[E2].Value
If Not IsDate(tu) Then
    MsgBox "Sai ngay"
    Exit Sub
End If
ShList = Array("Sheet3", "Sheet4")
Application.ScreenUpdating = False
For i = LBound(ShList) To UBound(ShList)
    Tm = MySh(ShList(i)).Range("A3:T" & MySh(ShList(i)).[A65536].End(xlUp).Row)
    For j = 1 To UBound(Tm, 1)
        If Tm(j, 1) >= tu And Tm(j, 1) <> "" Then
            n = n + 1
            For m = 1 To 20
                Res(n, m) = Tm(j, m)
            Next m
        End If
    Next j
Next i
Sheet21.[B6:U6000].ClearContents
Sheet21.[B6:U6000] = Res
End Sub
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Và đây là code LockSh (Mình phỏng theo Code của bạn chứ chưa biết bạn định làm gì)

Mã:
Sub LockSh()
   Dim ShList(), i
   ShList = Array("Sheet3", "Sheet4")
   For i = LBound(ShList) To UBound(ShList)
      With MySh(ShList(i))
          .Unprotect "gpe"
          .Cells.Locked = False
          .Range("A1:T1000").SpecialCells(xlCellTypeConstants, 23).Locked = True
          .Range("A1:T1000").SpecialCells(xlCellTypeFormulas, 23).Locked = True
          .Protect "gpe"
      End With
   Next
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Và đây là code LockSh (Mình phỏng theo Code của bạn chứ chưa biết bạn định làm gì)

Mã:
Sub LockSh()
   Dim ShList(), i
   ShList = Array("Sheet3", "Sheet4")
   For i = LBound(ShList) To UBound(ShList)
      With MySh(ShList(i))
          .Unprotect "gpe"
          .Cells.Locked = False
          .Range("A1:T1000").SpecialCells(xlCellTypeConstants, 23).Locked = True
          .Range("A1:T1000").SpecialCells(xlCellTypeFormulas, 23).Locked = True
          .Protect "gpe"
      End With
   Next
End Sub
Code "Locksh" là để luôn lưu dữ liệu trước khi tắt, đề phòng bị tắt file mà chưa lưu đó a và nó khoá những cell đã có dữ liệu (nhập dữ liệu vào save là khoá những cell trong vùng chỉ định.)
 
Upvote 0
Trước hết bạn nên thêm một Hàm để đặt Sheet theo Codename. Như vậy,ta tập hợp chính xác các sheet theo danh sách, nó an toàn hơn so với tên sheet vì người dung đổi tên Sheet là vỡ code và lấy đúng các sheet cụ thể. Mặt khác, sau này dùng vòng lặp để khoá các sheet chỉ định.

Mã:
Function MySh(ByVal CodeName As String) As Worksheet
    Dim Sh As Worksheet
    For Each Sh In Worksheets
        If Sh.CodeName = CodeName Then
            Set MySh = Sh
            Exit Function
        End If
    Next
    Set MySh = Nothing
End Function

Và đây là Code tổng hợp

Mã:
Public Sub GPE()
Dim tu As Date, ShList(), Res(1 To 6000, 1 To 20), Tm, i, j, n, m
tu = Sheet21.[E2].Value
If Not IsDate(tu) Then
    MsgBox "Sai ngay"
    Exit Sub
End If
ShList = Array("Sheet3", "Sheet4")
Application.ScreenUpdating = False
For i = LBound(ShList) To UBound(ShList)
    Tm = MySh(ShList(i)).Range("A3:T" & MySh(ShList(i)).[A65536].End(xlUp).Row)
    For j = 1 To UBound(Tm, 1)
        If Tm(j, 1) >= tu And Tm(j, 1) <> "" Then
            n = n + 1
            For m = 1 To 20
                Res(n, m) = Tm(j, m)
            Next m
        End If
    Next j
Next i
Sheet21.[B6:U6000].ClearContents
Sheet21.[B6:U6000] = Res
End Sub
Không có code lọc theo cột "O " anh, lọc theo cột có chữ "END" trong bảng tổng hợp đó.??Mà sao nhập ngày nhỏ khác vào celll E2 vẫn hiện lên sao a.ở đây dữ liệu ngày 18/10 hết , mà nhập các ngày 16/10 hay 17/10 cũng showall hết.
 
Lần chỉnh sửa cuối:
Upvote 0
Hình như yêu cầu lọc của bạn là bằng ngày chứ không phải là từ ngày (Đây là 2 điều kiện hoàn toàn khác nhau nha)
Còn fill từ "END" vào các sheet nguồn hay sheet tong hop. Nhứng dòng đã có END rồi thì sao?
 
Upvote 0
Hình như yêu cầu lọc của bạn là bằng ngày chứ không phải là từ ngày (Đây là 2 điều kiện hoàn toàn khác nhau nha)
Còn fill từ "END" vào các sheet nguồn hay sheet tong hop. Nhứng dòng đã có END rồi thì sao?
- Đúng rồi chỉ chọn lọc bằng ngày,lọc ngày của cột "Release date" ở cell "E2", nhưng file a gửi nếu mình nhập khác ngày 18/10 đó thì sẽ không có dữ liệu của ngày 18/10 chứ,(ở đây e nhập ngày 17/10 dữ liệu 18/10cũng hiện ra).
- từ "END" không phải fill nữa a, mà mình lọc ra file "tổng hợp" theo ngày và theo dòng có chữ "END" ở cột "Last sample" (cột O). file cũ e có dòng code e tự record : Sheet21.Range("$B$5:$U$16000").AutoFilter Field:=14, Criteria2:="END"
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy thì Code điều chỉnh như sau:
Mã:
Public Sub GPE()
Dim tu As Date, ShList(), Res(1 To 6000, 1 To 20), Tm, i, j, n, m
tu = Sheet21.[E2].Value
If Not IsDate(tu) Then
MsgBox "Sai ngay"
Exit Sub
End If
ShList = Array("Sheet3", "Sheet4")
Application.ScreenUpdating = False
For i = LBound(ShList) To UBound(ShList)
Tm = MySh(ShList(i)).Range("A3:T" & MySh(ShList(i)).[A65536].End(xlUp).Row)
For j = 1 To UBound(Tm, 1)
[B][COLOR=#ff0000]If Format(Tm(j, 1), "dd/mm/yyyy") Like Format(tu, "dd/mm/yyyy") And Tm(j, 14) = "END" Then[/COLOR][/B]
n = n + 1
For m = 1 To 20
Res(n, m) = Tm(j, m)
Next m
End If
Next j
Next i
Sheet21.[B6:U6000].ClearContents
Sheet21.[B6:U6000] = Res
End Sub

Lưu ý: Thay đổi 1 chút ở dòng màu đỏ
 
Upvote 0
Vậy thì Code điều chỉnh như sau:
Mã:
Public Sub GPE()
Dim tu As Date, ShList(), Res(1 To 6000, 1 To 20), Tm, i, j, n, m
tu = Sheet21.[E2].Value
If Not IsDate(tu) Then
MsgBox "Sai ngay"
Exit Sub
End If
ShList = Array("Sheet3", "Sheet4")
Application.ScreenUpdating = False
For i = LBound(ShList) To UBound(ShList)
Tm = MySh(ShList(i)).Range("A3:T" & MySh(ShList(i)).[A65536].End(xlUp).Row)
For j = 1 To UBound(Tm, 1)
[B][COLOR=#ff0000]If Format(Tm(j, 1), "dd/mm/yyyy") Like Format(tu, "dd/mm/yyyy") And Tm(j, 14) = "END" Then[/COLOR][/B]
n = n + 1
For m = 1 To 20
Res(n, m) = Tm(j, m)
Next m
End If
Next j
Next i
Sheet21.[B6:U6000].ClearContents
Sheet21.[B6:U6000] = Res
End Sub

Lưu ý: Thay đổi 1 chút ở dòng màu đỏ
Thank anh nhiều lắm, code nay e áp dụng tong hop cho 16 sheet (mỗi sheet 600 dòng ) chắc cũng nhanh a nhỉ.
Ah tiện thể a xem dùm vấn đề khác e post bên bài sau dùm e với.

http://www.giaiphapexcel.com/forum/...liệu-trùng-cuối-cùng-và-xuất-data-cell-kế-bên
 
Upvote 0

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

Back
Top Bottom