Không thể copy - paste dữ liệu do hàm Worksheet_DeActivate()

windwander

Yêu THVBA
Hiện em đang có 1 file excel quản lý kho. Có 1 trang trong file, có lẽ do được nhiều trang khác link tới để lấy dữ liệu bằng các hàm như vlookup, offset, index, match, do đó mọi thao tác trong trang vô cùng chậm, liên tục bị hiện trạng tháo "calculating (4 theards)". Mỗi thao tác gõ chữ, thêm dòng,...trong trang đều mất 5 - 10s.
Em cũng thử nhiều cách giới hạn dữ liệu, format, sửa hàm, name,...nhưng không ăn thua. Do đó em dùng sub Worksheet_Activate và Deactivate để tắt/bật chức năng tính tự động.
Private Sub Worksheet_Activate()
Application.Calculation = xlCalculationManual
End Sub
Tuy nhiên điều này hạn chế khả năng copy dữ liệu từ trang đó tới trang khác, bởi khi thoát khỏi trang, Sub Worksheet_Deactivate sẽ chạy làm mất phần dữ liệu vừa copy. Mọi sub copy dữ liệu trong trang này, kể cả khi copy bằng tay đều gặp lỗi khi paste.
Mình k muốn tắt tính năng CalculationAutomatic vì hạn chế nhiều tới người dùng.
Các bác cho hỏi:
- Em định dạng vùng dữ liệu, các hàm tính toàn trong vùng khoảng 5000 dòng, như vậy có quá lớn không? Vì thực tế 1 trang khác em định dạng tới 10000 dòng, các hàm toàn tính tổng toàn bộ cột nhưng không gây ảnh hưởng như vậy?
- Các hàm Offset, index, match, vlookup có tạo nên việc tính toán quá nặng không?
- Giải pháp nào để Copy - Paste dữ liệu từ trang trên?
Xin cảm ơn mọi người.
 

BKKBG

Yêu THVBA nhất
Em định dạng vùng dữ liệu, các hàm tính toàn trong vùng khoảng 5000 dòng, như vậy có quá lớn không? Vì thực tế 1 trang khác em định dạng tới 10000 dòng, các hàm toàn tính tổng toàn bộ cột nhưng không gây ảnh hưởng như vậy?
1000 dòng cũng là lớn. File excel sử dụng nhiều hàm, link từ nhiều file khác hoặc sheet khác cũng làm cho file thực thi chậm.
Các hàm Offset, index, match, vlookup có tạo nên việc tính toán quá nặng không?
Có tạo nên việc tính toán chậm.
Giải pháp nào để Copy
-Nếu form dữ liệu cố định, và công việc này tiến hành lặp đi lặp lại nhiều lần, thường xuyên-giải pháp tốt nhất là sử dụng access.
-Vì thao tác trên excel nhanh chóng và tiện lợi, nên mọi người thích dùng Excel. Tính toán trên file excel rồi paste value phần dữ liệu cần thiết ra file khác để báo cáo. Khi làm như vậy, công thức không còn, người xem báo cáo sẽ không hiểu được logic các phép tính toán, người báo cáo phải có giải thích đi kèm, và phải có bước kiểm tra lại dữ liêu trước khi mang đi báo cáo.
Thay cho thao tác bằng tay ở trên, nếu xây dựng được Tool để tạo ra file báo cáo thì tốt nhất.

input: file 1, file 2, file 3, .. file n
output: Dữ liệu báo cáo mong muốn

Như vậy sẽ không phải sử dụng công thức link từ file này tới file kia, từ sheet này tới sheet kia.

Vì ở trên bạn nói tới công việc quản lý kho, cho nên mình nghĩ form là cố định, mức độ dùng lặp đi lặp lại thường xuyên, giải pháp tối ưu mình nghĩ là ngừng sử dụng Excel, làm trên Access.
 

NhanSu

SMod
Thành viên BQT
Bạn thử đưa file lên để mọi người xem, có nhiều nguyên nhân dẫn đến file chậm. Một trong những nguyên nhân là sử dụng hàm volatile như offset, bạn nên thay offset bằng index.
 
Sửa lần cuối:
Top