[AccessD] Calling an AfterUpdate Event in a different form.

Steve Capistrant scapistrant at symphonyinfo.com
Thu Aug 28 13:22:14 CDT 2003


Dan,
Does Lambert's idea work?  If it does, I won't think anymore about the
wrinkles in passing the control object to the function.

Steve Capistrant
Symphony Information Services
scapistrant at symphonyinfo.com
Phone: 612-333-1311
www.symphonyinfo.com
212 3rd Ave N, Ste 404
Minneapolis, MN 55401


-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com]On Behalf Of Heenan,
Lambert
Sent: Thursday, August 28, 2003 10:46 AM
To: 'Access Developers discussion and problem solving'
Cc: 'dwaters at usinternet.com'
Subject: RE: [AccessD] Calling an AfterUpdate Event in a different form.


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
_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com





More information about the AccessD mailing list