Giúp Sub chạy nhanh hơn (2 người xem)

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

kobebryant

Thành viên thường trực
Tham gia
7/8/09
Bài viết
248
Được thích
28
Mình có sub taosochitiet mình xin tạm mô tả đơn giản như sau
- với ý định là chèn số dòng vào sheet SoChiTiet sao cho số dòng SoChiTiet = số dòng sheet NKC
- sau đó sẽ copy công thức ở dòng có sẵn đổ xuống dòng cuối cùng ở sheet SoChiTiet
Sub này mình gán vào button ở Sheet SoChiTiet


Sub này mình viết đã chạy ok rồi nhưng có 2 vấn đề:
Sub này chạy chậm quá có cách nào viết tối ưu để giúp chạy nhanh hơn ko
khi insert dòng vào rồi thì đường kẻ của bảng nó ko như mong muốn

Mong bạn nào giúp mình giải quyết với. Mình xin cám ơn.
Mình add file kia báo lỗi nên add lại, các bạn tải file Hoi GPE - File da add Code dùm mình nhé
Mã:
Sub TaoSoChiTiet()
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
    Dim a As Integer
    Dim b As Integer

  ' 3 la do chenh lech dong giua sheet NKC va sheet SoChiTiet
        b = Range("CuoiNKC").Row - Range("CuoiSCT").Row   3
    For a = 1 To b
        Range("CuoiSCT").EntireRow.Insert
    Next a

    
    Dim RowSoChiTiet As Integer
    RowSoChiTiet = Range("CuoiSCT").Row - 1
    Range("A13:A"
 

File đính kèm

Lần chỉnh sửa cuối:
bạn nào chia sẻ với mình với. Mình cám ơn nhiều
 
Lần chỉnh sửa cuối:
Upvote 0
Mình có sub taosochitiet mình xin tạm mô tả đơn giản như sau
- với ý định là chèn số dòng vào sheet SoChiTiet sao cho số dòng SoChiTiet = số dòng sheet NKC
- sau đó sẽ copy công thức ở dòng có sẵn đổ xuống dòng cuối cùng ở sheet SoChiTiet
Sub này mình gán vào button ở Sheet SoChiTiet


Sub này mình viết đã chạy ok rồi nhưng có 2 vấn đề:
+ Sub này chạy chậm quá có cách nào viết tối ưu để giúp chạy nhanh hơn ko
+ khi insert dòng vào rồi thì đường kẻ của bảng nó ko như mong muốn

Mong bạn nào giúp mình giải quyết với. Mình xin cám ơn.
Mình add file kia báo lỗi nên add lại, các bạn tải file Hoi GPE - File da add Code dùm mình nhé
Mã:
Sub TaoSoChiTiet()
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
    Dim a As Integer
    Dim b As Integer

  '+3 la do chenh lech dong giua sheet NKC va sheet SoChiTiet
        b = Range("CuoiNKC").Row - Range("CuoiSCT").Row + 3
    For a = 1 To b
        Range("CuoiSCT").EntireRow.Insert
    Next a

    
    Dim RowSoChiTiet As Integer
    RowSoChiTiet = Range("CuoiSCT").Row - 1
    Range("A13:A" & RowSoChiTiet).ClearContents
    Range("B13:B" & RowSoChiTiet).ClearContents
    Range("C13:C" & RowSoChiTiet).ClearContents
    Range("D13:D" & RowSoChiTiet).ClearContents
    Range("E13:E" & RowSoChiTiet).ClearContents
    Range("F13:F" & RowSoChiTiet).ClearContents
    Range("G13:G" & RowSoChiTiet).ClearContents
    Range("H13:H" & RowSoChiTiet).ClearContents
    Range("I13:I" & RowSoChiTiet).ClearContents
    Range("J13:J" & RowSoChiTiet).ClearContents
    Range("K13:K" & RowSoChiTiet).ClearContents

    Range("A12:K12").AutoFill Range("A12:K" & RowSoChiTiet), xlFillValues
Application.Calculation = xlCalculationAutomatic

    Range("A13:E" & RowSoChiTiet).Copy
    Range("A13:E" & RowSoChiTiet).PasteSpecial xlPasteValues, xlPasteSpecialOperationNone
Application.CutCopyMode = False

    Range("A1").Select
Application.EnableEvents = True
Application.ScreenUpdating = True
    
    
End Sub
Đọc code của bạn "chóng mặt" quá.
Thà bạn nói rõ yêu cầu, kết quả cần có thì dễ làm hơn.
Thử xem trong file có đúng kết quả không.
 

File đính kèm

Upvote 0
Đọc code của bạn "chóng mặt" quá.
Thà bạn nói rõ yêu cầu, kết quả cần có thì dễ làm hơn.
Thử xem trong file có đúng kết quả không.
Anh Ba Tê viết code cao siêu wá em đọc chóng mặt. Nhưng công nhận thấy tác vụ nhanh hơn hẳn.
Cho em hỏi là chỗ Code ClearContent có cách nào gộp đơn giản hơn ko ạ.
Theo như ví dụ thì nó liên tiếp từ A đến K thì chỉ cần Range ("A : K"
 
Lần chỉnh sửa cuối:
Upvote 0
Anh Ba Tê viết code cao siêu wá em đọc chóng mặt. Nhưng công nhận thấy tác vụ nhanh hơn hẳn.
Cho em hỏi là chỗ Code ClearContent có cách nào gộp đơn giản hơn ko ạ.
Theo như ví dụ thì nó liên tiếp từ A đến K thì chỉ cần Range ("A : K" & biến) là xong, nhưng em bị trường hợp là có đứt ở giữa
Ví dụ:
Range ("A:B" & Biến).ClearContent
Range ("G:H" & Biến).ClearContent
Range ("U:AZ" & Biến).ClearContent

Thì trường hợp này mình có cách nào viết đơn giản ko anh

Range("A12:B" & Bien & ",G12:H" & Bien & ", U12:AZ" & Bien).ClearContents
 
Upvote 0
Anh Ba Tê viết code cao siêu wá em đọc chóng mặt. Nhưng công nhận thấy tác vụ nhanh hơn hẳn.
Cho em hỏi là chỗ Code ClearContent có cách nào gộp đơn giản hơn ko ạ.
Theo như ví dụ thì nó liên tiếp từ A đến K thì chỉ cần Range ("A : K" & biến) là xong, nhưng em bị trường hợp là có đứt ở giữa
Ví dụ:
Range ("A:B" & Biến).ClearContent
Range ("G:H" & Biến).ClearContent
Range ("U:AZ" & Biến).ClearContent

Thì trường hợp này mình có cách nào viết đơn giản ko anh
Bạn nhập dữ liệu thử từ cột A đến cột J
Chạy lần lượt 2 Sub này rồi nghiệm ra
PHP:
Sub Xoa_Nhay_Dong()
Dim i, Bien
Bien = 100
For i = 1 To 10
   If i = 3 Or i = 7 Or i = 9 Then
      Range(Cells(3, i), Cells(Bien, i)).ClearContents
   End If
Next
End Sub
PHP:
Sub Xoa_Nhay_Dong2()
Dim i, Bien
Bien = 100
For i = 1 To 10
   If i <> 3 And i <> 7 And i <> 9 Then
      Range(Cells(3, i), Cells(Bien, i)).ClearContents
   End If
Next
End Sub
 
Upvote 0

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

Back
Top Bottom