عندك خطآن وليس واحدا
الخطأ الأول في هذا السطر
LR = [b999].End(xlUp).Row
هذا معناه أن يذهب إلي الخلية [b999] ومنها يقفز للأعلي End(xlUp).Row
هذا الأمر مماثل لما يحدث إذا ضغطت Ctrl-Up زر الكنترول مع السهم لأعلي (في صفحة الإكسل وليس في الفيجوال بيسيك)
فهذا يجعل المؤشر يقفز للأعلي ليس سطرا واحدا بل حتي تتغير الحالة من فراغ إلي كتابة (أو من كتابة إلي فراغ) ثم يكتب رقم السطر في المتغير LR
وفي حالتنا نفترض أن الخلية B999 فارغة لأنها بعيدة للأسفل فإذا قفز منها للأعلي حتي تتغير الحالة من فراغ إلي كتابة سيقف عند آخر سطر به بيانات وهذا هو المطلوب
أما الخطأ عندك فقد اخترت (بعد التعديلات التي أجريتها علي الملف) عمود B الذي هو كله فارغ
فبتنفيذ هذا السطر يقفز المؤشر لأعلي ولايجد كتابة حتي السطر الأول فيعطي المتغير LR قيمة (1)
هذا الأمر كان في محله في المسألة الأولي أما الآن فيمكنك استبداله كالتالي
LR = Cells.SpecialCells(xlCellTypeLastCell).Row
فهذا أدق يجعل المتغير يأخذ قيمة آخر سطر به بيانات في نطاق الورقة كلها
الخطأ الثاني في هذا السطر
For rww = 3 To L
والذي من المفروض أن يكون هكذا
For rww = 3 To LR
حتي تستفيد من حساب LR في أول سطر
إذن الكود بعد التعديل
Sub del_abs_FR()
LR = Cells.SpecialCells(xlCellTypeLastCell).Row
For col = 3 To 40
If Weekday(Cells(3, col)) <> 6 Then GoTo 10
For rww = 3 To LR
If Cells(rww, col).Value = "غ" Then
a = Cells(rww, col).Address(RowAbsolute:=False, columnAbsolute:=False)
MsgBox " العثور علي تسجيل غياب يوم جمعة بالخلية" & a: Cells(rww, col).Value = ""
End If
Next rww
10 Next col
End Sub