Heenan, Lambert
Lambert.Heenan at AIG.com
Thu Aug 28 10:45:43 CDT 2003
First point is your 'function' PopupCalendar is not returning any value. You should modify it so that it gets the date value from the calendar form and returns that value to the caller. Secondly, presumably you are calling PopupCalendar() from the form that needs the date value (in the OnClick event of the date field?). In which case, why not simply call the field's AfterUpdate event immediately after the call to PopupCalendar(). Because you open the calendar form with acDialog, the procedure that called PopupCalendar() will wait until the calendar form has closed before executing the AfterUpdate event. All it takes is one more line of code and no need to write a bunch of public routines for every field that you want to use the calendar form with. Private Sub txtDateStart_Click() txtDateStart = PopupCalendar(txtDateStart)b ' get the date value as the function return value txtDateStart_AfterUpdate ' call the event handler End Sub Here's how I would change your function... Public Function PopupCalendar(txt As TextBox) As Variant On Error GoTo EH Dim varStartDate As Variant If IsNull(txt.Value) Then varStartDate = CurrentDate Else varStartDate = txt.Value End If DoCmd.OpenForm "frmCalendar", , , , , acDialog, varStartDate If IsFormLoaded("frmCalendar") = True Then PopupCalendar = Format(DateSerial(frmCal!Year, frmCal!Month, frmCal!Day), "m/d/yy") DoCmd.Close acForm, "frmCalendar" End If Exit Function EH: Application.Echo True Call GlobalErrors("", Err.Number, Err.Description, CurrentObjectName,"PopupCalendar", txt) End Function Just a little bit simpler this way. And we all know what KISS means :-) Lambert > -----Original Message----- > From: Dan Waters [SMTP:dwaters at usinternet.com] > Sent: Thursday, August 28, 2003 11:18 AM > To: Database Advisors > Subject: [AccessD] Calling an AfterUpdate Event in a different form. > > Is this possible? > > I have a calendar form that is triggered by double-clicking in a date > field. > Putting the date into the correct field works fine, but I need to be able > to > trigger the AfterUpdate event for whatever date field is on whatever form, > and I haven't been able to figure this out. The AfterUpdate event is > Public. The associated code is below, and is in a standard module: > > > Public Function PopupCalendar(txt As TextBox) As Variant > On Error GoTo EH > > [IN THIS EXAMPLE, txt = txtDateStart FROM THE CALLING FORM] > > Dim frmCal As Form > Dim varStartDate As Variant > Dim frmParent As Form > Dim stgParent As String > Dim stgAfterUpdateEvent As String > > If IsNull(txt.Value) Then > varStartDate = CurrentDate > Else > varStartDate = txt.Value > End If > > DoCmd.OpenForm "frmCalendar", , , , , acDialog, varStartDate > > If IsFormLoaded("frmCalendar") = True Then > Set frmCal = Forms("frmCalendar") > txt.Value = Format(DateSerial(frmCal!Year, frmCal!Month, > frmCal!Day), "m/d/yy") > > stgParent = txt.Parent.Name > Set frmParent = Forms(stgParent) > stgAfterUpdateEvent = txt.Name & "_AfterUpdate" > > Call frmParent.stgAfterUpdateEvent [THIS IS WHAT I WANT - > BUT > NO DICE!] > > Call frmParent.txtDateStart_AfterUpdate [THIS WORKS, BUT WOULD > NEED A CASE FOR EVERY FIELD!] > > DoCmd.Close acForm, "frmCalendar" > Set frmCal = Nothing > End If > > Exit Function > > EH: > Application.Echo True > Call GlobalErrors("", Err.Number, Err.Description, CurrentObjectName, > "PopupCalendar", txt) > > End Function > > > > _______________________________________________ > AccessD mailing list > AccessD at databaseadvisors.com > http://databaseadvisors.com/mailman/listinfo/accessd > Website: http://www.databaseadvisors.com