Macro của tôi cập nhật một bảng tính lớn có số, nhưng nó chạy rất chậm vì excel đang hiển thị kết quả khi nó tính toán nó. Làm thế nào để dừng excel từ kết xuất đầu ra cho đến khi macro hoàn tất?Làm cách nào để ngăn Excel hiển thị bảng tính khi macro của tôi tính toán nó?
Trả lời
tôi sử dụng cả trong những giải pháp đề xuất:
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
...
...
...
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Bạn có thể tắt tính toán tự động trong hộp thoại tùy chọn, nó đặt nó để nó chỉ tính khi bạn nhấn F9.
Application.ScreenUpdating = False
Và tất nhiên đặt lại thành True khi bạn hoàn tất, ngay cả khi lỗi được tăng lên. Ví dụ:
Public Sub MyMacro
On Error GoTo ErrHandler
Application.ScreenUpdating = False
... do my stuff that might raise an error
Application.ScreenUpdating = True
Exit Sub
ErrHandler:
Application.ScreenUpdating = True
... Do something with the error, e.g. MsgBox
End Sub
Building khi Joe và Seer (này sử dụng cú pháp cũ vì vậy nó tương thích với VBA của Office 2000):
On Error Goto AfterCalculation
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
...
AfterCalculation:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Tôi cũng thích sử dụng cả hai giải pháp được đề xuất, mà còn giữ chế độ tính toán trước đó của người dùng.
Đối với ứng dụng đặc biệt này này có thể là không có vấn đề gì, nhưng nó thường là thực hành tốt nhất để cho những người sử dụng có các cài đặt của họ được phục hồi sau khi làm thủ thuật xong:
Application.ScreenUpdating = False
PreviousCalcMode = Application.Calculation
Application.Calculation = xlCalculationManual
...
...
...
Application.Calculation = PreviousCalcMode
Application.ScreenUpdating = True
NB. Nó cũng sẽ đáng giá thời gian của bạn để chèn một số lỗi xử lý mà bật Application.ScreenUpdating nên một lỗi xảy ra trong mã khác rực rỡ của bạn;) Nếu bộ nhớ phục vụ cho tôi đúng, Excel sẽ không hiển thị bất kỳ errormessages vv khi ScreenUpdating = false. Something như thế này:
Sub DoSomeThing
On Error Goto DisplayError
Application.ScreenUpdating = False
PreviousCalcMode = Application.Calculation
Application.Calculation = xlCalculationManual
...
...
...
Application.Calculation = PreviousCalcMode
Application.ScreenUpdating = True
Exit Sub
DisplayError:
Application.Calculation = PreviousCalcMode
Application.ScreenUpdating = True
MsgBox Err.Description
End 'This stops execution of macro, in some macros this might not be what you want'
'(i.e you might want to close files etc)'
End Sub
vĩ mô của tôi chỉ chạy khi tôi thực hiện nó vì vậy tôi tốt trong lĩnh vực này, nhưng tôi không muốn xem excel sao chép xung quanh dữ liệu (theo quy định của macro), chỉ kết quả cuối cùng – Oskar