السلام عليكم ورحمة الله وبركاته
إخواني وأحبابي في الله
أقدم لكم اليوم حل لمشكلة قام بطرحها أحد الأخوة على الفيس بوك لتعم الفائدة .. والمشكلة التي طرحت بهذا الشكل
أي أن
المطلوب هو عملية ربط بين خلية معينة في ورقة معينة مع اسم المصنف ، بحيث لو قام المستخدم قبل فتح المصنف بإعادة تسمية المصنف فإن الكود سيلغي هذا التغيير عند فتح المصنف مرة أخرى ، حيث أن الكود يعمل في حدث ما قبل إغلاق المصنف ...
يقوم الكود بفحص الاسم الموجود في ورقة العمل Sheet1 في الخلية A1 ، ويطابقه بالاسم الفعلي للمصنف الحالي ، فإذا تطابقا تظهر رسالة بأن المستخدم لم يقم بتغيير اسم المصنف ، أما إذا لم يتطابق فهذا يعني أن المستخدم قد قام بتغيير اسم المصنف أو أنه قام بتغيير قيمة الخلية الموجودة في ورقة العمل Sheet1 ، وفي هذه الحالة يتم إعادة تسمية المصنف مرة أخرى بناءً على قيمة الخلية A1 في ورقة العمل Sheet1 ...
الخدعة في حل المشكلة أنه يتم حفظ المصنف بالاسم بناءً على قيمة الخلية ثم حذف المصنف القديم الذي تم تغيير اسمه.
وإليكم الكود والذي يوضع في موديول المصنف ThisWorkbook ...
CODE
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim sName As String, sPath As String
With ThisWorkbook
sName = .Worksheets("Sheet1").Range("A1").Value
sName = .Path & "\" & sName & ".xlsm"
sPath = .FullName
If sName <> sPath Then
.SaveAs sName: Kill sPath
Else
MsgBox "The User Did Not Rename The Workbook.", 64
End If
End With
End Sub
إعداد وتقديم / ياسر خليل أبو البراء