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

كيفية إرسال بريد إلكتروني إذا تم تعديل خلية معينة في Excel؟

تتحدث هذه المقالة عن إرسال بريد إلكتروني عبر Outlook عند تعديل خلية في نطاق معين في Excel.

أرسل بريدًا إلكترونيًا إذا تم تعديل خلية في نطاق معين برمز VBA


أرسل بريدًا إلكترونيًا إذا تم تعديل خلية في نطاق معين برمز VBA

إذا كنت بحاجة إلى إنشاء بريد إلكتروني جديد تلقائيًا مع إرفاق المصنف النشط عند تعديل خلية في النطاق A2: E11 في ورقة عمل معينة ، يمكن أن يساعدك رمز VBA التالي.

1. في ورقة العمل التي تحتاج إلى إرسال بريد إلكتروني بناءً على خليتها المعدلة في نطاق معين ، انقر بزر الماوس الأيمن فوق علامة تبويب الورقة ثم انقر فوق عرض الرمز من قائمة السياق. انظر لقطة الشاشة:

2. في ظهرت ميكروسوفت فيسوال باسيك للتطبيقات نافذة ، يرجى نسخ ولصق رمز VBA أدناه في نافذة التعليمات البرمجية.

رمز فبا: أرسل بريدًا إلكترونيًا إذا تم تعديل خلية في نطاق محدد في 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

ملاحظة:

1). في الكود ، A2: E11 هو النطاق الذي سترسل إليه البريد الإلكتروني بناءً على.
2). يرجى تغيير نص البريد الإلكتروني كما تريد xMailBody سطر في الكود.
3). استبدال عنوان البريد الإلكتروني مع عنوان البريد الإلكتروني للمستلم في السطر .To = "عنوان البريد الإلكتروني".
4). تغيير موضوع البريد الإلكتروني في السطر .Subject = "تم تعديل ورقة العمل في" & ThisWorkbook.FullName.

3. اضغط على قديم + Q مفاتيح في نفس الوقت لإغلاق ميكروسوفت فيسوال باسيك للتطبيقات نافذة.

من الآن فصاعدًا ، يتم تعديل أي خلية في النطاق A2: E11 ، وسيتم إنشاء بريد إلكتروني جديد مع إرفاق المصنف المحدث. وسيتم سرد جميع الحقول المحددة مثل الموضوع والمستلم ونص البريد الإلكتروني في البريد الإلكتروني. الرجاء إرسال البريد الإلكتروني.

ملاحظة: يعمل رمز VBA فقط إذا كنت تستخدم Outlook كبرنامج بريد إلكتروني.


مقالات ذات صلة:


أفضل أدوات إنتاجية المكتب

Kutools for Excel يحل معظم مشاكلك ويزيد إنتاجيتك بنسبة 80٪

  • إعادة استخدام: أدخل بسرعة الصيغ المعقدة والرسوم البيانية وأي شيء استخدمته من قبل ؛ تشفير الخلايا مع كلمة السر إنشاء قائمة بريدية وإرسال رسائل البريد الإلكتروني ...
  • سوبر فورميولا بار (بسهولة تحرير أسطر متعددة من النص والصيغة) ؛ تخطيط القراءة (قراءة وتحرير أعداد كبيرة من الخلايا بسهولة) ؛ لصق في النطاق المصفى
  • دمج الخلايا / الصفوف / الأعمدة دون فقدان البيانات ؛ تقسيم محتوى الخلايا ؛ ادمج الصفوف / الأعمدة المكررة... منع تكرار الخلايا؛ قارن النطاقات
  • حدد مكرر أو فريد صفوف حدد صفوف فارغة (جميع الخلايا فارغة) ؛ البحث الفائق والبحث الغامض في العديد من المصنفات. تحديد عشوائي ...
  • نسخة طبق الأصل خلايا متعددة بدون تغيير مرجع الصيغة ؛ إنشاء المراجع تلقائيًا إلى أوراق متعددة أدخل الرموز النقطية، مربعات الاختيار والمزيد ...
  • استخراج النص، إضافة نص ، إزالة حسب الموضع ، إزالة الفضاء؛ إنشاء وطباعة المجاميع الفرعية لترحيل الصفحات ؛ التحويل بين محتوى الخلايا والتعليقات
  • سوبر تصفية (حفظ وتطبيق مخططات التصفية على أوراق أخرى) ؛ فرز متقدم حسب الشهر / الأسبوع / اليوم ، التكرار والمزيد ؛ مرشح خاص بواسطة bold، italic ...
  • اجمع بين المصنفات وأوراق العمل؛ دمج الجداول على أساس الأعمدة الرئيسية ؛ تقسيم البيانات إلى أوراق متعددة; تحويل دفعة xls و xlsx و PDF
  • أكثر من 300 ميزة قوية. يدعم Office / Excel 2007-2021 و 365. يدعم جميع اللغات. سهولة النشر في مؤسستك أو مؤسستك. الميزات الكاملة نسخة تجريبية مجانية لمدة 30 يومًا. ضمان استرداد الأموال لمدة 60 يومًا.
علامة تبويب kte 201905

يجلب Office Tab الواجهة المبوبة إلى Office ، ويجعل عملك أسهل بكثير

  • تمكين التحرير والقراءة المبوبة في Word و Excel و PowerPointوالناشر والوصول و Visio والمشروع.
  • فتح وإنشاء مستندات متعددة في علامات تبويب جديدة من نفس النافذة ، بدلاً من النوافذ الجديدة.
  • يزيد من إنتاجيتك بنسبة 50٪ ، ويقلل مئات النقرات بالماوس كل يوم!
أوفيسيتاب القاع
فرز التعليقات حسب
التعليقات (37)
لا يوجد تقييم. كن أول من يقيم!
تم تصغير هذا التعليق بواسطة المشرف على الموقع
أنا عالق في رمز VB أدناه. أحاول إرسال إشعار بالبريد الإلكتروني إلى المستخدم حيث تم تغيير البيانات. يعمل البريد الإلكتروني ولكن عندما أقوم بإجراء أي بريد إلكتروني للتغيير في وقت واحد ولكني أريد إرسال بريد إلكتروني عندما يتم حفظ ورقة Excel وإغلاقها بعد إجراء جميع التغييرات لجميع المستخدمين المتأثرين. يجب أن يعمل هذا أيضًا مع أي من الأوراق في مصنف Excel بأكمله.

الرجاء المساعدة ...

Private Sub Workbook_BeforeSave (ByVal SaveAsUI كـ Boolean ، إلغاء كـ Boolean)

**** إعلان الأشياء والمتغيرات ******

Dim xRgSel كنطاق Dim xOutApp ككائن Dim xMailItem كعنصر Dim xMailBody مثل String Dim mailTo As String

على خطأ استئناف التالي

أوراق ("TargetSheet"). النطاق ("TargetRange"). حدد

Application.ScreenUpdating = False Application.DisplayAlerts = False

'Set xRg = Range ("A" & Rows.Count). End (xlUp) .Row

تعيين xRg = Range ("A2: DA1000")
تعيين xRgSel = تقاطع (الهدف ، xRg)


ActiveWorkbook. حفظ
********** افتتاح تطبيق Outlook ***********

إذا لم يكن xRgSel لا شيء إذن

تعيين xOutApp = CreateObject ("Outlook.Application")
قم بتعيين xMailItem = xOutApp.CreateItem (0)

xMailBody = "خلية (خلايا)" & xRgSel.Address (خطأ ، خطأ) & _
"في ورقة العمل '" تم تعديل & Me.Name & "' في" & _
تنسيق $ (الآن ، "mm / dd / yyyy") & "at" & Format $ (الآن ، "hh: mm: ss") & _
"بواسطة" & Environ $ ("اسم المستخدم") & "."
'*********** البحث عن قائمة المستلمين ************

إذا كانت الخلايا (xRgSel.Row، "A"). القيمة = "Pankaj" ثم

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

إنهاء حالة

إذا كانت الخلايا (xRgSel.Row، "A"). القيمة = "Nitin" ثم

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

إنهاء حالة

إذا كانت الخلايا (xRgSel.Row، "A"). القيمة = "Chandan" ثم

mailTo = "pakxro**@gmail.com"

إنهاء حالة
'************* تأليف البريد الإلكتروني *************

مع xMailItem

.To = mailTo
.Subject = "تم تعديل ورقة العمل في" & ThisWorkbook.FullName
. الجسم = xMailBody
'. المرفقات.إضافة (ThisWorkbook.FullName)
.عرض

انتهت ب

تعيين xRgSel = لا شيء
تعيين xOutApp = لا شيء
تعيين xMailItem = لا شيء

إنهاء حالة

Application.DisplayAlerts = صحيح
Application.ScreenUpdating = ترو
نهاية الفرعية
تم تصغير هذا التعليق بواسطة المشرف على الموقع
عزيزي بانكاج شوكلا ،
انشر سؤال Excel الخاص بك في منتدانا: https://www.extendoffice.com/forum.html للحصول على المزيد من الدعم حول Excel من محترف Excel لدينا.
تم تصغير هذا التعليق بواسطة المشرف على الموقع
تمكنت من إنشاء الماكرو ، ولكن لدي مشكلة. أرغب في إرسال بريد إلكتروني تلقائيًا عندما تصل الخلية إلى حد معين. الخلية عبارة عن صيغة. عندما يقل مجموع الحساب عن الحد المذكور ، فإنه لا يفعل شيئًا ؛ ومع ذلك ، إذا قمت بالكتابة مباشرة في الخلية ، فستقوم بمعالجة الماكرو كما هو مخطط. هل الصيغة خبطت الماكرو؟
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبًا سيسي جونز ،
الطريقة في هذه المقالة: كيفية إرسال بريد إلكتروني تلقائيًا بناءً على قيمة الخلية في Excel؟
https://www.extendoffice.com/documents/excel/4656-excel-send-email-based-on-cell-value.html قد تساعدك في حل المشكلة.
تم تصغير هذا التعليق بواسطة المشرف على الموقع
عزيزي المسؤول،


انا بحاجة الى مساعدتكم،



لديّ تفوق لمراقبة العمل اليومي الذي يقوم به عاملنا من الميدان ، فهل هذا ممكن لتشغيل بريد من ورقة إكسل إذا فشل هذا الرجل في تحديث البيانات الموجودة في ورقة التفوق هذه في وقت معين.
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبا،
لا يمكن أن تساعد في هذا.
تم تصغير هذا التعليق بواسطة المشرف على الموقع
إذا كنت أرغب في إرسال قيمة الخلية بدلاً من العنوان .. فما الذي يجب علي تغييره في الرمز؟
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبا،
يمكنك تجربة كود فبا أدناه.

ورقة عمل فرعية خاصة تغيير (هدف ByVal كنطاق)
خافت xRgSel كمجموعة
خافت xOutApp ككائن
خافت xMailItem ككائن
خافت xMailBody كسلسلة
على خطأ استئناف التالي
Application.ScreenUpdating = خطأ
Application.DisplayAlerts = خطأ
تعيين xRg = Range ("A2: E11")
تعيين xRgSel = تقاطع (الهدف ، xRg)
ActiveWorkbook. حفظ
إذا لم يكن xRgSel لا شيء إذن
تعيين xOutApp = CreateObject ("Outlook.Application")
قم بتعيين xMailItem = xOutApp.CreateItem (0)
xMailBody = "خلية (خلايا)" & xRgSel.Address (خطأ ، خطأ) & _
xRgSel.Value & _
"في ورقة العمل '" تم تعديل & Me.Name & "' في" & _
تنسيق $ (الآن ، "mm / dd / yyyy") & "at" & Format $ (الآن ، "hh: mm: ss") & _
"بواسطة" & Environ $ ("اسم المستخدم") & "."

مع xMailItem
.To = "عنوان البريد الإلكتروني"
.Subject = "تم تعديل ورقة العمل في" & ThisWorkbook.FullName
. الجسم = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.عرض
انتهت ب
تعيين xRgSel = لا شيء
تعيين xOutApp = لا شيء
تعيين xMailItem = لا شيء
إنهاء حالة
Application.DisplayAlerts = صحيح
Application.ScreenUpdating = ترو
نهاية الفرعية
تم تصغير هذا التعليق بواسطة المشرف على الموقع
ماذا لو كنا نريد فقط التعليقات المحدثة في تلك الخلية وليس قيمة الخلية بأكملها ، يجب أن تظهر فقط أحدث التعليقات المضافة في الخلية
تم تصغير هذا التعليق بواسطة المشرف على الموقع
هل هذا الرقم؟
تم تصغير هذا التعليق بواسطة المشرف على الموقع
معلومات عظيمة.
سؤال بخصوص المعلومات التي يمكن إضافتها إلى البريد الإلكتروني.
باستخدام المثال أعلاه ....

إذا كانت لديك قيمة في F4 ، فكيف يمكنك تضمين قيمة F4 في البريد الإلكتروني الذي تم إنشاؤه عند تعديل D4 ؟؟
تم تصغير هذا التعليق بواسطة المشرف على الموقع
إذا كان لا بد لي من إرسال هذا الصف بأكمله بعد ذلك؟
تم تصغير هذا التعليق بواسطة المشرف على الموقع
لقد حاولت أعلاه رمز VBA: أرسل بريدًا إلكترونيًا إذا تم تعديل خلية في نطاق محدد في Excel. يعمل VBA هذا بالنسبة لي باستثناء إرسال البريد الإلكتروني. عندما يتم تعديل البيانات في النطاق المحدد ، يتم إنشاء بريد إلكتروني تلقائيًا بتفاصيل الخلية المعدلة. ومع ذلك ، لا يتم إرسال البريد الإلكتروني تلقائيًا إلى المستلم ويجب على المستخدم النقر فوق زر إرسال في البريد الإلكتروني. ما أبحث عنه هنا هو أن البريد الإلكتروني يجب أن يرسل إلى المستلمين تلقائيًا عند إنشائه. الرجاء مساعدتي في توفير رمز لهذا. شكرا جزيلا
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبًا جيمي جوزيف ،
يرجى استبدال السطر ". العرض" ب ". إرسال". آمل أن أتمكن من المساعدة. شكرا على التعليق.
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبا؛ هل هناك طريقة لتغيير النص المعروض باستخدام معلومات من خلايا أخرى (من الصف الأول والعمود الأول)؟ على سبيل المثال ، إذا قمت بتغيير الخلية K15 ، فأنا أرغب في تضمين معلومات الرسالة في الخلايا A15 و K1؟ ما الذي يجب علي تغييره في الكود؟ شكرا جزيلا
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبا لاونا. هل تكتشف كيف تفعل هذا؟
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبًا. كيف أقوم بتعديل الرمز بحيث يتم إرسال بريد إلكتروني إلى عنوان بريد إلكتروني آخر إذا تم تحرير نطاق آخر من الخلايا؟
تم تصغير هذا التعليق بواسطة المشرف على الموقع
أي مساعدة في هذا الطلب؟ أواجه نفس القضية. أرغب في إضافة عدة عناوين بريد إلكتروني لكل صف ، ولكن عندما أقوم بتغيير صف واحد ، تتغير ورقة العمل بأكملها. كيف يمكنني قصر التغييرات على صف واحد فقط؟
تم تصغير هذا التعليق بواسطة المشرف على الموقع
تحرير الخط:
1). في الكود ، A2: E11 هو النطاق الذي سترسل البريد الإلكتروني بناءً عليه.
و
3). استبدل عنوان البريد الإلكتروني بعنوان البريد الإلكتروني للمستلم في السطر. إلى = "عنوان البريد الإلكتروني".

يعمل بشكل جيد.
تم تصغير هذا التعليق بواسطة المشرف على الموقع
هل يمكنك شرح هذا أكثر من فضلك. كيف تكرر الرمز لإرساله إلى بريد إلكتروني مختلف بناءً على نطاق آخر يتم تعديله. لقد حاولت نسخ ولصق الكود أدناه والتغيير وفقًا لتعليقك ، ولكن لا يزال يبدو أن النطاق الأول فقط ينفذ الأمر ويكتب البريد الإلكتروني.
تم تصغير هذا التعليق بواسطة المشرف على الموقع
هل لديها الجواب على هذا؟
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبًا ، كنت أحاول إرسال رسائل بريد إلكتروني على الورقة الخاصة بي باستخدام قيمة واحدة تم تغييرها على الورقة. إذا تم تغيير الحالة في العمود H إلى = "4" ، فيجب إرسال معرف الطلب الموجود على اليسار إلى مستخدم واحد. تعمل الورقة بشكل ديناميكي بحيث يكون لدي نطاق من D9: D140 حيث يتم تخزين معرّف الطلب ويتم إجراء تغييرات الحالة في نفس النطاق على H9: H140. كيف يمكنني الوصول إلى الهدف المتمثل في القيام بذلك وإرسال معرّف الطلب إلى العميل عندما تم تغيير الحالة إلى = "4"؟
تم تصغير هذا التعليق بواسطة المشرف على الموقع
هل سيكون من الممكن عرض خلية مرجعية مختلفة في xMailBody في نفس العمود بدلاً من عناصر الخلية المعدلة ؟؟
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبًا Sam ، هل تقصد تحديد خلية مرجعية عشوائيًا في نفس العمود لعنوان الخلية المعدل؟ أو اكتب يدويًا خلية مرجعية في سطر xMailBody من التعليمات البرمجية؟ من السهل كتابة خلية مرجعية يدويًا في الرمز ، فقط قم بإرفاق الخلية المرجعية بعلامات اقتباس مزدوجة كما هو موضح أدناه: xMailBody = "خلية (خلايا)" & "D3" & "،" & "D8" & _

تم تصغير هذا التعليق بواسطة المشرف على الموقع
هل من الممكن تغيير هذا بحيث لا يعرض البريد الإلكتروني إلا إذا تم تغيير خلية في النطاق لتقول "نعم". أود ألا تفعل شيئًا إذا كانت أي قيمة أخرى.
تم تصغير هذا التعليق بواسطة المشرف على الموقع
شكرًا لك على الرمز ، يعمل هذا الرمز عندما أدخل القيمة وأضغط على Enter. ولكن في حالتي ، تمتلئ الخلية تلقائيًا بالصيغة ، وعندما يتم الوصول إلى القيمة ، لا تفتح البريد الإلكتروني ، لذا لا يعمل الرمز في هذه الحالة. شكرا لكم مقدما!
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبا هكانا ،
يمكن أن تساعدك التعليمات البرمجية VBA التالية في حل المشكلة. يرجى محاولة إعطائها. شكرا لك على ملاحظاتك.

تغيير ورقة العمل الفرعية الخاصة (الهدف ByVal كنطاق)
'تم التحديث بواسطة Extendoffice 2022 / 04 / 15
خافت xRgSel كمجموعة
خافت xOutApp ككائن
خافت xMailItem ككائن
خافت xMailBody كسلسلة
Dim xBoolean As Boolean. خافت x منطقي
خافت xItsRG كمجموعة
أبعاد xDDs كنطاق
xDs خافت كمجموعة
على خطأ استئناف التالي
Application.ScreenUpdating = خطأ
Application.DisplayAlerts = خطأ
xBoolean = خطأ
تعيين xRg = Range ("E2: E13")

تعيين xItsRG = تقاطع (الهدف ، xRg)
قم بتعيين xDDs = Intersect (Target.DirectDependents، xRg)
قم بتعيين xDs = Intersect (Target.Dependents، xRg)
إذا لم يكن (xItsRG لا شيء) إذن
قم بتعيين xRgSel = xItsRG
xBoolean = صحيح
إلا إذا لم يكن (xDDs لا شيء) إذن
قم بتعيين xRgSel = xDDs
xBoolean = صحيح
إلا إذا لم يكن (xDs لا شيء) إذن
تعيين xRgSel = xDs
xBoolean = صحيح
إنهاء حالة


ActiveWorkbook. حفظ
إذا xBoolean ثم
Debug.Print xRgSel.Address


تعيين xOutApp = CreateObject ("Outlook.Application")
قم بتعيين xMailItem = xOutApp.CreateItem (0)
xMailBody = "خلية (خلايا)" & xRgSel.Address (خطأ ، خطأ) & _
"في ورقة العمل '" تم تعديل & Me.Name & "' في" & _
تنسيق $ (الآن ، "mm / dd / yyyy") & "at" & Format $ (الآن ، "hh: mm: ss") & _
"بواسطة" & Environ $ ("اسم المستخدم") & "."

مع xMailItem
.To = "عنوان البريد الإلكتروني"
.Subject = "تم تعديل ورقة العمل في" & ThisWorkbook.FullName
. الجسم = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.عرض
انتهت ب
تعيين xRgSel = لا شيء
تعيين xOutApp = لا شيء
تعيين xMailItem = لا شيء
إنهاء حالة
Application.DisplayAlerts = صحيح
Application.ScreenUpdating = ترو
نهاية الفرعية
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبًا ، لقد أنشأت رمزًا مشابهًا ولكني أرغب في *** حالة حيث إذا تم حذف قيمة خلية فلن يتم إرسال بريد إلكتروني عندما يتم حفظها / إغلاقها. سيتم إرسال بريد إلكتروني فقط عند إدخال قيمة خلية. هل تعرف كيف تفعل هذا؟ هذا هو الكود الخاص بي:

رمز البريد الإلكتروني التلقائي لشخص ما عند تحديث برنامج EXCEL WORKBOOK

كود الورقة:

Option Explicit "نطاق حدث تغيير ورقة عمل Excel"
ورقة عمل فرعية خاصة تغيير (هدف ByVal كنطاق)
إذا لم يتقاطع (الهدف ، النطاق ("C3: D62")) لا شيء إذن
الهدف ، الصف الكامل ، الجزء الداخلي ، مؤشر اللون = 15
النطاق ("XFD1048576"). القيمة = 15
إنهاء حالة
إذا لم يتقاطع (الهدف ، النطاق ("I3: J21")) لا شيء إذن
الهدف ، الصف الكامل ، الجزء الداخلي ، مؤشر اللون = 15
النطاق ("XFD1048576"). القيمة = 15
إنهاء حالة
نهاية الفرعية


كود كتاب العمل:

مصنف فرعي خاص_قبل الإغلاق (إلغاء كـ منطقي)
إذا Me.Saved = False ثم Me.Save

خافت xOutApp ككائن
خافت xMailItem ككائن
خافت xName كسلسلة

إذا كان النطاق ("XFD1048576"). القيمة = 15 ثم
على خطأ استئناف التالي
تعيين xOutApp = CreateObject ("Outlook.Application")
قم بتعيين xMailItem = xOutApp.CreateItem (0)
xName = ActiveWorkbook.FullName
مع xMailItem
.To = "بريد إلكتروني"
.CC = ""
.Subject = "رسالة"
. الجسم = "رسالة!"
المرفقات. *** xName
.عرض
'.يرسل
انتهت ب
إنهاء حالة
تعيين xMailItem = لا شيء
تعيين xOutApp = لا شيء



نهاية الفرعية

مصنف فرعي خاص_ فتح ()
النطاق ("XFD1048576"). مسح
نهاية الفرعية
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبا جميع،

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؟ لذلك يجب أن يكون الأمر كذلك ، فيرجى إرسال رسالة إلى هنا. Dies ist dann problematisch wenn zB 10 كان Zellen angepasst werden عبارة عن 10 رسائل بريد إلكتروني bedeuten würde. Und gibt es die Möglichkeit، die gesamte geänderte Zelle bei mir von A bis Y in e-mail zu senden؟ Bisher haut der ja die Zellnummer in die E-Mail، wenn aber jemand anders Filtert wird er die Änderung nicht mehr finden.
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبًا Esser123 ،
يمكن أن تساعد رموز VBA التالية. بعد تعديل الخلايا في النطاق المحدد وحفظ المصنف ، ستظهر رسالة بريد إلكتروني لإدراج جميع الخلايا المعدلة في نص البريد الإلكتروني ، وسيتم إدراج المصنف كمرفق في البريد الإلكتروني أيضًا. برجاء اتباع الخطوات التالية:
1. افتح ورقة العمل التي تحتوي على الخلايا التي تريد إرسال رسائل البريد الإلكتروني بناءً عليها ، وانقر بزر الماوس الأيمن فوق علامة تبويب الورقة وانقر عرض الرمز من قائمة النقر بزر الماوس الأيمن. ثم انسخ الكود التالي في نافذة الورقة (الكود).
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. في محرر Visual Basic ، انقر نقرًا مزدوجًا ThisWorkbook في الجزء الأيمن ، ثم انسخ تعليمات VBA البرمجية التالية إلى ملف ThisWorkbook (كود) نافذة.
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
تم تصغير هذا التعليق بواسطة المشرف على الموقع
أحتاج إلى بعض المساعدة في بدء تشغيل بريد إلكتروني مع تغيير طفيف. بدلاً من القيمة الرقمية أو إدخال المعلومات في الخلية يدويًا ، ستتغير الخلايا الموجودة في العمود B إلى "Y" التي يتم تشغيلها من صيغة في خلايا أخرى في هذا الصف. صيغة العمود B هي = IF ([@ [الكمية في المخزون]]> [@ [مستوى إعادة الترتيب]] ، "Y") ، توضح أن المخزون منخفض في المخزون ويحتاج إلى إعادة ترتيب. أحتاج إلى تشغيل رسالة بريد إلكتروني آلية عندما تتغير قيمة الخلية في العمود B إلى "Y" ، لذلك يتم إخطاري تلقائيًا عبر البريد الإلكتروني بالمخزون المنخفض. لقد جربت كل ما يمكنني التفكير فيه في تغيير الرموز المقدمة بالفعل ، ولكن لا شيء يبدو أنه يعمل بالنسبة لي ... الرجاء المساعدة!
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبًا كاثرين ف ،
يمكن أن يساعدك رمز VBA التالي في حل المشكلة. يرجى محاولة إعطائها. شكرا لك على تعليقك.
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
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبا وشكرا على هذا البرنامج التعليمي.
J'ai cependant une hardé pour l'application de la plage de recherche.
Dans le code، j'ai requesté à vérifier la plage C2: C4.
توصل إلى 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. على سبيل المثال ، لا يوجد معدل C2 و C4 معدّل C3.
Est-ce que quelqu'un pourrait m'aider pour m'indiquer où se trouble mon erreur؟
ميرسي دي AVANCE.

ورقة عمل فرعية خاصة تغيير (هدف ByVal كنطاق)
'تم التحديث بواسطة Extendoffice 20220921
Dim xAddress As String
خافت xDRg ، xRgSel ، xRg كنطاق

xAddress = "C2: C4"
تعيين xDRg = النطاق (xAddress)
تعيين xRgSel = تقاطع (الهدف ، xDRg)
انتقل إلى الخطأ Err1
إذا لم يكن xRgSel لا شيء إذن
إذا كان ThisWorkbook.gChangeRange = "" إذًا
ThisWorkbook.gChangeRange = xRgSel.AddressLocal (False، False، xlA1، True، False)
آخر
تعيين xRg = النطاق (ThisWorkbook.gChangeRange)
تعيين xRg = Application.Union (xRg، xRgSel)
ThisWorkbook.gChangeRange = xRg.AddressLocal (False، False، xlA1، True، False)
إنهاء حالة
إنهاء حالة
خروج الفرعية
Err1:
ThisWorkbook.gChangeRange = xRgSel.AddressLocal (False، False، xlA1، True، False)
نهاية الفرعية


-----

الخيار صريح
gChangeRange العامة كسلسلة
مصنف فرعي خاص_AfterSave (نجاح ByVal كـ منطقي)
'تم التحديث بواسطة Extendoffice 20220921
خافت xRgSel ، xRg كنطاق
خافت xOutApp ككائن
خافت xMailItem ككائن
خافت xMailBody كسلسلة
'خطأ في الصفحة، إذهب للتالي
انتقل إلى الخطأ Err1
تعيين xRg = النطاق (gChangeRange)
إذا لم يكن xRg لا شيء إذن
تعيين xOutApp = CreateObject ("Outlook.Application")
قم بتعيين 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 (False، False) & vbCrLf & vbCrLf & vbCrLf & vbCrLf & "ودي"
مع xMailItem
. إلى = "x.xxxxxx@xxxx.fr"
.Subject = "Modifiées Données" & ThisWorkbook.Name
. الجسم = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.عرض
انتهت ب
تعيين xRgSel = لا شيء
تعيين xOutApp = لا شيء
تعيين xMailItem = لا شيء
إنهاء حالة
Err1:
gChangeRange = ""
نهاية الفرعية
تم تصغير هذا التعليق بواسطة المشرف على الموقع
أود إرسال البريد الإلكتروني إلى 5 أشخاص. ما هو المحدد المستخدم بين كل عنوان بريد إلكتروني؟
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبا جو،
الرجاء استخدام فاصلة منقوطة للفصل بين عناوين البريد الإلكتروني.
تم تصغير هذا التعليق بواسطة المشرف على الموقع
هنا سؤال آخر. إذا تغيرت خلية واحدة ، فإنها ترسل بريدًا إلكترونيًا. إذا تغيرت 3 خلايا ، فإنها ترسل 3 رسائل بريد إلكتروني. كيف يمكنك إيقاف هذا بحيث لا يرسل إلا بريدًا إلكترونيًا واحدًا عند الانتهاء من التعديلات؟
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبا جو،
لنفترض أنك حددت النطاق كـ "A2: E11" في الكود. كيف يمكنني التحقق من انتهاء التعديلات بالكامل؟
لا توجد تعليقات منشورة هنا حتى الآن
اترك تعليقاتك
النشر كضيف
×
قيم المنشور:
0   الشخصيات
المواقع المقترحة

تواصل معنا

حقوق التأليف والنشر © 2009 - شبكة الاتصالات العالمية.extendoffice.com. | كل الحقوق محفوظة. مشغل بواسطة ExtendOffice. | | خريطة الموقع
Microsoft وشعار Office هما علامتان تجاريتان أو علامتان تجاريتان مسجلتان لشركة Microsoft Corporation في الولايات المتحدة و / أو دول أخرى.
محمي بواسطة Sectigo SSL