تقصدني أنا صح ؟ 😅
سواء كانت هذه نيتك أم لا فأنا أشكرك لطرح هذا السؤال حتى يخرج لنا الأستاذ @Moosak بهذه التحفة فقد قدم لنا قطعة من الصلصال وما علينا إلا تشكيلها كما نشاء وهذه كانت تجربتي
ولكن هذا تطلب مني تعديل دالة CheckProtection لتصبح على النحو التالي
Public Function CheckProtection(ByVal tblName As String) As Boolean
On Error GoTo ErrHandler
Dim tmpPath As String
tmpPath = Environ("TEMP") & "\DataMacro_Check_" & tblName & ".xml"
' Export the data macro (acTableDataMacro = 12, hidden member)
Application.SaveAsText AC_TABLE_DATA_MACRO, tblName, tmpPath
' Read contents using FSO (Unicode)
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(tmpPath) Then
Dim ts As Object
Set ts = fso.OpenTextFile(tmpPath, 1, False, -1) ' -1 = Unicode
Dim result As String
result = ts.ReadAll
ts.Close
On Error Resume Next
Kill tmpPath
On Error GoTo 0
CheckProtection = True
Else
Debug.Print "No file was created."
CheckProtection = False
End If
Set fso = Nothing
Exit Function
ErrHandler:
blnIsBlocked = False
Debug.Print "No data macro found on '" & tblName & "': " & Err.Description
Debug.Print "ERROR: " & Err.Description
CheckProtection = False
End Function
أصبحت نتيجة هذه الدالة من النوع Boolean بدل String لترجع True إذا كان الجدول محمي أو False إذا كان غير محمي
وسؤالي للأخ موسى هل سيسبب هذا التغيير أي مشكلة وأنه من الضروري أن يكون ناتج هذه الدالة ذلك النص الطويل؟
الآن عند النقر على الزر الأول سيتم التحقق من وجود الماكرو فإذا لم يجده سينشئه ثم يفتح النموذج
If CheckProtection("Tbl_Cust") = False Then
ApplyTableProtection "Tbl_Cust"
End If
DoCmd.OpenForm "frmCust"
يمكن أن يكون هذا الكود خلف حدث الإغلاق للنموذج أو أي مكان آخر
والعكس في الزر الثاني إذا كان موجود سيزيله ثم يفتح النموذج
If CheckProtection("Tbl_Cust") = True Then
RemoveTableProtection "Tbl_Cust"
End If
DoCmd.OpenForm "frmCust"
صراحة تعجبني الحلول المبتكرة القابلة للتشكيل وفقاً لطريقة عمل كل شخص
برافو أستاذ موسى