Note: The other languages of the website are Google-translated. Back to English

Làm thế nào để gửi email nếu một ô nhất định được sửa đổi trong Excel?

Bài viết này nói về cách gửi email qua Outlook khi một ô trong một phạm vi nhất định được sửa đổi trong Excel.

Gửi email nếu ô trong một phạm vi nhất định được sửa đổi bằng mã VBA


Gửi email nếu ô trong một phạm vi nhất định được sửa đổi bằng mã VBA

Nếu bạn cần tự động tạo email mới với sổ làm việc đang hoạt động được đính kèm khi ô trong phạm vi A2: E11 được sửa đổi trong một trang tính nhất định, mã VBA sau có thể giúp bạn.

1. Trong trang tính mà bạn cần gửi email dựa trên ô đã sửa đổi của nó trong một phạm vi nhất định, hãy nhấp chuột phải vào tab trang tính và sau đó nhấp vào Mã Chế độ xem từ menu ngữ cảnh. Xem ảnh chụp màn hình:

2. Trong cửa sổ bật lên Microsoft Visual Basic cho các ứng dụng cửa sổ, vui lòng sao chép và dán mã VBA bên dưới vào cửa sổ Mã.

Mã VBA: Gửi email nếu ô trong một phạm vi cụ thể được sửa đổi trong Excel

Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 2017/9/12
    Dim xRgSel As Range
    Dim xOutApp As Object
    Dim xMailItem As Object
    Dim xMailBody As String
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set xRg = Range("A2:E11")
    Set xRgSel = Intersect(Target, xRg)
    ActiveWorkbook.Save
    If Not xRgSel Is Nothing Then
        Set xOutApp = CreateObject("Outlook.Application")
        Set xMailItem = xOutApp.CreateItem(0)
        xMailBody = "Cell(s) " & xRgSel.Address(False, False) & _
            " in the worksheet '" & Me.Name & "' were modified on " & _
            Format$(Now, "mm/dd/yyyy") & " at " & Format$(Now, "hh:mm:ss") & _
            " by " & Environ$("username") & "."

        With xMailItem
            .To = "Email Address"
            .Subject = "Worksheet modified in " & ThisWorkbook.FullName
            .Body = xMailBody
            .Attachments.Add (ThisWorkbook.FullName)
            .Display
        End With
        Set xRgSel = Nothing
        Set xOutApp = Nothing
        Set xMailItem = Nothing
    End If
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

Chú ý:

1). Trong mã, A2: E11 là phạm vi bạn sẽ gửi email dựa trên.
2). Vui lòng thay đổi nội dung email khi bạn cần xMailBody dòng trong mã.
3). Thay thế cái Email với địa chỉ email người nhận trong dòng .To = "Địa chỉ Email".
4). Thay đổi chủ đề email trong dòng .Subject = "Trang tính được sửa đổi trong" & ThisWorkbook.FullName.

3. Nhấn nút Khác + Q các phím đồng thời để đóng Microsoft Visual Basic cho các ứng dụng cửa sổ.

Từ bây giờ, bất kỳ ô nào trong phạm vi A2: E11 được sửa đổi, một email mới sẽ được tạo với sổ làm việc cập nhật được đính kèm. Và tất cả các trường được chỉ định như chủ đề, người nhận và nội dung email sẽ được liệt kê trong email. Vui lòng gửi email.

Chú thích: Mã VBA chỉ hoạt động nếu bạn đang sử dụng Outlook làm chương trình email của mình.


Các bài liên quan:


Các công cụ năng suất văn phòng tốt nhất

Kutools cho Excel giải quyết hầu hết các vấn đề của bạn và tăng 80% năng suất của bạn

  • Tái sử dụng: Chèn nhanh công thức phức tạp, biểu đồ và bất cứ thứ gì bạn đã sử dụng trước đây; Mã hóa ô với mật khẩu; Tạo danh sách gửi thư và gửi email ...
  • Thanh siêu công thức (dễ dàng chỉnh sửa nhiều dòng văn bản và công thức); Bố cục đọc (dễ dàng đọc và chỉnh sửa số lượng ô lớn); Dán vào Dải ô đã Lọchữu ích. Cảm ơn !
  • Hợp nhất các ô / hàng / cột mà không làm mất dữ liệu; Nội dung phân chia ô; Kết hợp các hàng / cột trùng lặp... Ngăn chặn các ô trùng lặp; So sánh các dãyhữu ích. Cảm ơn !
  • Chọn trùng lặp hoặc duy nhất Hàng; Chọn hàng trống (tất cả các ô đều trống); Tìm siêu và Tìm mờ trong Nhiều Sổ làm việc; Chọn ngẫu nhiên ...
  • Bản sao chính xác Nhiều ô mà không thay đổi tham chiếu công thức; Tự động tạo tài liệu tham khảo sang Nhiều Trang tính; Chèn Bullets, Hộp kiểm và hơn thế nữa ...
  • Trích xuất văn bản, Thêm Văn bản, Xóa theo Vị trí, Xóa không gian; Tạo và In Tổng số phân trang; Chuyển đổi giữa nội dung ô và nhận xéthữu ích. Cảm ơn !
  • Siêu lọc (lưu và áp dụng các lược đồ lọc cho các trang tính khác); Sắp xếp nâng cao theo tháng / tuần / ngày, tần suất và hơn thế nữa; Bộ lọc đặc biệt bằng cách in đậm, in nghiêng ...
  • Kết hợp Workbook và WorkSheets; Hợp nhất các bảng dựa trên các cột chính; Chia dữ liệu thành nhiều trang tính; Chuyển đổi hàng loạt xls, xlsx và PDFhữu ích. Cảm ơn !
  • Hơn 300 tính năng mạnh mẽ. Hỗ trợ Office / Excel 2007-2021 và 365. Hỗ trợ tất cả các ngôn ngữ. Dễ dàng triển khai trong doanh nghiệp hoặc tổ chức của bạn. Đầy đủ tính năng Dùng thử miễn phí 30 ngày. Bảo đảm hoàn lại tiền trong 60 ngày.
tab kte 201905

Tab Office mang lại giao diện Tab cho Office và giúp công việc của bạn trở nên dễ dàng hơn nhiều

  • Cho phép chỉnh sửa và đọc theo thẻ trong Word, Excel, PowerPoint, Publisher, Access, Visio và Project.
  • Mở và tạo nhiều tài liệu trong các tab mới của cùng một cửa sổ, thay vì trong các cửa sổ mới.
  • Tăng 50% năng suất của bạn và giảm hàng trăm cú nhấp chuột cho bạn mỗi ngày!
officetab dưới cùng
Nhận xét (37)
Chưa có xếp hạng. Hãy là người đầu tiên xếp hạng!
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Tôi bị mắc kẹt trong mã VB bên dưới. Tôi đang cố gắng gửi thông báo qua email cho người dùng về nơi dữ liệu đã bị thay đổi. Email đang hoạt động nhưng khi tôi thực hiện bất kỳ thay đổi nào, email sẽ được bắt đầu ngay lập tức nhưng tôi muốn email khi trang excel được lưu và đóng sau khi thực hiện tất cả các thay đổi đối với tất cả người dùng bị ảnh hưởng. Ngoài ra, điều này sẽ hoạt động cho bất kỳ trang tính nào trong toàn bộ sổ làm việc excel.

Hãy giúp tôi...

Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean)

'**** Khai báo các đối tượng và biến ******

Dim xRgSel As Range Dim xOutApp As Object Dim xMailItem As Object Dim xMailBody As String Dim mailTo As String

On Error Resume Next

Trang tính ("TargetSheet"). Phạm vi ("TargetRange"). Chọn

Application.ScreenUpdating = Sai Application.DisplayAlerts = Sai

'Đặt xRg = Range ("A" & Rows.Count) .End (xlUp) .Row

Đặt xRg = Range ("A2: DA1000")
Đặt xRgSel = Intersect (Target, xRg)


ActiveWorkbook.Save
'********** Mở ứng dụng Outlook ***********

Nếu không xRgSel thì không có gì

Đặt xOutApp = CreateObject ("Outlook.Application")
Đặt xMailItem = xOutApp.CreateItem (0)

xMailBody = "Cell (s)" & xRgSel.Address (Sai, Sai) & _
"in the worksheet '" & Me.Name & "' đã được sửa đổi trên" & _
Định dạng $ (Hiện tại, "mm / dd / yyyy") & "tại" & Định dạng $ (Hiện tại, "hh: mm: ss") & _
"bởi" & Environ $ ("tên người dùng") & "."
'*********** Tìm danh sách người nhận ************

If Cells (xRgSel.Row, "A"). Value = "Pankaj" Thì

mailTo = "pank12***@gmail.com"

Cuối Nếu

Nếu Ô (xRgSel.Row, "A"). Giá trị = "Nitin" Thì

mailTo = "pank****@gmail.com"

Cuối Nếu

If Cells (xRgSel.Row, "A"). Value = "Chandan" thì

mailTo = "pakxro**@gmail.com"

Cuối Nếu
'************* Soạn email *************

Với xMailItem

.To = mailTo
.Subject = "Trang tính được sửa đổi trong" & ThisWorkbook.FullName
.Body = xMailBody
'.Attachments.Add (ThisWorkbook.FullName)
.Trưng bày

Kết thúc với

Đặt xRgSel = Không có gì
Đặt xOutApp = Không có gì
Đặt xMailItem = Không có gì

Cuối Nếu

Ứng dụng.DisplayAlerts = Đúng
Application.ScreenUpdating = True
End Sub
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Pankaj Shukla thân mến,
Đăng câu hỏi Excel của bạn lên diễn đàn của chúng tôi: https://www.extendoffice.com/forum.html để nhận thêm hỗ trợ về Excel từ chuyên gia Excel của chúng tôi.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Tôi đã có thể tạo macro, tuy nhiên tôi đang gặp sự cố. Tôi muốn tự động gửi email khi một ô đạt đến một ngưỡng nhất định. Ô là một công thức. Khi tổng tính toán đi xuống dưới ngưỡng đã nói, nó không có tác dụng gì; tuy nhiên, nếu tôi nhập trực tiếp vào ô, nó sẽ xử lý macro theo kế hoạch. Công thức có làm rối macro không?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào Sissy Jones,
Phương pháp trong bài viết này: Làm thế nào để tự động gửi email dựa trên giá trị ô trong Excel?
https://www.extendoffice.com/documents/excel/4656-excel-send-email-based-on-cell-value.html có thể giúp bạn giải quyết vấn đề.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Thưa Sơ,


Tôi cần bạn giúp,



Tôi có một excel để theo dõi chi tiết công việc hàng ngày được thực hiện bởi nhân viên của chúng tôi từ hiện trường, vì vậy điều này có thể kích hoạt một thư từ trang tính excel nếu người đó không cập nhật dữ liệu trong trang tính excel đó vào thời gian nhất định.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chào,
Không thể giúp được điều này.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Nếu tôi muốn gửi giá trị ô thay vì địa chỉ..thì tôi phải thay đổi những gì trong mã?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chào,
Bạn có thể thử mã VBA bên dưới.

Private Sub Worksheet_Change (ByVal Target As Range)
Dim xRgSel theo phạm vi
Dim xOutApp làm đối tượng
Làm mờ xMailItem làm đối tượng
Dim xMailBody dưới dạng chuỗi
On Error Resume Next
Application.ScreenUpdating = Sai
Application.DisplayAlerts = Sai
Đặt xRg = Range ("A2: E11")
Đặt xRgSel = Intersect (Target, xRg)
ActiveWorkbook.Save
Nếu không xRgSel thì không có gì
Đặt xOutApp = CreateObject ("Outlook.Application")
Đặt xMailItem = xOutApp.CreateItem (0)
xMailBody = "Cell (s)" & xRgSel.Address (Sai, Sai) & _
xRgSel.Value & _
"in the worksheet '" & Me.Name & "' đã được sửa đổi trên" & _
Định dạng $ (Hiện tại, "mm / dd / yyyy") & "tại" & Định dạng $ (Hiện tại, "hh: mm: ss") & _
"bởi" & Environ $ ("tên người dùng") & "."

Với xMailItem
.To = "Địa chỉ Email"
.Subject = "Trang tính được sửa đổi trong" & ThisWorkbook.FullName
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Trưng bày
Kết thúc với
Đặt xRgSel = Không có gì
Đặt xOutApp = Không có gì
Đặt xMailItem = Không có gì
Cuối Nếu
Ứng dụng.DisplayAlerts = Đúng
Application.ScreenUpdating = True
End Sub
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Điều gì sẽ xảy ra nếu chúng ta chỉ muốn các nhận xét cập nhật trong ô đó chứ không phải toàn bộ giá trị ô. Nó sẽ chỉ hiển thị các nhận xét mới nhất được thêm vào ô
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Bạn có hình dung điều này?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Thông tin tuyệt vời.
Câu hỏi liên quan đến thông tin có thể được thêm vào email.
Sử dụng ví dụ của bạn ở trên ...

Nếu bạn có một giá trị trong F4, làm thế nào bạn sẽ bao gồm Giá trị F4 trong email được tạo khi D4 được sửa đổi ??
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
nếu sau đó tôi phải gửi toàn bộ hàng đó?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Tôi đã thử mã VBA ở trên: Gửi email nếu ô trong một phạm vi xác định được sửa đổi trong Excel. VBA này làm việc cho tôi ngoại trừ việc gửi email. Khi dữ liệu được sửa đổi trong phạm vi nhất định, một email sẽ tự động được tạo với các chi tiết ô đã sửa đổi. Tuy nhiên, email không tự động được gửi đến người nhận và người dùng phải nhấp vào nút gửi trong email. Những gì tôi đang tìm ở đây là, email phải tự động gửi đến người nhận khi nó được tạo. Vui lòng giúp tôi cung cấp mã cho việc này. Cảm ơn nhiều
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào Jimmy Joseph,
Vui lòng thay thế dòng ".Display" bằng ".Send". Hy vọng tôi có thể giúp đỡ. Cảm ơn đã bình luận.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chào; Có cách nào để thay đổi văn bản được hiển thị bằng cách sử dụng thông tin từ các ô khác (từ hàng đầu tiên và cột đầu tiên) không? Ví dụ: nếu tôi thay đổi ô K15, tôi muốn đưa thông tin tin nhắn vào ô A15 và K1? tôi nên thay đổi những gì trong mã? Cảm ơn rât nhiều
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
chào Laona. bạn có tìm ra cách có thể làm điều này?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào. Làm cách nào để sửa đổi mã để một e-mail được gửi đến một địa chỉ e-mail khác nếu một dải ô khác được chỉnh sửa?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Bất kỳ trợ giúp về yêu cầu này? Tôi đang gặp vấn đề tương tự. Tôi muốn thêm nhiều địa chỉ email trên mỗi hàng, nhưng khi tôi thay đổi một hàng, toàn bộ trang tính sẽ thay đổi. Làm cách nào để giới hạn các thay đổi chỉ trong một hàng?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chỉnh sửa linie:
1). Trong mã, A2: E11 là phạm vi bạn sẽ gửi email dựa trên.

3). Thay thế Địa chỉ Email bằng địa chỉ email người nhận trong dòng .To = "Địa chỉ Email".

Hoạt động tốt.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Bạn có thể vui lòng giải thích điều này thêm. Làm cách nào để bạn lặp lại mã để gửi đến một email khác dựa trên một dải ô khác đang được sửa đổi. Tôi đã thử sao chép và dán mã bên dưới và thay đổi theo nhận xét của bạn, nhưng dường như vẫn chỉ có phạm vi đầu tiên thực hiện lệnh và viết email.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Có ai có câu trả lời cho điều này?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào, tôi đang cố gắng gửi email trên trang tính của mình bằng cách sử dụng một giá trị đã thay đổi trên trang tính. Nếu trên cột H, trạng thái sẽ được thay đổi thành = "4", ID đơn hàng ở bên trái sẽ được gửi cho một người dùng. Trang tính hoạt động động nên tôi có Phạm vi từ D9: D140 nơi lưu trữ id đơn hàng và các thay đổi trạng thái được thực hiện trong cùng một phạm vi trên H9: H140. Làm cách nào để đạt được mục tiêu và gửi ID đơn đặt hàng cho khách hàng của tôi khi trạng thái đã được thay đổi thành = "4"?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Có thể hiển thị một ô tham chiếu khác trong xMailBody trong cùng một cột thay vì các ô bổ sung đã sửa đổi không ??
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào Sam, Ý của bạn là chọn ngẫu nhiên một ô tham chiếu trong cùng một cột của địa chỉ ô đã sửa đổi? Hay nhập thủ công ô tham chiếu trong dòng xMailBody của mã? Thật dễ dàng để nhập thủ công ô tham chiếu trong mã, chỉ cần đặt ô tham chiếu bằng dấu ngoặc kép như hình dưới đây: xMailBody = "Cell (s)" & "D3" & "," & "D8" & _

Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Có thể thay đổi điều này để nó chỉ hiển thị email nếu một ô trong phạm vi đã được thay đổi để nói "Có". Không muốn nó làm gì nếu nó là bất kỳ giá trị nào khác.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Cảm ơn bạn về mã, mã này hoạt động khi tôi nhập giá trị và nhấn enter. Nhưng trong trường hợp của tôi, ô đang tự động điền công thức và khi đạt đến giá trị, nó sẽ không mở email, vì vậy mã không hoạt động trong trường hợp này. Cảm ơn bạn trước!
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Chào hakana,
Mã VBA sau đây có thể giúp bạn giải quyết vấn đề. Hãy thử nó. Cảm ơn phản hôi của bạn.

Private Sub Worksheet_Change (ByVal Target As Range)
'Cập nhật Extendoffice 2022 / 04 / 15
Dim xRgSel theo phạm vi
Dim xOutApp làm đối tượng
Làm mờ xMailItem làm đối tượng
Dim xMailBody dưới dạng chuỗi
Dim xBoolean dưới dạng Boolean
Dim xItsRG Theo phạm vi
Làm mờ xDD theo phạm vi
Dim xDs theo phạm vi
On Error Resume Next
Application.ScreenUpdating = Sai
Application.DisplayAlerts = Sai
xBoolean = Sai
Đặt xRg = Range ("E2: E13")

Đặt xItsRG = Intersect (Target, xRg)
Đặt xDDs = Intersect (Target.DirectDependents, xRg)
Đặt xDs = Intersect (Target.Dependents, xRg)
Nếu không (xItsRG là không có gì) thì
Đặt xRgSel = xItsRG
xBoolean = Đúng
ElseIf Not (xDDs Is Nothing) Sau đó
Đặt xRgSel = xDDs
xBoolean = Đúng
ElseIf Not (xDs Is Nothing) Sau đó
Đặt xRgSel = xDs
xBoolean = Đúng
Cuối Nếu


ActiveWorkbook.Save
Nếu xBoolean Thì
Debug.Print xRgSel.Address


Đặt xOutApp = CreateObject ("Outlook.Application")
Đặt xMailItem = xOutApp.CreateItem (0)
xMailBody = "Cell (s)" & xRgSel.Address (Sai, Sai) & _
"in the worksheet '" & Me.Name & "' đã được sửa đổi trên" & _
Định dạng $ (Hiện tại, "mm / dd / yyyy") & "tại" & Định dạng $ (Hiện tại, "hh: mm: ss") & _
"bởi" & Environ $ ("tên người dùng") & "."

Với xMailItem
.To = "Địa chỉ Email"
.Subject = "Trang tính được sửa đổi trong" & ThisWorkbook.FullName
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Trưng bày
Kết thúc với
Đặt xRgSel = Không có gì
Đặt xOutApp = Không có gì
Đặt xMailItem = Không có gì
Cuối Nếu
Ứng dụng.DisplayAlerts = Đúng
Application.ScreenUpdating = True
End Sub
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào, tôi đã tạo một mã tương tự nhưng tôi muốn chấp nhận một điều kiện trong đó nếu một giá trị ô bị xóa sẽ không gửi được email khi nó được lưu / đóng. Nó sẽ chỉ gửi một email khi một giá trị ô đã được nhập. Bạn có biết làm thế nào để làm điều này? Đây là mã của tôi:

MÃ CHO EMAIL TỰ ĐỘNG CHO MỘT NGƯỜI KHI CẬP NHẬT EXCEL WORKBOOK

MÃ TỜ:

Tùy chọn Rõ ràng 'Phạm vi sự kiện thay đổi bảng tính Excel
Private Sub Worksheet_Change (ByVal Target As Range)
Nếu Không Giao nhau (Mục tiêu, Phạm vi ("C3: D62")) thì Không có gì
'Target.EntireRow.Interior.ColorIndex = 15
Phạm vi ("XFD1048576"). Giá trị = 15
Cuối Nếu
Nếu không giao nhau (Mục tiêu, Phạm vi ("I3: J21")) Thì không có gì
'Target.EntireRow.Interior.ColorIndex = 15
Phạm vi ("XFD1048576"). Giá trị = 15
Cuối Nếu
End Sub


MÃ SÁCH CÔNG VIỆC:

Private Sub Workbook_BeforeClose (Cancel As Boolean)
Nếu tôi.Đã lưu = Sai thì tôi.Lưu

Dim xOutApp làm đối tượng
Làm mờ xMailItem làm đối tượng
Dim xName dưới dạng chuỗi

Nếu Phạm vi ("XFD1048576"). Giá trị = 15 Thì
On Error Resume Next
Đặt xOutApp = CreateObject ("Outlook.Application")
Đặt xMailItem = xOutApp.CreateItem (0)
xName = ActiveWorkbook.FullName
Với xMailItem
.To = "email"
.CC = ""
.Subject = "tin nhắn"
.Body = "tin nhắn!"
.Tệp đính kèm. *** xName
.Trưng bày
'.gửi
Kết thúc với
Cuối Nếu
Đặt xMailItem = Không có gì
Đặt xOutApp = Không có gì



End Sub

Private Sub Workbook_Open ()
Phạm vi ("XFD1048576"). Rõ ràng
End Sub
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Hi All,

der Code würde gut für mein Vorhaben passen, aber gibt es die Möglichkeit, dass er eine E-Mail beim Speichern schreibt mit allen Zellen die geändert wurden? Vì vậy, wie es jetzt ist, würde er jede geänderte Zelle einzeln senden. Qua đời ist dann problematisch wenn zB 10 Zellen angepasst werden was 10 E-Mails bedeuten würde. Und gibt es die Möglichkeit, die gesamte geänderte Zelle bei mir von A bis Y in einer E-Mail zu senden? Bisher haut der ja die Zellnummer trong die E-Mail, wenn aber jemand anders Filtert wird er die Änderung nicht mehr finden.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào Esser123,
Các mã VBA sau đây có thể giúp bạn. Sau khi sửa đổi các ô trong phạm vi được chỉ định và lưu sổ làm việc, một email sẽ bật lên để liệt kê tất cả các ô đã sửa đổi trong nội dung email và sổ làm việc cũng sẽ được chèn dưới dạng tệp đính kèm trong email. Vui lòng làm theo các bước sau:
1. Mở trang tính có chứa các ô bạn muốn gửi email dựa trên đó, nhấp chuột phải vào tab trang tính và nhấp vào Mã Chế độ xem từ menu chuột phải. Sau đó sao chép đoạn mã sau vào cửa sổ trang tính (mã).
Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20220921
Dim xAddress As String
Dim xDRg, xRgSel, xRg As Range

xAddress = "A1:A8"
Set xDRg = Range(xAddress)
Set xRgSel = Intersect(Target, xDRg)
On Error GoTo Err1
If Not xRgSel Is Nothing Then
If ThisWorkbook.gChangeRange = "" Then
ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
Else
Set xRg = Range(ThisWorkbook.gChangeRange)
Set xRg = Application.Union(xRg, xRgSel)
ThisWorkbook.gChangeRange = xRg.AddressLocal(False, False, xlA1, True, False)
End If
End If
Exit Sub
Err1:
      ThisWorkbook.gChangeRange = xRgSel.AddressLocal(False, False, xlA1, True, False)
End Sub

2. Trong trình soạn thảo Visual Basic, nhấp đúp vào Sổ làm việc này trong ngăn bên trái, sau đó sao chép mã VBA sau vào ThisWorkbook (Code) cửa sổ.
Option Explicit
Public gChangeRange As String
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
'Updated by Extendoffice 20220921
Dim xRgSel, xRg As Range
Dim xOutApp As Object
Dim xMailItem As Object
Dim xMailBody As String
'On Error Resume Next
On Error GoTo Err1
Set xRg = Range(gChangeRange)
If Not xRg Is Nothing Then
   Set xOutApp = CreateObject("Outlook.Application")
        Set xMailItem = xOutApp.CreateItem(0)
        xMailBody = "Email Body: " & vbCrLf & "The following cells were modified:" & xRg.Address(False, False)
        With xMailItem
            .To = "Email Address"
            .Subject = "Worksheet modified in " & ThisWorkbook.FullName
            .Body = xMailBody
            .Attachments.Add (ThisWorkbook.FullName)
            .Display
        End With
        Set xRgSel = Nothing
        Set xOutApp = Nothing
        Set xMailItem = Nothing
End If
Err1:
gChangeRange = ""
End Sub
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Tôi cần một số trợ giúp để kích hoạt một email với một chút thay đổi. Thay vì giá trị số hoặc nhập thông tin vào ô theo cách thủ công, các ô trong cột B sẽ thay đổi thành 'Y' được kích hoạt từ một công thức trong các ô khác trong hàng đó. Công thức cho cột B là = IF ([@ [Số lượng trong kho]]> [@ [Mức sắp xếp lại]] ,, "Y"), cho thấy hàng tồn kho còn ít và cần đặt hàng lại. Tôi cần kích hoạt email tự động khi giá trị ô thay đổi trong cột B thành 'Y', vì vậy, tôi sẽ được thông báo tự động qua email về tình trạng hết hàng. Tôi đã thử mọi thứ tôi có thể nghĩ đến trong các mã sửa đổi đã được cung cấp, nhưng dường như không có gì hiệu quả với tôi ... xin vui lòng giúp đỡ!
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào Kathryn F,
Mã VBA sau đây có thể giúp bạn giải quyết vấn đề. Hãy thử một lần. Cảm ơn bình luận của bạn.
Dim xRg As Range
'Update by Extendoffice 20221019
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Cells.Count > 1 Then Exit Sub
Set xRg = Intersect(Range("B:B"), Target)
If xRg Is Nothing Then Exit Sub
If Target.Value = "Y" Then
Call Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp As Object
Dim xOutMail As Object
Dim xMailBody As String
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hi there" & vbNewLine & vbNewLine & _
"This is line 1" & vbNewLine & _
"This is line 2"
On Error Resume Next
With xOutMail
.To = "Email Address"
.CC = ""
.BCC = ""
.Subject = "send by cell value test"
.Body = xMailBody
.Display 'or use .Send
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
End Sub

Private Sub Worksheet_Calculate()
Dim xTarget As String
Dim xRg As Range
'Set xRg = Application.Range("B:B")
Set xRg = Intersect(Range("B:B"), Selection.EntireRow)
On Error GoTo Err01
If xRg.Value = "Y" Then
Call Mail_small_Text_Outlook
End If
Err01:
End Sub
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào và cảm ơn bạn đã hướng dẫn này.
J'ai cependant une khóé pour l'application de la plage de recherche.
Dans le code, j'ai demandé à vérifier la plage C2: C4.
Tout fonctionne bien si je modifie C2, C3 ou C4 uniquement. Cela fonctionne aussi si je modifie C2 + C3 + C4 ou C2 + C3 ou C3 + C4 mais cela ne fonctionne pas si j'ai un saut dans la plage. Par exemple, si je modifie C2 et C4 sans modifier C3.
Est-ce que quelqu'un pourrait m'aider pour m'indiquer où serouve mon erreur?
Merci d'avance.

Private Sub Worksheet_Change (ByVal Target As Range)
'Cập nhật Extendoffice 20220921
Dim xaddress dưới dạng chuỗi
Làm mờ xDRg, xRgSel, xRg As Range

xAddress = "C2: C4"
Đặt xDRg = Range (xAddress)
Đặt xRgSel = Intersect (Target, xDRg)
Về lỗi GoTo Err1
Nếu không xRgSel thì không có gì
If ThisWorkbook.gChangeRange = "" Thì
ThisWorkbook.gChangeRange = xRgSel.AddressLocal (Sai, Sai, xlA1, Đúng, Sai)
Khác
Đặt xRg = Range (ThisWorkbook.gChangeRange)
Đặt xRg = Application.Union (xRg, xRgSel)
ThisWorkbook.gChangeRange = xRg.AddressLocal (Sai, Sai, xlA1, Đúng, Sai)
Cuối Nếu
Cuối Nếu
Thoát Sub
Lỗi1:
ThisWorkbook.gChangeRange = xRgSel.AddressLocal (Sai, Sai, xlA1, Đúng, Sai)
End Sub


-----

Tùy chọn rõ ràng
Công khai gChangeRange As String
Private Sub Workbook_AfterSave (ByVal thành công khi Boolean)
'Cập nhật Extendoffice 20220921
Làm mờ xRgSel, xRg dưới dạng phạm vi
Dim xOutApp làm đối tượng
Làm mờ xMailItem làm đối tượng
Dim xMailBody dưới dạng chuỗi
'On Error Tiếp tục Tiếp theo
Về lỗi GoTo Err1
Đặt xRg = Range (gChangeRange)
Nếu không xRg thì không có gì
Đặt xOutApp = CreateObject ("Outlook.Application")
Đặt xMailItem = xOutApp.CreateItem (0)
xMailBody = "Cher Jean-Marie," & vbCrLf & vbCrLf & "Dans le fichier:" & ThisWorkbook.FullName & vbCrLf & "La plage de cellules a été modifiée:" & xRg.Address (Sai, Sai) & vbCrLf & vbCrLf & "Xin chào"
Với xMailItem
.To = "x.xxxxxx@xxxx.fr"
.Subject = "Données modifiées" & ThisWorkbook.Name
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Trưng bày
Kết thúc với
Đặt xRgSel = Không có gì
Đặt xOutApp = Không có gì
Đặt xMailItem = Không có gì
Cuối Nếu
Lỗi1:
gChangeRange = ""
End Sub
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Tôi muốn gửi email cho 5 người. Dấu phân cách nào được sử dụng giữa mỗi địa chỉ email?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Hi Joe,
Vui lòng sử dụng dấu chấm phẩy để phân tách các địa chỉ email.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Đây là một câu hỏi khác. Nếu một ô thay đổi, nó sẽ gửi một email. nếu 3 ô thay đổi, nó sẽ gửi 3 email. Làm thế nào để bạn dừng điều này để nó chỉ gửi 1 email khi các chỉnh sửa được thực hiện?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Hi Joe,
Giả sử bạn đã chỉ định phạm vi là "A2:E11" trong mã. Làm cách nào tôi có thể xác minh khi toàn bộ chỉnh sửa được thực hiện?
Không có bình luận nào được đăng ở đây
Để lại ý kiến ​​của bạn
Đăng với tư cách khách
×
Đánh giá bài viết này:
0   Nhân vật
Các vị trí được đề xuất

Kết nối với chúng tôi

Bản quyền © 2009 - www.extendoffice.com. | Đã đăng ký Bản quyền. cung cấp bởi ExtendOffice. | BẢN ĐỒ CHI NHÁNH
Microsoft và logo Office là các nhãn hiệu hoặc nhãn hiệu đã đăng ký của Microsoft Corporation tại Hoa Kỳ và / hoặc các quốc gia khác.
Được bảo vệ bởi Sectigo SSL