Nhờ các anh xem đoạn code sai chỗ nào (1 người xem)

  • Thread starter Thread starter lhthai
  • Ngày gửi Ngày gửi

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

lhthai

Thành viên thường trực
Tham gia
1/9/07
Bài viết
309
Được thích
27
Hiện tại muốn lộc dữ liệu tất cả các sheet nhưng kết quả chỉ ra 1 sheet thôi
Các anh xem đoạn code em viết sai chỗ nào

Mã:
Private Sub CommandButton1_Click()
Dim Arr(), dArr(), I As Long, J As Long, K As Long, Ws As Worksheet, DK
 For Each Ws In ThisWorkbook.Worksheets
    If Ws.Name <> "KHSX" Then
        Arr = Ws.Range(Ws.[A4], Ws.[A5000].End(xlUp)).Resize(, 24).Value
        ReDim dArr(1 To UBound(Arr, 1), 1 To 24)
DK = Range("L4").Value
For I = 1 To UBound(Arr, 1)
    If Arr(I, 12) = DK Then
        K = K + 1
        For J = 1 To 24
            dArr(K, J) = Arr(I, J)
        Next J
    End If
Next I
    End If
Next Ws
Sheets("KHSX").[A6:W50000].ClearContents
Sheets("KHSX").[A6].Resize(K, 24) = dArr
End Sub
 
sai vì bạn đã cho lệnh redim dArr (dưới) lặp đi theo từng vòng lặp For Each Ws In ThisWorkbook.Worksheets
ReDim dArr(1 To UBound(Arr, 1), 1 To 24)
nên mỗi vòng lặp dArr được khai báo lại (tự xóa kết quả cũ) dẫn đến kết quả sai, chỉ lưu được kết quả của sheet cuối. Như thế bạn có thể tự sửa (hãy đưa phương án lên đây) hoặc nếu cần thì hỏi tiếp
 
Upvote 0
sai vì bạn đã cho lệnh redim dArr (dưới) lặp đi theo từng vòng lặp For Each Ws In ThisWorkbook.Worksheets
ReDim dArr(1 To UBound(Arr, 1), 1 To 24)
nên mỗi vòng lặp dArr được khai báo lại (tự xóa kết quả cũ) dẫn đến kết quả sai, chỉ lưu được kết quả của sheet cuối. Như thế bạn có thể tự sửa (hãy đưa phương án lên đây) hoặc nếu cần thì hỏi tiếp
Mã:
Private Sub CommandButton1_Click()
Dim Arr(), dArr(1 To 65536, 1 To 24), I As Long, J As Long, K As Long, Ws As Worksheet, DK
 For Each Ws In ThisWorkbook.Worksheets
    If Ws.Name <> "KHSX" Then
        Arr = Ws.Range(Ws.[A4], Ws.[A5000].End(xlUp)).Resize(, 24).Value
DK = Range("L4").Value
For I = 1 To UBound(Arr, 1)
    If Arr(I, 12) = DK Then
        K = K + 1
        For J = 1 To 24
            dArr(K, J) = Arr(I, J)
        Next J
    End If
Next I
    End If
Next Ws
Sheets("KHSX").[A6:W50000].ClearContents
Sheets("KHSX").[A6].Resize(K, 24) = dArr
End Sub
Cám ơn bạn nhiều nha.
 
Upvote 0
Thì bạn lệnh nó làm vậy chứ ai, này nhé!

Nó duyệt qua khắp các trang tính theo iêu cầu của bạn;

Nhưng mảng để ghi kết quả có ở các trang tính thì bạn lại khai báo lại còn gì, đây nè"
PHP:
        ReDim dArr(1 To UBound(Arr, 1), 1 To 24)
Theo mình, trước khi duyệt các trang tính bạn cần khai báo duy nhất 1 lần biến mảng này thôi, như
ReDim dArr(1 To 60000, 1 To 24)
(Nên khai thêm 1 tham biến để đếm số Record thỏa kiểu Long)
 
Upvote 0

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

Back
Top Bottom