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

كيفية منع الحفظ إذا كانت خلية معينة فارغة في إكسيل؟

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

علامة تبويب Office تمكن من التحرير والتصفح المبوب في المكتب ، واجعل عملك أسهل بكثير ...
Kutools for Excel يحل معظم مشاكلك ويزيد إنتاجيتك بنسبة 80٪
  • إعادة استخدام أي شيء: أضف الصيغ والمخططات الأكثر استخدامًا أو تعقيدًا وأي شيء آخر إلى مفضلاتك ، وأعد استخدامها بسرعة في المستقبل.
  • أكثر من 20 ميزة نصية: استخراج رقم من سلسلة نصية ؛ استخراج أو إزالة جزء من النصوص ؛ تحويل الأرقام والعملات إلى الكلمات الإنجليزية.
  • أدوات الدمج: مصنفات وأوراق متعددة في واحد ؛ دمج خلايا / صفوف / أعمدة متعددة دون فقد البيانات ؛ دمج الصفوف المكررة والمجموع.
  • أدوات الانقسام: تقسيم البيانات إلى أوراق متعددة بناءً على القيمة ؛ مصنف واحد لملفات Excel أو PDF أو CSV متعددة ؛ عمود واحد إلى أعمدة متعددة.
  • لصق التخطي صفوف مخفية / مصفاة العد والمجموع حسب لون الخلفية؛ إرسال رسائل بريد إلكتروني مخصصة إلى مستلمين متعددين بشكل مجمع.
  • مرشح سوبر: إنشاء مخططات تصفية متقدمة وتطبيقها على أي أوراق ؛ تصنيف حسب: حسب الأسبوع واليوم والتكرار والمزيد ؛ تصفية بواسطة bold، formulas، comment ...
  • أكثر من 300 ميزة قوية ؛ يعمل مع Office 2007-2021 و 365 ؛ يدعم جميع اللغات ؛ سهولة النشر في مؤسستك أو مؤسستك.

السهم الأزرق الحق فقاعةمنع الحفظ إذا كانت خلية معينة فارغة في Excel

لمنع حفظ المصنف الحالي إذا كانت الخلية المحددة فارغة في Excel ، يمكنك تطبيق ماكرو VBA التالي بسهولة.

الخطوة 1: افتح نافذة Microsoft Visual Basic for Applications بالضغط على ملف قديم + F11 مفاتيح في غضون ذلك.

الخطوة 2: في Project Explorer ، قم بتوسيع ملف VBAProject (اسم المصنف الخاص بك. xlsm) و كائنات ميكروسوفت إكسيل، ثم انقر نقرًا مزدوجًا فوق ملف ThisWorkbook. انظر لقطة الشاشة على اليسار:

الخطوة 3: في نافذة ThisWorkbook الافتتاحية ، الصق ماكرو VBA التالي:

ماكرو فبا: منع الحفظ إذا كانت خلية معينة فارغة

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Update by ExtendOffice 20220907
Dim xFileName As String
Dim xStr As String
Dim xStrWSH As String
Dim xWSh As Worksheet
Dim xWShs As Sheets
Dim xWSh1 As Worksheet
Dim xWB As Workbook

xStrWSH = "xHidWSH_LJY"
On Error Resume Next
Set xWB = Application.ActiveWorkbook
Set xWShs = xWB.Worksheets
Set xWSh = xWShs.Item(xStrWSH)

If xWSh Is Nothing Then

  Set xWSh1 = xWShs.Add
  xWSh1.Name = xStrWSH
  xWSh1.Visible = xlSheetVeryHidden
  Cancel = False

Else

  If Trim(Application.Sheets("Sheet1").Range("A1").Value) = "" Then
  Cancel = True
  MsgBox "Save cancelled"
  End If

End If

End Sub
ملاحظة:
1. في الصف السادس والعشرين من كود فبا أعلاه ، فإن ملف "الورقة 1" هو اسم ورقة العمل المحدد ، و "A1"هي الخلية المحددة ، ويمكنك تغييرها حسب حاجتك.
2. بعد إدخال VBA بتنسيق ThisWorkbook، يجب عليك حفظ المصنف أولا. وبعد ذلك يمكنك إرسال الملف الممكّن بماكرو إلى الآخرين.

الآن إذا كانت الخلية المحددة فارغة في المصنف الحالي ، فعند حفظها ، يظهر مربع حوار تحذير ويخبرك "تم إلغاء الحفظ". انظر لقطة الشاشة التالية:


السهم الأزرق الحق فقاعةمقالات ذات صلة


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

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٪ ، ويقلل مئات النقرات بالماوس كل يوم!
أوفيسيتاب القاع
فرز التعليقات حسب
التعليقات (26)
لا يوجد تقييم. كن أول من يقيم!
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبًا - كان هذا مفيدًا للغاية ... كان لدي سؤال واحد فقط ، كيف يمكنني حفظ الملف بدون قيمة في هذا المجال؟ أثناء محاولتي الحفظ ، سينبثق رمز VBA رسالة "Save Canceled" وهي الاستجابة المقصودة ، ومع ذلك ، تحتاج إلى الحفظ مرة واحدة بدون قيمة لإنشاء النموذج المراد إعادة استخدامه.

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

يرجى تجربة رمز VBA أدناه:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Update by ExtendOffice 20220907
Dim xFileName As String
Dim xStr As String
Dim xStrWSH As String
Dim xWSh As Worksheet
Dim xWShs As Sheets
Dim xWSh1 As Worksheet
Dim xWB As Workbook

xStrWSH = "xHidWSH_LJY"
On Error Resume Next
Set xWB = Application.ActiveWorkbook
Set xWShs = xWB.Worksheets
Set xWSh = xWShs.Item(xStrWSH)

If xWSh Is Nothing Then

  Set xWSh1 = xWShs.Add
  xWSh1.Name = xStrWSH
  xWSh1.Visible = xlSheetVeryHidden
  Cancel = False

Else

  If Trim(Application.Sheets("Sheet1").Range("A1").Value) = "" Then

    xFileName = ActiveWorkbook.Name
    xStr = Left(xFileName, InStrRev(xFileName, ".") - 1)
    ActiveWorkbook.SaveCopyAs "C:\Users\Amanda\Desktop\" & Replace(xFileName, xStr, xStr & " - copy")
    Cancel = True
    MsgBox "Save cancelled"

  End If

End If

End Sub

ملاحظة:
1. يرجى تغيير المقتطف Sheet1 و A1 في الصف السادس إلى اسم الورقة الفعلي والخلية.
2. يرجى تغيير المقتطف ج: \ المستخدمون \ أماندا \ سطح المكتب \ في الصف العاشر بالمسار الفعلي حيث تريد حفظ نسخة الملف.
3. بعد إدخال VBA بتنسيق ThisWorkbook, يجب عليك حفظ المصنف أولا. بعد ذلك ، عندما تقوم بحفظه مرة أخرى ، سيتم نسخ المصنف ، بحيث يمكنك إرساله إلى الآخرين.

أماندا
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبًا أماندا ، لم ينجح الأمر :(. لقد أعطاني خطأ ، ربما أرتكب خطأ ما. أريد فقط حفظ نسخة من النموذج (مع الحقول الفارغة) حتى يتمكن المستخدم من فتحها وتعبئتها. أين يطالبهم الماكرو ويمنعهم من حفظ الملف إذا كان فارغًا. هل يمكنك إلقاء نظرة من فضلك؟
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبا هناك،

يرجى الاطلاع على التعليق أعلاه ، لقد قمت بتحديث VBA. يجب أن يعمل الرمز بشكل مثالي لحالتك.

أماندا
تم تصغير هذا التعليق بواسطة المشرف على الموقع
يعمل ولكن الآن الملف الذي تم نسخه لا يعمل كنموذج. يطالب فقط بإلغاء الحفظ. أحتاج إلى نموذج فارغ في الغالب يمنع المستخدمين من الحفظ حتى يتم ملء حقول معينة. يشتمل نموذجي الحالي على جميع الحقول ، لكني أحتاج إلى ملف مستخدم فارغ. آسف ربما لم أشرح بشكل صحيح.
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبًا ، أريد أن أسأل ما إذا كان من A2 إلى U2. ماذا يجب ان اكتب؟
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبا وكاي ،
جرب كود فبا هذا:
(سيكتشف رمز VBA هذا النطاق A2: E5 في "اختبار" الورقة ، ويلغي الحفظ إذا كانت هناك خلايا فارغة موجودة في النطاق.)

Private Sub Workbook_BeforeSave (ByVal SaveAsUI كـ Boolean ، إلغاء كـ Boolean)
خافت xWSName كسلسلة
Dim xRgAddress As String
خافت xRg كمدى
خافت xWs كورقة عمل
خافت xFNRg كنطاق
xWSName = "اختبار"
xRgAddress = "A2: E5"
تعيين xWs = Application.ActiveWorkbook.Worksheets.Item (xWSName)
تعيين xRg = xWs.Range (xRgAddress)
قم بتعيين xFNRg = لا شيء
على خطأ استئناف التالي
قم بتعيين xFNRg = xRg.SpecialCells (xlCellTypeBlanks ، 23)
إذا لم يكن TypeName (xFNRg.count) = "لا شيء" إذن
إلغاء = صحيح
MsgBox "تم إلغاء الحفظ"
إنهاء حالة
نهاية الفرعية
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبا ، مفيد جدا. ولكن توجد مشكلة عند استخدامه للملفات الموجودة على SharePoint. لا يتم حفظ التغييرات ولكن يتم إنشاء إصدار جديد يتم عرضه عند إعادة الفتح وهو أمر محير للغاية. هل من الممكن تعطيل هذه الإصدارات الجديدة؟
تم تصغير هذا التعليق بواسطة المشرف على الموقع
هذا رائع حقًا. هل تعرف ما يمكنني القيام به لإنجاح هذا العمل لمجموعة من الأوراق وعدد من الخلايا؟ أيضًا ، لا يمكن أن تكون هذه الخلايا هي نفسها دائمًا ، حيث توجد أوراق تم إنشاؤها في هذا المصنف المحدد والتي قد لا تحتوي على نفس الخلية التي يلزم ملؤها في كل مرة. ستكون الخلايا دائمًا في نفس العمود ، أعلى حد الصفحة الذي يتم إنشاؤه أيضًا. شكرًا!
تم تصغير هذا التعليق بواسطة المشرف على الموقع
لدي جدول بيانات كبير جدًا يحتوي على الكثير من المعلومات.
هل يمكن لأي شخص مساعدتي برمز لنسخه إلى VBA - أريد أن يكون ذلك إذا كانت الخلية C2-C1000 + بها أي معلومات ، فإن الخلية O2-O1000 + و P2-P1000 + تتطلب إدخال المستخدم - ولكن إذا كانت الخلية في العمود C هي فارغة ثم يمكن أن تكون الخلية في العمود O & P فارغة أيضًا. (على سبيل المثال) إذا لم يكن للخلية C3 أي إدخال بيانات ، فيمكن أن تكون الخلية O3-P3 فارغة.

شكرا لك :)
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبا يزيل ،
يرجى تذكر وضع الكود أدناه في نافذة البرنامج النصي "ThisWorkbook" ، وإعادة تسمية اسم ورقة العمل "اختبار" في الكود أدناه بناءً على حالتك.

خافت xIRg كمجموعة
خافت xSRg كمدى
Dim xBol كما منطقي
خافت xInt كعدد صحيح
خافت xStr كسلسلة
إذا كان ActiveSheet.Name = "اختبار" ثم
تعيين xRg = Range ("C: C")
تعيين xRRg = Intersect (xRg.Worksheet.UsedRange ، xRg)
xBol = خطأ
على خطأ استئناف التالي
من أجل xInt = 1 إلى xRRg.Count
تعيين xIRg = xRRg.Item (xInt)
إذا كانت xIRg.Value2 <> "" ثم
تعيين xSRg = لا شيء
إذا كان (Range ("O" & xIRg.Row) = "") أو (Range ("P" & xIRg.Row) = "") إذن
xBol = صحيح
خروج عن
إنهاء حالة
إنهاء حالة
التالى
إذا كان xBol ثم
إلغاء = صحيح
MsgBox "تم إلغاء الحفظ"
إنهاء حالة
إنهاء حالة
نهاية الفرعية
تم تصغير هذا التعليق بواسطة المشرف على الموقع
Private Sub Workbook_BeforeSave (ByVal SaveAsUI كـ Boolean ، إلغاء كـ Boolean)

مع الأوراق ("Sheet1")
If WorksheetFunction.CountA (.Range ("A1: A4")) <> WorksheetFunction.CountA (.Range ("B1: C4")) / 2 ثم
إلغاء = صحيح
MsgBox "الرجاء إدخال قيم في العمودين B و C" ، vbCritical ، "خطأ!"
إنهاء حالة
انتهت ب

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

ما عليك سوى تغيير النطاق من a إلى c ، ومن b إلى o و phope سيساعدك ذلك
تم تصغير هذا التعليق بواسطة المشرف على الموقع
هل لديك طريقة يمكن من خلالها ترميز ذلك بحيث يحتاج B أو C إلى أن يتم ملؤه ولكن ليس مطلوبًا لملء كليهما؟
تم تصغير هذا التعليق بواسطة المشرف على الموقع
Private Sub Workbook_BeforeSave (ByVal SaveAsUI كـ Boolean ، إلغاء كـ Boolean)

مع الأوراق ("Sheet1")
If WorksheetFunction.CountA (.Range ("A1: A4")) <> WorksheetFunction.CountA (.Range ("B1: C4")) / 2 ثم
إلغاء = صحيح
MsgBox "الرجاء إدخال قيم في العمودين B و C" ، vbCritical ، "خطأ!"
إنهاء حالة
انتهت ب

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


ما عليك سوى تغيير النطاق من a إلى c ومن b إلى o و p
آمل أن يساعد
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مساء الخير ، لقد استخدمت الكود أعلاه وعمل بشكل مثالي. سؤالي هو كيف يجب أن يبدو الرمز إذا كنت أرغب في الاختبار على خليتين؟ أنا يائس جدا. شاكرا لكم مقدما لمساعدتكم
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبًا ، لدي رمز VBA الذي يقوم بفرز البيانات وتصفيتها من جدول Excel واحد وحفظ 48 تقريرًا مختلفًا على سطح المكتب. ولكن بناءً على هذه الفلاتر ، تحتوي بعض التقارير التي تم إنشاؤها على صف واحد فقط (رؤوس) ولا تحتوي على بيانات. كيف يمكنني إضافة بعض التعليمات البرمجية لـ VBA إلى ملفي والتي تمنع حفظ الملفات التي تحتوي على صف واحد فقط (رأس) ولا توجد بيانات؟ شكرًا لك
تم تصغير هذا التعليق بواسطة المشرف على الموقع
Hi
لدي رمز VBA يقوم بفرز البيانات وتصفيتها من جدول Excel واحد وحفظ 48 تقريرًا مختلفًا على سطح المكتب. ولكن بناءً على هذه الفلاتر ، تحتوي بعض التقارير التي تم إنشاؤها على صف واحد فقط (رؤوس) ولا تحتوي على بيانات. كيف يمكنني إضافة بعض التعليمات البرمجية لـ VBA إلى ملفي والتي تمنع حفظ الملفات التي تحتوي على صف واحد فقط (رأس) ولا توجد بها بيانات؟
شكراً لك
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبًا ، لقد جربت أعلاه الصيغة التي تعمل. هل لي أن أعرف هل هناك أي صيغة يمكن أن تجبر المستخدم على ملئها قبل أن يتمكن من الحفظ؟ عندما أقوم بضبط القائمة المنسدلة "الرجاء التحديد" أو "نعم" أو "لا" للاختيار. لكنهم نسوا دائمًا تحديد هذا الحقل ويظلوا "الرجاء التحديد". إذا قمت بإضافة رمز VBA هذا ، فقم بتطبيق الخلية فارغة. نقدر كثيرا يمكنك تقديم المشورة. شكرًا لك
تم تصغير هذا التعليق بواسطة المشرف على الموقع
حاولت أعلاه الصيغة التي تعمل. هل لي أن أعرف هل هناك أي صيغة يمكن أن تجبر المستخدم على ملئها قبل أن يتمكن من الحفظ؟ عندما أقوم بضبط القائمة المنسدلة "الرجاء التحديد" أو "نعم" أو "لا" للاختيار. لكنهم نسوا دائمًا تحديد هذا الحقل ويظلوا "الرجاء التحديد". إذا قمت بإضافة رمز VBA هذا ، فقم بتطبيق الخلية فارغة. نقدر كثيرا يمكنك تقديم المشورة. شكرًا لك
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبا سعيد،
فقط استبدل القيمة الفارغة "الأوراق ("TEST"). النطاق ("A1"). القيمة = """إلى النص المحدد"الأوراق ("TEST"). النطاق ("A1"). القيمة = "الرجاء التحديد"وسيتم تغيير الكود بالكامل على النحو التالي:
Private Sub Workbook_BeforeSave (ByVal SaveAsUI كـ Boolean ، إلغاء كـ Boolean)
If Application.Sheets ("TEST"). Range ("A1"). Value = "Please select" then
إلغاء = صحيح
MsgBox "تم إلغاء الحفظ"
إنهاء حالة
نهاية الفرعية

تم تصغير هذا التعليق بواسطة المشرف على الموقع
هذا لا يعمل ، ينص على إلغاء الحفظ ولكن لا يزال ينتهي بحفظ المصنف
تم تصغير هذا التعليق بواسطة المشرف على الموقع
ملاحظة: في التعليمات البرمجية لـ VBA ، يكون "TEST" هو اسم ورقة العمل المحدد ، و "A1" هي الخلية المحددة ، ويمكنك تغييرها حسب حاجتك.

على سبيل المثال ، يتم تسمية الورقة باسم "Sheet1" ، والخلية المحددة هي B2 ، تحتاج إلى تغيير اسم الورقة وعنوان الخلية في رمز VBA قبل تشغيلها
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبا،
io avrei bisogno di impostare una macro يشبه Quella di Eduardo. على وجه الخصوص ، هو الجدول المناسب:
- بريما تابيلا A18: P28
- seconda tabella A33: P41.
Vorrei impedire che l'utente salvi il file se ha compilato la cella A18 e le altre attigue (B18: P18) le ha lasciate vuote OPure se ha compilato la cella A33 e ha lasciato vuole le attigue (B33: P33). في كويستو كاسو ، تعال dovrei impostare la macro؟ Grazie في انتظار تشي ريسبديرا!
تم تصغير هذا التعليق بواسطة المشرف على الموقع
مرحبا هناك،

هل تقصد أنك تريد منع حفظ الملف إذا كان A18 ممتلئًا بينما B18: P18 فارغًا؟ هل تريد أيضًا منع الحفظ إذا تم ملء A33 بينما كانت B33: P33 فارغة؟
هل تريد منع الحفظ عند استيفاء كلا المعيارين ، أو عند استيفاء أي من المعيارين؟
أيضا ، يرجى استخدام اللغة الإنجليزية. شكرا مقدما.

أماندا
لا توجد تعليقات منشورة هنا حتى الآن
اترك تعليقاتك
النشر كضيف
×
قيم المنشور:
0   الشخصيات
المواقع المقترحة

تواصل معنا

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