درود بر استاد mazoolagh عزیز !
با اجازتون من در کد های شما تغییراتی ایجاد کردم که ماحصل اون در نمونه ضمیه قرار دادم
اما توضیح در خصوص تغییرات :
بجای ماژول
PUBLIC FUNCTION GLOBAL_ONLOAD(FORMNAME AS STRING)
DOCMD.GOTORECORD ACDATAFORM , FORMNAME , ACNEWREC
END FUNCTION
ماژول زیر رو بدون آرگومان ایجاد کردم
Public Function NewRec()
DoCmd.GoToRecord , , acNewRec
End Function
بعد در سابروتینی که فرم ها در حالت دیزاین بازمیشن و کد اجرای انتقال به رکورد جدید درج میشه من OnLoad فرم رو مساوی عبارت "=NewRec()" قرار دادم . با این کار در واقع بجای ایجاد سابروتین Private Sub Form_Load()
مستقیماً در همون قسمت OnLoad ماژول =NewRec() درج و فراخوانی میشه .
ضمناً با توجه به اینکه در اجرای اولیه از کد DOCMD.Close acForm, frm, acSaveYes که مربوط به بستن فرمها در حالت دیزاین میباشه ایراد گرفته میشد بنده برای بستن فرم ها از ماژول زیر استفاده کردم:
Public Function CloseAllForms()
Dim lngLoop As Long
For lngLoop = (Forms.Count - 1) To 1 Step -1
DoCmd.Close acForm, Forms(lngLoop).Name, acSaveYes
Next lngLoop
End Function
وبالاخره درج همه کد بصورت یکجا :
Public Function CloseAllForms()
Dim lngLoop As Long
For lngLoop = (Forms.Count - 1) To 1 Step -1
DoCmd.Close acForm, Forms(lngLoop).Name, acSaveYes
Next lngLoop
End Function
Public Function NewRec()
DoCmd.GoToRecord , , acNewRec
End Function
Public Sub EventNewRec()
On Error Resume Next
Dim Frm_Name As String
Dim frm As Form
Dim obj As AccessObject, dbs As Object
Set dbs = Application.CurrentProject
For Each obj In dbs.AllForms
If obj.Name <> "FMain" Then
Frm_Name = obj.Name
DoCmd.OpenForm Frm_Name, acDesign, , , , acHidden
Set frm = Forms(obj.Name)
frm.OnLoad = "=NewRec()"
CloseAllForms
' DOCMD.Close acForm, frm, acSaveYes
End If
Next obj
End Sub
ناگفته پیداست که با یک بار اجرای کد ماژول EventNewRec در رخداد کلیک کمند باتن فرم اصلی کد انتقال به رکورد جدید برای همیشه در قسمت OnLoad همه فرم ها درج میشه بنابراین با اجرای اولیه ماژول فوق دیگه نیازی به اجرای اون در دفعات بعد نمیباشه و میشه اون رو حذف کرد.
ارادتمند : بهرامی