Khắc phục thời gian chạy code VBA khác nhau giữa hai máy tính

Quảng cáo

sony18102012

Thành viên mới
Tham gia ngày
6 Tháng chín 2017
Bài viết
16
Được thích
1
Điểm
103
Tuổi
35
Xin chào các anh, chị
Hiện tại mình bị 1 vấn đề là dòng code Module LUUTT chạy giữa 2 máy có khoảng thời gian khác nhau, 1 PC thì rất chậm còn 1 PC thì ngược lại. Mong các anh chị xem khắc phục và điều chỉnh thêm có thể chạy nhanh hơn được không.
Cám ơn
 

File đính kèm

  • MAU.xlsm
    1.8 MB · Đọc: 17

VetMini

Chuyên gia GPE
Tham gia ngày
21 Tháng mười hai 2012
Bài viết
11,383
Được thích
14,219
Điểm
4,868
Hai máy tính đó có cùng cấu hình, cùng hệ điều hành, cùng phiên bản Office không bạn?
Nếu code đơn giản thì đâu cần giống nhau.
Code phải phức tạp lắm thì mới nảy sinh khác biệt như vậy.

Cần hỏi lại thớt các macro khác có bị tương tự?
 

sony18102012

Thành viên mới
Tham gia ngày
6 Tháng chín 2017
Bài viết
16
Được thích
1
Điểm
103
Tuổi
35
Hai máy tính đó có cùng cấu hình, cùng hệ điều hành, cùng phiên bản Office không bạn?
Mình xài máy cty nên mọi thứ đều đồng bộ.
Bài đã được tự động gộp:

Nếu code đơn giản thì đâu cần giống nhau.
Code phải phức tạp lắm thì mới nảy sinh khác biệt như vậy.

Cần hỏi lại thớt các macro khác có bị tương tự?
các macro khác đều chạy bình thường giữa các PC. Chỉ riêng mỗi cái này là bị chậm .
 
Lần chỉnh sửa cuối:

Maika8008

Thành viên tích cực
Tham gia ngày
12 Tháng sáu 2020
Bài viết
1,073
Được thích
889
Điểm
368
Xin chào các anh, chị
Hiện tại mình bị 1 vấn đề là dòng code Module LUUTT chạy giữa 2 máy có khoảng thời gian khác nhau, 1 PC thì rất chậm còn 1 PC thì ngược lại. Mong các anh chị xem khắc phục và điều chỉnh thêm có thể chạy nhanh hơn được không.
Cám ơn
Tôi thấy thế này:
1. Trong module đó có 2 Sub, muốn trình bày để người khác dễ dàng giúp được thì phải nói rõ là chạy Sub nào bị chậm: CopyTO hay INPICK? Đàng này bạn nói "dòng code Module LUUTT" là thứ gì: dòng nào của sub nào, hay là bất kỳ dòng nào?
2. Trong CopyTO có 2 dòng không liên quan gì đến vòng lặp For nhưng lại đặt trong đó, làm chậm thủ tục:
Set SourceRange = Sheets(" TO print").Range("B15:B15")
Set DestSheet = Sheets("Luu TT")
3. Vấn đề khả dĩ nhất dẫn đến làm chậm việc thực thi code có lẽ là do cái máy đó tính toán làm tươi kết quả bị chậm. Cách giải quyết như bài #6 đã chỉ ra hoặc ghi dữ liệu vào mảng rồi từ mảng ghi ra sheet.
 
Lần chỉnh sửa cuối:

Maika8008

Thành viên tích cực
Tham gia ngày
12 Tháng sáu 2020
Bài viết
1,073
Được thích
889
Điểm
368
Bạn tải file về chạy thử lần lượt 3 Sub CopyTO_Auto, CopyTO_Manual và CopyTO_Array trong Module LUUTT để xem sự khác biệt về thời gian thực hiện nhé!
Với máy của tôi, kết quả như sau:
- CopyTO_Auto (là code nguyên thủy của bạn): 4,02 giây.
- CopyTO_Manual (thêm lệnh như bài #6): 0,25 giây
- CopyTO_Array (Ghi vào mảng rồi chép ra sheet, không cần thêm lệnh Calculation...): 0,06 giây.
Có lẽ sub cuối cùng này sẽ giải quyết được vấn đề của bạn. (Có thể làm tương tự với sub INPICK)
 

File đính kèm

  • MAU_sony18102012.xlsm
    1.7 MB · Đọc: 4

sony18102012

Thành viên mới
Tham gia ngày
6 Tháng chín 2017
Bài viết
16
Được thích
1
Điểm
103
Tuổi
35
Đoạn code tắt .ScreenUpdating và .EnableEvents bạn thử thêm vào .Calculation = xlCalculationManual nhé. Đến cuối sub nhớ mở lại: .Calculation = xlCalculationAutomatic
cám ơn đã hướng dẫn.
Bài đã được tự động gộp:

Bạn tải file về chạy thử lần lượt 3 Sub CopyTO_Auto, CopyTO_Manual và CopyTO_Array trong Module LUUTT để xem sự khác biệt về thời gian thực hiện nhé!
Với máy của tôi, kết quả như sau:
- CopyTO_Auto (là code nguyên thủy của bạn): 4,02 giây.
- CopyTO_Manual (thêm lệnh như bài #6): 0,25 giây
- CopyTO_Array (Ghi vào mảng rồi chép ra sheet, không cần thêm lệnh Calculation...): 0,06 giây.
Có lẽ sub cuối cùng này sẽ giải quyết được vấn đề của bạn. (Có thể làm tương tự với sub INPICK)
Cám ơn bạn nhiều, đúng là sub cuối đã giải quyết được vấn đề.
Bài đã được tự động gộp:

Tôi thấy thế này:
1. Trong module đó có 2 Sub, muốn trình bày để người khác dễ dàng giúp được thì phải nói rõ là chạy Sub nào bị chậm: CopyTO hay INPICK? Đàng này bạn nói "dòng code Module LUUTT" là thứ gì: dòng nào của sub nào, hay là bất kỳ dòng nào?
2. Trong CopyTO có 2 dòng không liên quan gì đến vòng lặp For nhưng lại đặt trong đó, làm chậm thủ tục:
Set SourceRange = Sheets(" TO print").Range("B15:B15")
Set DestSheet = Sheets("Luu TT")
3. Vấn đề khả dĩ nhất dẫn đến làm chậm việc thực thi code có lẽ là do cái máy đó tính toán làm tươi kết quả bị chậm. Cách giải quyết như bài #6 đã chỉ ra hoặc ghi dữ liệu vào mảng rồi từ mảng ghi ra sheet.
Cám ơn bạn, lần sau mình cố sẽ gắng trình bày tốt hơn.
 

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia ngày
8 Tháng sáu 2006
Bài viết
12,168
Được thích
18,363
Điểm
5,168
Cũng không loại trừ việc người hỏi cố tình làm 'vậy' để nhận được câu trả lời & thấy rõ mọi ngóc ngách vấn đề.
 
Quảng cáo
Top Bottom