Đối tượng Application trong Excel VBA
Đối tượng Application trong Excel VBA là đối tượng đại diện cho phần mềm Excel của Microsoft trong ngôn ngữ lập trình VBA, các thiết lập liên quan đến phần mềm, cách tính toán, các chế độ tùy chọn đều có thể được thiết lập dựa trên các phương thức và thuộc tính của đối tượng Application này.
Trong khuôn khổ bài viết này, Thanh sẽ giới thiệu với các bạn những đoạn code VBA hay được sử dụng nhất liên quan đến đối tượng Application.
DisplayAlerts – cách ẩn thông báo khi dùng code VBA để xóa Sheet
Giả sử bạn muốn xóa Sheet ở trong Excel, hãy tưởng tượng xem, nếu bạn “nhỡ” chạy đoạn code VBA sau đây và phải bấm thông báo xác nhận xóa Sheets 10 lần? Làm thế nào để khắc phục được vấn đề này?
Sub test_xoa_sheet()
For i = 1 To 10
Sheets(i).Delete
Next i
End Sub
Đây là thông báo mà bạn cần bấm để xác nhận (10 lần):
Để không phải bấm thông báo này 10 lần như trong tình huống phía trên, bạn sẽ cần sử dụng tới một thuộc tính của đối tượng Application trong Excel đó là DisplayAlerts cách sử dụng sẽ như đoạn code sau đây:
Sub test_xoa_sheet()
Application.DisplayAlerts = False
For i = 1 To 10
Sheets(i).Delete
Next i
Application.DisplayAlerts = True
End Sub
Trong khi sử dụng vòng lặp để xóa các Sheets có vị trí từ 1 tới 10 thì chúng ta sẽ thiết lập thuộc tính DisplayAlert của đối tượng Application là False, sau khi xóa xong thì chúng ta nên trả lại giá trị cho thuộc tính này là True.
Thuộc tính Path của đối tượng Application
Thuộc tính Path của đối tượng Application được dùng để lấy đường dẫn tới thư mục chứa ứng dụng (Excel)
Sub test_path()
Debug.Print Application.Path
End Sub
' Kết quả trên hệ điều hành Windows:
' C:\Program Files\Microsoft Office\root\Office16
' Kết quả trên hệ điều hành MacOS:
' /Applications/Microsoft Excel.app
Như các bạn đã thấy, cùng một câu lệnh, nhưng nếu chúng ta chạy trên mỗi máy khác nhau, sẽ có kết quả khác nhau, các bạn để ý nếu các bạn muốn viết code VBA mà có thể chạy được cho cả hệ điều hành Windows, cả hệ điều hành MacOs thì chúng ta cần lưu ý tới đường dẫn, và đặc biệt là ký tự ngăn cách giữa các thư mục, bởi vì trên Windows, ký tự ngăn cách là dấu \
còn trên MacOs, thì ký tự ngăn cách là dấu /
điều này sẽ dẫn chúng ta đến phần tiếp theo khi nói về đường dẫn để mở File
Thuộc tính PathSeparator của đối tượng Application trong VBA Excel
Chúng ta có một đoạn code đơn giản như sau để mở một Workbook:
Sub test_path_separator()
Dim wb As Workbook
Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & "Book2.xlsx")
End Sub
Mục đích của chúng ta là mở một file Excel tên là “Book2.xlsx” trong cùng thư mục với Workbook đang chạy code VBA. Trong đoạn code trên, phần "\"
có thể gây ra lỗi bởi vì \
là ký tự ngăn cách đường dẫn trên Windows, còn trên MacOs, thì dùng ký tự /
. Vậy nên, để an toàn nhất, chúng ta sẽ sử dụng thuộc tính PathSeparator
và sẽ sửa lại đoạn code như sau:
Sub test_path_separator()
Dim wb As Workbook
Set wb = Workbooks.Open(ThisWorkbook.Path & Application.PathSeparator & "Book2.xlsx")
End Sub
ScreenUpdating – tăng tốc code VBA Excel đơn giản
Nếu code VBA của bạn thực hiện nhiều thao tác xử lý trên giao diện của Excel, ví dụ như lọc, sắp xếp, thì thuộc tính ScreenUpdating của đối tượng Application sẽ giúp bạn giảm thiểu thời gian thực thi code bằng cách tắt chế độ cập nhật màn hình khi code đang chạy. Tất nhiên sau khi chạy xong code VBA thì chúng ta cần bật lại chế độ này để những thay đổi như công thức, bộ lọc, Pivot Table, … có thể được cập nhật khi chúng ta tương tác. Cách sử dụng ScreenUpdating cũng rất đơn giản như sau để các bạn có thể hình dung và so sánh sự khác biệt:
Sub no_screen_updating()
For i = 1 To 10000
Sheets(1).Cells(i, 1) = i
Next i
MsgBox "Done"
End Sub
Sub with_screen_updating()
Application.ScreenUpdating = False
For i = 1 To 10000
Sheets(1).Cells(i, 1) = i
Next i
Application.ScreenUpdating = True
MsgBox "Done"
End Sub
Application.Wait – Hẹn giờ chạy code VBA
Có những thao tác chúng ta sẽ cần code VBA chạy chậm lại, hoặc chạy có “khoảng thời gian” nghĩ giữa các vòng lặp, ví dụ như là việc gửi email trong VBA chẳng hạn. Chúng ta có thể sử dụng Application.Wait để làm điều này, hãy tham khảo đoạn code sau đây, MsgBox sẽ hiện lên sau 3s kể từ khi chúng ta chạy Sub:
Sub test_wait()
Application.Wait Now + TimeValue("00:00:03")
MsgBox "Sau 3s code se chay"
End Sub
Ngoài ra, để thực thi code VBA vào một thời điểm cụ thể, bạn chỉ cần bỏ Now đi:
Sub test_wait()
Application.Wait TimeValue("00:00:03")
MsgBox "Code se chay vao luc 00:00:03"
End Sub
Trên đây là những thuộc tính của đối tượng Application trong lập trình VBA Excel thường hay được sử dụng nhất. Để biết thêm những ứng dụng của các thuộc tính này trong các trường hợp cụ thể như thế nào, bạn hãy tham khảo các khóa học VBA từ Thanh:
Khóa học VBA cơ bản:
Tự động hóa Excel với lập trình VBA cho người mới bắt đầu
Toàn bộ các khóa học lập trình VBA: