Tăng tốc Code VBA (1 người xem)

Liên hệ QC

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

mhung12005

Thành viên chậm chạm
Tham gia
20/7/11
Bài viết
1,598
Được thích
1,261
Nghề nghiệp
Đâu có việc thì làm
Thân chào anh, chị em trong diễn đàn !

Tôi có viết đoạn code VBA: lấy và xử lý dữ liệu từ file không mở (mở ngầm).
Hiện tại code vẫn chạy bình thường, nhưng khi dữ liệu nhiều thì chạy rất rất chậm.

Vì khả năng có hạn nên chưa biết làm cách nào để tăng tốc độ của nó lên.
Rất mong sự giúp đỡ của các anh, chị em trong diễn đàn góp ý hoặc cho 1 giải pháp khác tốt hơn. Xin xem file đính kèm.

Xin chân thành cảm ơn.

P/S: Theo tôi biết thì ADO có thể làm tốt hơn nhưng chết cái là tôi lại mù tịt môn này.
 

File đính kèm

Chào bạn,
Nhìn Code của bạn mình có một góp ý nhỏ như sau
Bạn có lập hàm tự tạo để đếm chữ "x" trong vùng dữ liệu nguồn
Mã:
CountVehsDone
Hàm này bạn sử dụng hàm này 2 lần trong vòng lặp
Mã:
For lRow = 1 To UBound(vSourceArray, 1)
................
      vResultArray(k, 14) = CountVehsDone(vSourceArray)
      vResultArray(k, 15) = vTotal - CountVehsDone(vSourceArray)
Next lRow

Nếu có x mảng vSourceArray, mỗi mảng có y dòng thì hàm này sẽ được gọi x*y lần (trong 2 sheet VD hàm này được gọi 2*(116+164) lần.

- Theo dhn46 quan sát thì hàm này chỉ cần gọi 1 lần khi duyệt qua 1 sheet trước vòng lặp LRow, tức là trong ví dụ chỉ cần gọi hàm 2 lần (sử dụng biến tạm để lưu kết quả).



Hy vọng Code của bạn sẽ tăng tốc hơn một chút

dhn46.
 
Upvote 0
Chào bạn,
Nhìn Code của bạn mình có một góp ý nhỏ như sau
Bạn có lập hàm tự tạo để đếm chữ "x" trong vùng dữ liệu nguồn
Mã:
CountVehsDone
Hàm này bạn sử dụng hàm này 2 lần trong vòng lặp
Mã:
For lRow = 1 To UBound(vSourceArray, 1)
................
      vResultArray(k, 14) = CountVehsDone(vSourceArray)
      vResultArray(k, 15) = vTotal - CountVehsDone(vSourceArray)
Next lRow

Nếu có x mảng vSourceArray, mỗi mảng có y dòng thì hàm này sẽ được gọi x*y lần (trong 2 sheet VD hàm này được gọi 2*(116+164) lần.

- Theo dhn46 quan sát thì hàm này chỉ cần gọi 1 lần khi duyệt qua 1 sheet trước vòng lặp LRow, tức là trong ví dụ chỉ cần gọi hàm 2 lần (sử dụng biến tạm để lưu kết quả).



Hy vọng Code của bạn sẽ tăng tốc hơn một chút

dhn46.

Cảm ơn bạn dhn46 đã góp ý.

Ý kiến của bạn mình cũng làm đã làm theo và test thử, tuy nhiên cũng không tăng tốc được nhiều lắm.
Mong bạn và các tiền bối khác có giải pháp gì tốt hơn xin giúp đỡ.

Xin cảm ơn.
 
Upvote 0

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

Back
Top Bottom