AnhThu-1976
Thành viên tích cực
- Tham gia
- 17/10/14
- Bài viết
- 1,016
- Được thích
- 163
Các anh/chị vui lòng giúp em sửa code như sau
Em có tải 1 code trên GPE
Tại sheet CaNam chạy code thì nó sẽ tổng hợp số liệu của toàn bộ các sheet khác
Bây giờ em có thêm sheet MuaDongPhuc, em muốn khi chạy code thì sheet CaNam thì nó chỉ tổng hợp các sheet có ký tự bắt đầu là chữ "T" còn các sheet khác không có chữ "T" đầu tiên thì không tổng hợp số liệu vào sheet CaNam
Em có sửa dòng
Thành
Sau khi sửa code xong và tại sheet CaNam ta delete từ dòng thứ 8 trở xuống và chạy code, kết quả như sau:
1/ Sau khi chạy lần thứ 1 thì:
a/Nó tự động thêm dòng tiêu đề ở phía dưới tên Nguyễn Đình Đỉnh
b/ Nó cộng toàn số liệu của tất cả các sheet
2/ Vẫn để số liệu như vậy rồi chạy code lần thứ 2 thì
a/ Số liệu ở sheet CaNam không bị xóa đi để cập nhật lại số liệu mới mà nó bị cộng dồn lên
Cho em hỏi
1/ Tại sao nó bị lỗi như trên
2/ Cách khắc phục lỗi đó
Em cảm ơn!
Em có tải 1 code trên GPE
Mã:
Option Explicit
Sub Tong()
Dim sh As Worksheet, data(), dic As Object, i As Long, r As Long
Dim Res(1 To 10000, 1 To 14), n As Long, k As Long, so
Set dic = CreateObject("scripting.dictionary")
With Range("A8:N5000")
.Font.Bold = False
.Borders.LineStyle = xlNone
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
End With
For Each sh In Worksheets
If sh.Name <> "CaNam" Then
data = sh.Range(sh.[A8], sh.[A65536].End(3)).Resize(, 14).Value
For i = 1 To UBound(data)
If data(i, 2) <> "" Then
If Not dic.exists(data(i, 2)) Then
k = k + 1
dic.Add data(i, 2), k
For n = 1 To 13
Res(k, n) = data(i, n)
Next
If Right(data(i, 2), 3) <> "000" Then
Res(k, 14) = Res(k, 14) + 1
End If
Else
For n = 6 To 13
Res(dic.Item(data(i, 2)), n) = Res(dic.Item(data(i, 2)), n) + data(i, n)
Next
If Right(data(i, 2), 3) <> "000" Then
Res(dic.Item(data(i, 2)), 14) = Res(dic.Item(data(i, 2)), 14) + 1
End If
End If
End If
Next
End If
Next
With Sheets("CaNam")
.[A8:N1000].ClearContents
.[A8].Resize(k, 14) = Res
.Range(.[A8], .[A65536].End(3)).Resize(, 14).Sort .[B7]
.Range(.[A8], .[A65536].End(3)).Resize(, 14).Font.Bold = False
For r = .[B65536].End(3).Row To 8 Step -1
If Right(.Cells(r, 2), 3) = "000" Then
.Cells(r, 2).EntireRow.Font.Bold = True
If r > 8 Then .Cells(r, 2).EntireRow.Insert
Else
.Cells(r, 1) = Val(Right(.Cells(r, 2), 3))
End If
Next
End With
Dim Tong As Range, j As Long
Set Tong = Range([B8], [B50000].End(xlUp)) ' Tinh dong Tong
For j = 4 To 12
[B50000].End(xlUp)(3).Offset(, j) = Application.WorksheetFunction.Sum(Tong.Offset(, j)) / 2
Next j
With Range([A8], [A5000].End(xlUp))
.HorizontalAlignment = xlCenter
.Offset(.Rows.Count)(2, 1) = "C" & ChrW(7897) & "ng"
.Offset(.Rows.Count)(2, 1).Resize(, 3).HorizontalAlignment = xlCenterAcrossSelection
.Offset(.Rows.Count)(2, 1).Resize(, 13).Font.Bold = True
End With
With Range([A8], [N65536].End(3))
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlContinuous
.Borders(xlInsideHorizontal).LineStyle = xlDot
End With
Range([A65536].End(3), [N65536].End(3)).Borders.Value = 1
End Sub
Bây giờ em có thêm sheet MuaDongPhuc, em muốn khi chạy code thì sheet CaNam thì nó chỉ tổng hợp các sheet có ký tự bắt đầu là chữ "T" còn các sheet khác không có chữ "T" đầu tiên thì không tổng hợp số liệu vào sheet CaNam
Em có sửa dòng
Mã:
If sh.Name <> "CaNam" Then
Mã:
If sh.Name <> "CaNam" Or Left(sh.Name, 1) <> "T" Then
1/ Sau khi chạy lần thứ 1 thì:
a/Nó tự động thêm dòng tiêu đề ở phía dưới tên Nguyễn Đình Đỉnh
b/ Nó cộng toàn số liệu của tất cả các sheet
2/ Vẫn để số liệu như vậy rồi chạy code lần thứ 2 thì
a/ Số liệu ở sheet CaNam không bị xóa đi để cập nhật lại số liệu mới mà nó bị cộng dồn lên
Cho em hỏi
1/ Tại sao nó bị lỗi như trên
2/ Cách khắc phục lỗi đó
Em cảm ơn!