السلام عليكم
اخي المكرم / عادل ----------------حفظه الله
من الافضل تسمية النطاق (kh_test_1) بعدد الاعمدة التي تشمله ( لم يتم تغييره في مرفقك)
و تضيف متغير جديد في الكود بعدد الاعمدة في النطاق
و تستخدم هذا المتغير بدلا من اضافة رقم للعمود في الكود
ويصبح الكود ثابت ويتم فقط للاستخدام تحديد النطاق في الورقة
مثلا :
MyColumns = .Columns.Count
اليك الكود :
Private Sub Worksheet_Change(ByVal Target As range)
Dim MyRows As Integer, MyColumns As Integer, MyRange As range, MyRange1 As range
On Error GoTo 1
With range("kh_test_1")
MyRows = .Rows.Count - 1
MyColumns = .Columns.Count
Set MyRange = .range(cells(MyRows, 1), cells(MyRows, MyColumns))
If Not Intersect(Target.cells(1, 1), MyRange.cells) Is Nothing _
And Target.Value <> "" Then
MyRange.EntireRow.Insert
Set MyRange1 = .range(cells(MyRows, 1), cells(MyRows, MyColumns))
MyRange1.Value = MyRange.Value
MyRange.ClearContents
End If
End With
1 End Sub
====================================================
و هناك اضافة جديدة لو تريدها في حالة اردت حذف صف معين
تمسح بيانات خلية الاسم فيحذف الصف تلقائيا
باستخدام هذا الكود:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyRows As Integer, MyRange As Range, MyRange1 As Range, MyCells As Range
On Error GoTo 1
With Range("kh_test_1")
MyRows = .Rows.Count - 1
Set MyRange = .Range(Cells(MyRows, 1), Cells(MyRows, 4))
Set MyCells = .Range(Cells(1, 1), Cells(MyRows - 1, 1))
If Not Intersect(Target.Cells(1, 1), MyRange.Cells) Is Nothing _
And Target.Value <> "" Then
MyRange.EntireRow.Insert
Set MyRange1 = .Range(Cells(MyRows, 1), Cells(MyRows, 4))
MyRange1.Value = MyRange.Value
MyRange.ClearContents
End If
End With
If Not Intersect(Target.Cells(1, 1), MyCells.Cells) Is Nothing Then
If Target.Value = "" Then Target.EntireRow.Delete
End If
1 End Sub
سارفق الملف لاحقا
Dinamic_Lable1.rar