nhờ anh em fix lỗi file VBA chạy chậm

Liên hệ QC

huyhoangjo

Thành viên mới
Tham gia
8/9/20
Bài viết
12
Được thích
1
em có file VBA bình thường trước mở thì chạy xử lý nhanh khi chạy, giờ thì nó xoay chậm mới ra kết quả hoặc treo excel lun.Mong được anh em trong group chỉ dẫn ah.Em cảm ơn rất nhiều
 

File đính kèm

  • LAM GIA THANH-VBA.xlsm
    132.3 KB · Đọc: 18
Bạn dùng for...next mà duyệt từng dòng trên bảng tính và paste từng dòng như thế, thì theo thời gian sẽ chậm là đúng rồi
Có nhiều cách:
Cách 1) Nhiều người ở GPE hay dùng: Dùng vòng lặp, chép giá trị vùng vào mảng, tính toán, sau đó chép ngược lại lên sheet
Cách 2) Không dùng vòng lặp: nối chuỗi 2 cột với dấu cộng, sau đó dùng hàm evaluate() để lấy kết quả:
PHP:
Sub TINHGIATHANH()
    Dim rngI As String, rngJ As String, rng As String
    Application.EnableEvents = 0
    If MsgBoxTimer("B" & ChrW(7840) & "N CÓ MU" & ChrW(7888) & "N C" & ChrW(7852) & "P NH" & ChrW(7852) & "T?", vbOKCancel + vbInformation, "C" & ChrW(7852) & "P NH" & ChrW(7852) & "T") = vbCancel Then End
    With Sheet1
        DC = .Range("B" & Rows.Count).End(xlUp).Row
        '------------------
        rngI = .Range("I6:I" & DC).Address
        rngJ = .Range("J6:J" & DC).Address
        rng = rngI & "+" & rngJ
        .Range("I6:I" & DC).Value = Evaluate(rng)
        '------------------
        rngJ = .Range("F6:F" & DC).Address
        rng = rngI & "+" & rngJ
        .Range("H6:H" & DC).Value = Evaluate(rng)
        '----------------------
        .Range("j6:j" & DC).ClearContents
        .Range("L6:L" & DC).ClearContents
    End With
    Application.EnableEvents = 1
End Sub
 
Upvote 0
Bạn dùng for...next mà duyệt từng dòng trên bảng tính và paste từng dòng như thế, thì theo thời gian sẽ chậm là đúng rồi
Có nhiều cách:
Cách 1) Nhiều người ở GPE hay dùng: Dùng vòng lặp, chép giá trị vùng vào mảng, tính toán, sau đó chép ngược lại lên sheet
Cách 2) Không dùng vòng lặp: nối chuỗi 2 cột với dấu cộng, sau đó dùng hàm evaluate() để lấy kết quả:
PHP:
Sub TINHGIATHANH()
    Dim rngI As String, rngJ As String, rng As String
    Application.EnableEvents = 0
    If MsgBoxTimer("B" & ChrW(7840) & "N CÓ MU" & ChrW(7888) & "N C" & ChrW(7852) & "P NH" & ChrW(7852) & "T?", vbOKCancel + vbInformation, "C" & ChrW(7852) & "P NH" & ChrW(7852) & "T") = vbCancel Then End
    With Sheet1
        DC = .Range("B" & Rows.Count).End(xlUp).Row
        '------------------
        rngI = .Range("I6:I" & DC).Address
        rngJ = .Range("J6:J" & DC).Address
        rng = rngI & "+" & rngJ
        .Range("I6:I" & DC).Value = Evaluate(rng)
        '------------------
        rngJ = .Range("F6:F" & DC).Address
        rng = rngI & "+" & rngJ
        .Range("H6:H" & DC).Value = Evaluate(rng)
        '----------------------
        .Range("j6:j" & DC).ClearContents
        .Range("L6:L" & DC).ClearContents
    End With
    Application.EnableEvents = 1
End Sub
cảm ơn a rất nhiều lun do em mới tập tành code nên thực sự gà mờ,nên nhiều cái không hiểu
 
Upvote 0
cảm ơn a rất nhiều lun do em mới tập tành code nên thực sự gà mờ,nên nhiều cái không hiểu
Người viết code này chắc cũng thuộc người am hiểu VBA. Nhờ tác giả sửa lại cho bạn
Riêng tôi thì không ham cái userform. Vì chỉ tập tành nên tôi chỉ thích xử lý trên sheet cho gọn. Form chỉ để làm cho vấn đề đơn giản trở nên có vẻ phức tạp
 
Upvote 0
dạ đúng rồi a.em làm bên kế toán code này đc 1 chị khác để lại để tính giá thành,lâu này e dùng bị lỗi treo nặng hoài,e chỉ biết mấy code đơn giản hoặc hoặc kiểu chắp vá trên mạng vào nên không rành.lâu nay xài nó cực vì excel treo hết.
 
Upvote 0
Web KT

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

Back
Top Bottom