كوماندير قام بنشر فبراير 20, 2017 قام بنشر فبراير 20, 2017 السلام عليكم ورحمة الله وبركاته اعزائي الكرام : لدي نموذج مفرد لتكويد اصناف معينة فيه المعطيات التالية : يحتوي على مجموعة مربعات نص منضمه يحتوي على مجموعة من مربعات التحرير والسرد المنضمة ايضا يحتوي على زر (نعم / لا ) يحتوي على مربع نص غير منظم يحتوي على مربع قائمة غير منضم . المطلوب هو : عند تغيير قيمة اي حقل ( منضم فقط ) ان تظهر للمستخدم رسالة تفيده بتغيير قيمة الحقل ( واعلامه بأسم الحقل ) وتخييره هل يود التغيير ام لا . طبعا لا اريد هذه الرسالة ان تظهر عندما يكون هناك سجلا جديدا . طبعا ياريت لو كان الكود واحد للنموذج ككل . اي لايكون كود لكل حقل مستقلا . هل هذا ممكنا وكيف ؟
jjafferr قام بنشر فبراير 21, 2017 قام بنشر فبراير 21, 2017 وعليكم السلام تفضل ضع الكود في حدث النموذج "قبل التحديث": Private Sub Form_BeforeUpdate(Cancel As Integer) Dim ctl As Access.Control jLock = 0 jItems = "" 'Don't go through New Records If Me.NewRecord = False Then 'go through Form controls For Each ctl In Me.Controls 'only Textboxes If ctl.ControlType = acTextBox Then ctl.SetFocus x = Nz(ctl.Text, "") 'check if the value has been changed If Val(x) <> Val(ctl.OldValue) Then jLock = 1 jItems = "The Field: " & ctl.Name & vbCrLf & _ "The OLD value : " & Nz(ctl.Text, "") & vbCrLf & _ "The New value : " & ctl.OldValue & vbCrLf & _ "------------------------------------" & vbCrLf & jItems End If 'Nz End If 'ControlType Next 'the confirmation If jLock = 1 Then jItems = jItems & vbCrLf & vbCrLf & _ "Do you want to Accept Changes?" Style = vbYesNo + vbCritical + vbDefaultButton2 Response = MsgBox(jItems, Style, Title, Help, Ctxt) If Response = vbYes Then DoCmd.Save Else Cancel = True Me.Undo End If End If 'jLock End If 'NewRecord End Sub جعفر 1
كوماندير قام بنشر فبراير 21, 2017 الكاتب قام بنشر فبراير 21, 2017 (معدل) ماهي المتغيرات المفترض الاعلان عنها في الكود وكيف ؟ فقد ظهرت لي رسالة "Variable not defined" تم تعديل فبراير 21, 2017 بواسطه كوماندير
jjafferr قام بنشر فبراير 21, 2017 قام بنشر فبراير 21, 2017 وعليكم السلام تفضل ضع الكود في حدث النموذج "قبل التحديث": Private Sub Form_BeforeUpdate(Cancel As Integer) Dim ctl As Access.Control dim jLock as integer dim jItems as string, x, Style, Response jLock = 0 jItems = "" 'Don't go through New Records If Me.NewRecord = False Then 'go through Form controls For Each ctl In Me.Controls 'only Textboxes If ctl.ControlType = acTextBox Then ctl.SetFocus x = Nz(ctl.Text, "") 'check if the value has been changed If Val(x) <> Val(ctl.OldValue) Then jLock = 1 jItems = "The Field: " & ctl.Name & vbCrLf & _ "The OLD value : " & Nz(ctl.Text, "") & vbCrLf & _ "The New value : " & ctl.OldValue & vbCrLf & _ "------------------------------------" & vbCrLf & jItems End If 'Nz End If 'ControlType Next 'the confirmation If jLock = 1 Then jItems = jItems & vbCrLf & vbCrLf & _ "Do you want to Accept Changes?" Style = vbYesNo + vbCritical + vbDefaultButton2 Response = MsgBox(jItems, Style, Title, Help, Ctxt) If Response = vbYes Then DoCmd.Save Else Cancel = True Me.Undo End If End If 'jLock End If 'NewRecord End Sub جعفر
كوماندير قام بنشر فبراير 21, 2017 الكاتب قام بنشر فبراير 21, 2017 (معدل) منذ ساعه, jjafferr said: وعليكم السلام تفضل ضع الكود في حدث النموذج "قبل التحديث": Private Sub Form_BeforeUpdate(Cancel As Integer) Dim ctl As Access.Control dim jLock as integer dim jItems as string, x, Style, Response jLock = 0 jItems = "" 'Don't go through New Records If Me.NewRecord = False Then 'go through Form controls For Each ctl In Me.Controls 'only Textboxes If ctl.ControlType = acTextBox Then ctl.SetFocus x = Nz(ctl.Text, "") 'check if the value has been changed If Val(x) <> Val(ctl.OldValue) Then jLock = 1 jItems = "The Field: " & ctl.Name & vbCrLf & _ "The OLD value : " & Nz(ctl.Text, "") & vbCrLf & _ "The New value : " & ctl.OldValue & vbCrLf & _ "------------------------------------" & vbCrLf & jItems End If 'Nz End If 'ControlType Next 'the confirmation If jLock = 1 Then jItems = jItems & vbCrLf & vbCrLf & _ "Do you want to Accept Changes?" Style = vbYesNo + vbCritical + vbDefaultButton2 Response = MsgBox(jItems, Style, Title, Help, Ctxt) If Response = vbYes Then DoCmd.Save Else Cancel = True Me.Undo End If End If 'jLock End If 'NewRecord End Sub جعفر عند استخدام الكود اعطى الرسالة التالية : run time error 94 invalid use of null تم تعديل فبراير 21, 2017 بواسطه كوماندير
jjafferr قام بنشر فبراير 21, 2017 قام بنشر فبراير 21, 2017 اي سطر؟ وإلا اقول لك ، واللي يرحم والديك ، بدل الكر والفر ، ارفق هذه الجزئية من البرنامج مع شوية بيانات ، واخبرني طريقة الحصول على هذا الخطأ. جعفر
كوماندير قام بنشر فبراير 21, 2017 الكاتب قام بنشر فبراير 21, 2017 (معدل) 20 دقائق مضت, jjafferr said: اي سطر؟ وإلا اقول لك ، واللي يرحم والديك ، بدل الكر والفر ، ارفق هذه الجزئية من البرنامج مع شوية بيانات ، واخبرني طريقة الحصول على هذا الخطأ. جعفر If Val(x) <> Val(ctl.OldValue) Then حيث ينتقل المؤشر بعد تعديل اي حقل منضم الى ذلك الحقل الغير منضم وقد ذكرت في بداية مشاركتي ان هناك مربع نص غير منضم بالنموذج .... تم تعديل فبراير 21, 2017 بواسطه كوماندير
jjafferr قام بنشر فبراير 21, 2017 قام بنشر فبراير 21, 2017 Private Sub Form_BeforeUpdate(Cancel As Integer) Dim ctl As Access.Control Dim jLock As Integer Dim jItems As String, Style, Response jLock = 0 jItems = "" 'Don't go through New Records If Me.NewRecord = False Then 'go through Form controls For Each ctl In Me.Controls 'only Textboxes If ctl.ControlType = acTextBox Then ctl.SetFocus 'check if the value has been changed If Val(Nz(ctl.Text, "")) <> Val(Nz(ctl.OldValue, "")) Then jLock = 1 jItems = "The Field: " & ctl.Name & vbCrLf & _ "The OLD value : " & Nz(ctl.Text, "") & vbCrLf & _ "The New value : " & ctl.OldValue & vbCrLf & _ "------------------------------------" & vbCrLf & jItems End If 'Nz End If 'ControlType Next 'the confirmation If jLock = 1 Then jItems = jItems & vbCrLf & vbCrLf & _ "Do you want to Accept Changes?" Style = vbYesNo + vbCritical + vbDefaultButton2 Response = MsgBox(jItems, Style, Title, Help, Ctxt) If Response = vbYes Then DoCmd.Save Else Cancel = True Me.Undo End If End If 'jLock End If 'NewRecord Set ctl = Nothing End Sub
كوماندير قام بنشر فبراير 21, 2017 الكاتب قام بنشر فبراير 21, 2017 (معدل) الذي اردته ان يعمل الكود بعد تعديل الحقل مباشرة (بحيث يكون كودا واحد لكل النموذج بدلا عن تكرار نفس الكود لكل حقل ...تحت حدث عند وجود شوائب .....)وليس عند الانتقال لسجل آخر ... وليس من المهم اظهار القيم بعد التعديل وقبله بالرساله . ثم ماذا لو استخدمنا : If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or ctl.ControlType = acCheckBox Then ومع هذا فهناك اخطأ تظهر وثقل شديد ... وهذا المرفق Alertmsg.rar تم تعديل فبراير 21, 2017 بواسطه كوماندير
jjafferr قام بنشر فبراير 21, 2017 قام بنشر فبراير 21, 2017 مع اني لست من محبي SendKeys ، إلا اني لم اجد أمرا آخر Private Sub Form_Dirty(Cancel As Integer) Dim jItems As String, x, Style, Title, Response, Help, Ctxt jItems = "The Field: " & Me.ActiveControl.Name & vbCrLf & _ "is changed!!" & vbCrLf & _ "Do you want to Accept Changes?" Style = vbYesNo + vbCritical + vbDefaultButton2 Response = MsgBox(jItems, Style, Title, Help, Ctxt) If Response = vbYes Then 'DoCmd.Save Me.Dirty = False Else Cancel = True Me.Undo End If SendKeys "{F5}" End Sub جعفر 602.Alertmsg.accdb.zip
jjafferr قام بنشر فبراير 24, 2017 قام بنشر فبراير 24, 2017 السلام عليكم هل عمل الكود؟؟ لم ارى ملاحظة ولا تعليق!! جعفر
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.