Thẻ: đối tượng application

Đố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):

thong-bao-xac-nhan-xoa-sheets-vba

Để 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:

Tham khảo toàn bộ các khóa học lập trình VBA