Không thể copy paste dữ liệu do sub Worksheet_DeActivate()

Liên hệ QC

anhduc.94

Thành viên mới
Tham gia
27/7/14
Bài viết
6
Được thích
0
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.
 
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.
Góp ý cho bạn:
1/ Để Code thực hiện công việc được nhanh thì đầu code làm nhiệm vụ người ta tắt tính toán tự động, khi chạy code xong người ta mở lại, như đoạn code sau:
Mã:
Application.Calculation = xlCalculationManual

'Code thực hiện công việc ở đây.'

Application.Calculation = xlCalculationAutomatic

2/ Đừng bao giờ bắt người khác sửa code của mình khi nó đã không đáp ứng được yêu cầu.

3/ Nên đính kèm File để người giúp xem và có hiểu thì mới đưa ra giải pháp khác tốt hơn.
 
Upvote 0
Góp ý cho bạn:
1/ Để Code thực hiện công việc được nhanh thì đầu code làm nhiệm vụ người ta tắt tính toán tự động, khi chạy code xong người ta mở lại, như đoạn code sau:
Mã:
Application.Calculation = xlCalculationManual

'Code thực hiện công việc ở đây.'

Application.Calculation = xlCalculationAutomatic

2/ Đừng bao giờ bắt người khác sửa code của mình khi nó đã không đáp ứng được yêu cầu.

3/ Nên đính kèm File để người giúp xem và có hiểu thì mới đưa ra giải pháp khác tốt hơn.
Cảm ơn bạn. Câu hỏi của mình không đề cập tới sửa code, code cũng chạy nhanh. Việc tắt bật calculation đầu cuối Sub giúp ích gì trong vấn đề này.
 
Upvote 0
Cảm ơn bạn. Câu hỏi của mình không đề cập tới sửa code, code cũng chạy nhanh. Việc tắt bật calculation đầu cuối Sub giúp ích gì trong vấn đề này.
Bài 1 bạn nêu có sử dụng hàm như "vlookup, offset, index, match", nhất là trong File có sử dụng hàm mảng khi sửa đổi cái gì đó thì Excel sẽ tự động tính toán trở lại sẽ làm cho File ì ạch.
Vì vậy, để tăng tốc code chạy thì ta tắt mọi việc tính toán của Excel, sau khi chạy code xong thì mở tính toán trở lại. Việc này sẽ làm tăng tốc độ của code lên rất nhiều (nếu trong File có dữ liệu lớn).
 
Upvote 0
...
- Các hàm Offset, index, match, vlookup có tạo nên việc tính toán quá nặng không?
Hàm Index, Match, Vlookup làm việc trên mảng dữ liệu. Nếu mảng lớn thì đương nhiên ảnh hưởng đến tốc độ của chúng.
Hàm Offset là hàm tệ nhất. Nó là hàm volatile. Đặc tính của hàm volatile là một chút động đậy của sheet là nó tính lại, không cần biết có liên quan hay không. Từ volatile trong Excel có thể tạm dịch là "nhạy cảm". Dùng nhiều thì chắc chắn là trì trệ bảng tính.
 
Upvote 0
Web KT

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

Back
Top Bottom