Mình có một hàm VBA thực hiện một công việc đó là lựa chọn vào các ô từ A1 đến D10000 và sau đó sẽ gán một giá trị nào đó cho ô, hàm có dạng như sau:
Sub Vidu1()
Dim sh As Worksheet
Set sh = ActiveSheet
For Each Rng In sh.Range("A1:D10000")
Rng.Select
Rng.Value = Rnd
Next
End Sub
Các bạn copy hàm về mở Excel lên nhấn tổ hợp phím Alt+ F11 rồi chọn Insert/Module sau đó paster đoạn code này vào và tạo một nút bấm ở excel thử chạy cái hàm này xem máy tính nó có chạy như thế nào nhé.
Tiếp theo giờ mình thử sửa đoạn code VBA trên thêm một số lệnh vào như sau:
Sub Vidu2()
Dim sh As Worksheet
Application.Interactive = False
Application.EnableEvents = False
Application.ScreenUpdating = False
Set sh = ActiveSheet
For Each Rng In sh.Range("A1:D10000")
Rng.Select
Rng.Value = Rnd
Next
Application.Interactive = True
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Làm tương tự rồi copy rồi paster một hàm mới sau đó tạo thêm mới 1 nút bấm rồi chạy thử hàm Vidu2 bạn sẽ thấy sự khác biệt khi gọi hàm Vidu2 tốc độ chạy VBA rất chi là nhanh, mượt.
Giải thích :
Hàm Vidu1 bạn bắt excel phải làm những công việc tốn thời gian mà lại ko có ích. Tại sao lại nói vậy vì khi bạn chạy vòng lặp For mỗi lần gọi lệnh select và gán giá trị thì excel sẽ tự động gọi sự kiện vẽ lại màn hình và điều đó là không cần thiết mình chỉ cần excel sau khi chạy xong hàm và gán giá trị đầy đủ là được. Để làm được việc này trong Hàm Vidu2 mình đã thêm lệnh Application.ScreenUpdating = False
mục đích là tắt chức năng vẽ lại màn hình và sau khi thực hiện xong các lệnh trong hàm thì mình mới báo cho excel là vẽ lại màn hình hiển thị cho ta xem kết quả thì lệnh Application.ScreenUpdating = True sẽ làm việc báo cho excel. Còn 2 hàm Application.Interactive,Application.EnableEvents nhằm mục đích khóa tác động của người dùng và sự kiện khi excel đang chạy hàm. Giả sử thời gian chạy hàm của chúng ta khi đang chạy mà trong Sheet đó có sự kiện ví dụ như là Worksheet_change thì chả nhẽ mỗi lần ta có lênh Rng.Value thì excel lại chạy sự kiện Worksheet_change như vậy sẽ khiến cho excel lại mất thời gian chạy vào hàm này tính toán. Vậy nếu chúng ta biết kết hợp những tính năng mà excel cung cấp sẽ giúp xây dựng nên một ứng dụng làm việc hiệu quả. Mình viết bài viết này giành cho các bạn nào mới học VBA nếu thấy hay các bạn có thể chia sẻ cho những người khác nhé.
Bài viết rất hữu ích.
Trả lờiXóaCảm ơn bạn
Rất thú vị
Trả lờiXóaMong chị chia sẻ nhiều hơn nữa!
Cảm ơn chị!
Xin cám ơn.Thông tin rất bổ ích
Trả lờiXóaBài viết rất hay
Trả lờiXóacảm ơn bài viết rất bổ ích
Trả lờiXóa