Menu

Tự động hóa việc gửi email thông báo khi có thay đổi trong file Excel bằng VBA

Tạ Chấn Uyển 07/06/2026 19:45 272 lượt xem 1 trả lời

Chào các bác, hôm nay em muốn chia sẻ một chút về cách tự động hóa việc gửi email thông báo khi có thay đổi trong file Excel. Tình huống là thế này, em có một file theo dõi tiến độ dự án, và em muốn tự động gửi email cho quản lý mỗi khi có một task nào đó được đánh dấu là hoàn thành. Thay vì phải ngồi kiểm tra thủ công rồi gửi email, em nghĩ đến việc dùng VBA để làm việc này.

Ý tưởng là em sẽ dùng một sự kiện trong VBA, cụ thể là Worksheet_Change. Sự kiện này sẽ kích hoạt mỗi khi có sự thay đổi trên một sheet nhất định. Trong sự kiện này, em sẽ kiểm tra xem có dòng nào vừa được đánh dấu hoàn thành hay không (ví dụ, cột trạng thái chuyển từ 'Đang làm' sang 'Hoàn thành').

Nếu phát hiện có sự thay đổi, em sẽ lấy thông tin của dòng đó (tên task, người phụ trách, ngày hoàn thành) và soạn một email. Để gửi email, em sẽ sử dụng đối tượng Outlook.Application. Nếu máy tính của các bác đã cài Outlook, cách này sẽ rất tiện.

Code cơ bản sẽ trông như thế này:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim outlookApp As Object
    Dim mailItem As Object
    Dim lastRow As Long
    Dim changedCell As Range

    ' Chỉ chạy khi thay đổi ở cột trạng thái (ví dụ cột D)
    If Not Intersect(Target, Range("D:D")) Is Nothing Then
        For Each changedCell In Target
            If changedCell.Value = "Hoàn thành" Then
                lastRow = changedCell.Row
                ' Lấy thông tin từ các cột khác (ví dụ A, B, C)
                Dim taskName As String
                taskName = Cells(lastRow, "A").Value
                Dim assignedTo As String
                assignedTo = Cells(lastRow, "B").Value
                Dim completionDate As String
                completionDate = Cells(lastRow, "C").Value

                On Error Resume Next ' Bỏ qua lỗi nếu Outlook chưa mở
                Set outlookApp = GetObject(, "Outlook.Application")
                If outlookApp Is Nothing Then
                    Set outlookApp = CreateObject("Outlook.Application")
                End If
                On Error GoTo 0

                Set mailItem = outlookApp.CreateItem(0) ' 0 = olMailItem

                With mailItem
                    .To = "quanly@example.com"
                    .Subject = "Thông báo: Task '
                
3

Tuyệt vời! Ý tưởng tự động hóa gửi email này rất hữu ích cho việc quản lý dự án.

Mình cũng từng làm qua một dự án tương tự, dùng Worksheet_Change để theo dõi sự thay đổi trên một cột trạng thái. Tuy nhiên, mình có thêm một bước kiểm tra xem sự thay đổi đó có phải là "Hoàn thành" hay không, và chỉ gửi email khi thỏa mãn điều kiện đó.

Bạn có thể chia sẻ chi tiết hơn về cách bạn xác định "thay đổi" và làm sao để gửi email được không? Mình tò mò muốn xem cách bạn triển khai nó.

1

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký