اذهب الي المحتوي
أوفيسنا

مطلوب كود vba لا يسمح بتعديل ما يكتب فى الخلية


ehabaf2
إذهب إلى أفضل إجابة Solved by حسونة حسين,

الردود الموصى بها

السلام عليكم الاخوة الكرام

كل عام و حضراتكم بالف خير و سعادة 

مطلوب كود vba لا يسمح بتعديل ما يكتب فى أسطر محددة

يعني يقبل الكتابة داخل الاسطر المحددة و لكن بعد الكتابة لا يمكن بمسحها او تعديلها الا بعد فك حماية الملف

مرفق الملف للتوضيح و التعديل رقم حماية الملف 1

عدم التعديل فى اسطر محددة.xlsx

رابط هذا التعليق
شارك

يمكنك استخدام الكود التالي لمنع تعديل أو حذف الخلايا من A2:K2 إلا بعد فك حماية ورقة العمل:

هذا كمثال فقط وانت عدل على الكود على حسب الخلايا التي او النطاق الذي لديك

ضع الكود في حدث الورقه التي تريد تطبيق منع الكتابه على خلاياها بعد الادخال

الكود

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim protectedRange As Range
    Set protectedRange = Range("A2:K2")
    If Not Intersect(Target, protectedRange) Is Nothing Then
        Application.EnableEvents = False
        Application.Undo
        MsgBox "لا يمكن تعديل هذه الخلية، يرجى فك حماية الورقة للقيام بذلك"
        Application.EnableEvents = True
    End If
End Sub

يتم تنفيذ هذا الكود عند تغيير قيمة في الورقة. إذا تم تغيير أي خلية في النطاق المحدد (A2:K2)، فسيتم التحقق مما إذا كانت الورقة محمية أم لا. إذا كانت المنطقة محمية، فسيتم إلغاء التغيير وإظهار رسالة تذكيرية تطلب فك حماية الورقة.

عندما تكون مستعدًا للسماح بتعديل الخلايا في هذا النطاق، يمكنك فك حماية الورقة باستخدام الأمر التالي:
ActiveSheet.Unprotect Password:="mypassword"

يجب استبدال "mypassword" بكلمة مرور الحماية الحالية التي تم استخدامها لحماية الورقة. بعد ذلك، يمكنك تعديل الخلايا في النطاق المحدد. بعد الانتهاء من التعديلات، يمكنك إعادة حماية الورقة باستخدام الأمر التالي:
ActiveSheet.Protect Password:="mypassword"

مرة أخرى، يجب استبدال "mypassword" بكلمة مرور الحماية التي تريد استخدامها.

اتمنى يكون المطلوب . 

  • Like 1
رابط هذا التعليق
شارك

الاستاذ الفاضل على بن على شكرا لحضرتك بس الكود لا يسمح بالكتابة و لكن المطلوب انه يسمح بالكتابة اول مرة و لا يسمح بالتعديل بعد ذلك

اريد كتابة كود غلق الخلايا فى النطاق المحدد فى الشيت المرفق بحيث عندما اكتب فيه تغلق الخلية و لا يسمح بالتعديل الا بعد فك الحماية

الاستاذ الفاضل أبو احمد الف الف شكر لحضرتك الكود يعمل و هو المطلوب اكرر شكرى لحضرتك

لكن عند تحديد اكتر من خلية يعطى رسالة خطأ و الخليه عند الكتابة بها اكتر من مرة تسمح بالمسح 

رابط هذا التعليق
شارك

جرب الكود التالي

ضعه في حدث الورقة المطلوب حماية معادلاتنها

الكود

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    Set rng = Range("A2:K50")
    If Not Intersect(Target, rng) Is Nothing Then
        If Target.Value = "" Then
            Target.Locked = False
        Else
            Target.Locked = True
        End If
        rng.Locked = True
        rng.SpecialCells(xlCellTypeBlanks).Locked = False
        ActiveSheet.Protect Password:="password", UserInterfaceOnly:=True
    End If
End Sub

هذا الكود يعني أنه عند تغيير قيمة الخلية في النطاق المحدد (A2:K50)، يتم التحقق من حالة الخلية قبل تحديد حالة القفل عليها. إذا كانت الخلية فارغة، فسيتم إلغاء حالة القفل عنها، مما يسمح بالكتابة في الخلية. إذا تم إدخال قيمة في الخلية، فسيتم تحديد حالة القفل على الخلية، مما يعني أنه لن يتمكن أحد من تحرير أو تعديل الخلية.

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

عند تشغيل الحماية، سيتم حماية النطاق المحدد بحيث لن يتمكن أحد من تحرير أو تعديل أي خلية في هذا النطاق، ما لم تكن  الخلية فارغة

حظ موفق

  • Thanks 1
رابط هذا التعليق
شارك

في 10‏/7‏/2023 at 18:46, ehabaf2 said:

عند تحديد اكتر من خلية يعطى رسالة خطأ و الخليه عند الكتابة بها اكتر من مرة تسمح بالمسح 

 

وعليكم السلام

جرب الآن 

Option Explicit

Public ii As String

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("C603:j611"), Target) Is Nothing And ii <> "" And ActiveSheet.ProtectContents = True Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 On Error Resume Next
If Not Intersect(Range("C603:j611"), Target) Is Nothing Then ii = Target.Value
End Sub

 

رابط هذا التعليق
شارك

السلام عليكم الاساتذة الافاضل

كود الاستاذ على بن على لا يعمل عند كتابة اي رقم يعطى رسالة خطأ

كود الاستاذ أبو أحمد يعمل جيدا و لكن يسمح بالتعديل بعد أكتب فى الخلية مرتين

 

هل ممكن تعديل الكود التالى باضافة نطاق محدد مثلا من A1 الى H00

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect "1"
Target.Locked = True
ActiveSheet.Protect "1"
End Sub

وشكر لجميع السادة الاساتذة الخبراء على ما يقدمونه من مساعدة

رابط هذا التعليق
شارك

Option Explicit

Public ii As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("A1:c11"), Target) Is Nothing And ii = True And ActiveSheet.ProtectContents = True Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 On Error Resume Next
ii = False
If Not IsEmpty(Target) Then ii = True
End Sub

جرب هذا

رابط هذا التعليق
شارك

  • أفضل إجابة

وعليكم السلام ورحمه الله وبركاته

جرب هذا التعديل اخي @ehabaf2

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim X As Range
    For Each X In Target
        '  600 هو اخر سطر لعمل الكود
        'L  هو العامود  column 12
        If (X.Row < 600 And X.Column < 12) Then
            If ActiveSheet.ProtectContents = True And X.Value <> "" Then X.Offset(0, 1).Select
        End If
    Next
End Sub

 

عدم التعديل فى اسطر محددة.xlsb

  • Thanks 1
رابط هذا التعليق
شارك

الحمد لله الحمد لله الحمد لله

استاذنا الفاضل حسونة حسين الكود يعمل بشكل رائع

الف شكر حضرتك

و الف شكر لجميع الاساتذة الافاضل و جميع الاعضاء 

 

رابط هذا التعليق
شارك

استاذنا الفاضل  حسونة حسين

اعتزر اريد الكود يعمل على نطاق محدد و باقى الشيت يعمل عادى خارج نطاق الكود

مثلا الكود يعمل داخل نطاق من A100 الى C120 فقط وباقى الشيت يعمل عادى هل ده ممكن

رابط هذا التعليق
شارك

زائر
هذا الموضوع مغلق.
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information