[AccessD] Send Filtered Report

Anna Hopkins anna at apespools.com
Fri Jan 7 22:51:23 CST 2005


Thanks John.  I got both of them.  It is getting late and I will have to 
look more at this in the morning.  I am honored to have a response from 
you.  I love this list and appreciate all the sharing that goes on.  I 
unsubscribed in July because I was traveling.  But I am back.  Thanks again.
Anna

At 10:25 PM 1/7/2005, you wrote:
>Sorry, my last post got mangled.  Let's see if this is any better.
>
>I prefer to use what I call filters:
>
>You set a filter by the syntax :
>
>Fltr MyFltrName, MyFltrValue
>
>You then retrieve (print to the debug window) the filter using the syntax:
>
>Debug.print Fltr (MyFltrName)
>
>The code for doing this is actually a little module.  The idea is that you
>set up a collection to hold filter values keyed on filter name.  Adding the
>value into the collection stores the value for later retrieval from the
>collection.  Thus a single collection can hold as many filters as you need.
>The code looks like:
>
>(cut and paste the following into a module.  Fix any problems cause by line
>wrap.)
>
>Option Compare Database
>Option Explicit
>Private mcolFilter As Collection
>Private blnFltrInitialized As Boolean
>'
>'The lvarValue is optional, and the presence of the lvarValue changes the
>operation from a retrieve to a store.
>'
>'i.e. if the lvarvalue is passed in, then we are storing a value.
>'If the lvarValue is omitted, then we are retrieving the value already
>stored. '
>'
>
>Public Function Fltr(lstrName As String, Optional lvarValue As Variant) As
>Variant
>On Error GoTo Err_Fltr
>     '
>     'The first time through, set up (initialize) the collection
>     '
>     If Not blnFltrInitialized Then
>         Set mcolFilter = New Collection
>         blnFltrInitialized = True
>     End If
>     '
>     'If the lvarValue parameter is missing, then we are doing a retrieve
>     '
>     If IsMissing(lvarValue) Then
>         On Error Resume Next
>         Fltr = mcolFilter(lstrName)
>         If Err <> 0 Then
>             Fltr = Null
>         End If
>     Else
>           '
>           'Else we are doing a store
>         'So just remove anything already stored under that lstrName
>         'and save the new value under that lstrName
>         '
>         On Error Resume Next
>         mcolFilter.Remove lstrName
>         mcolFilter.Add lvarValue, lstrName
>         Fltr = lvarValue
>     End If
>Exit_Fltr:
>Exit Function
>Err_Fltr:
>         MsgBox Err.Description, , "Error in Function basFltrFunctions.Fltr"
>         Resume Exit_Fltr
>     Resume 0    '.FOR TROUBLESHOOTING
>End Function
>
>Calling the function the first time initializes the collection, and sets the
>Boolean that the initialization has been done.  It also stores the value
>lvarValue into the collection using lstrName as the key. You can call the
>function as many times as you wish storing values.  For example:
>
>Fltr "MyName", "John W. Colby"
>Fltr "MyCompany", "Colby Consulting"
>Fltr "MyWebAddr", "www.colbyconsulting.com"
>Fltr "MyBirthday", #1/1/1909#
>Fltr "MyAge", 105
>
>You can then later retrieve any value you wish, once or a million times
>simply by calling the same function but leaving off the VALUE:
>
>Debug.Print Fltr("MyBirthday") - returns #1/1/1909
>Debug.Print Fltr("MyAge") - returns 105
>Debug.Print Fltr("MyCompany") - returns "Colby Consulting"
>
>Etc.
>
>Notice that if you call the function with the same filter name but a
>different value, the code:
>
>         On Error Resume Next
>         mcolFilter.Remove lstrName
>         mcolFilter.Add lvarValue, lstrName
>
>Removes whatever may be in the collection keyed on the lstrName and adds the
>new value supplied, effectively "erasing" the filter value and saving the
>new value.
>
>Notice that you can pass anything in to the filter, even pointers to forms
>or controls, and you NEED TO BE CAREFUL.  Passing cboState actually passes
>the pointer to state combo in to the filter.  Passing cboState.value passes
>the value of the combo in to the filter.  This is a not so subtle
>difference.  The value is a "by value" thing, where the actual value is
>passed in and retrieved back out.  The pointer is a "by reference" thing and
>if the combo changes after you pass a pointer to it in to the filter, the
>apparent "value" that you will see by getting it back will change.  On the
>other hand, this can be useful if you need to pass a control in to a form
>that is opening, for example a form does something and places the value back
>into a control on another form.
>
>This filter function is a very useful construct and is an extension of
>specific named filters used by others on this list.  It is easy to use, and
>can be useful in a wide variety of applications, from filtering queries for
>forms or reports, to passing in values to be displayed on a form or report
>etc.
>
>I have also migrated this to a class so that I can set up "sets" of filters,
>each set in a class instance - but that is a subject for another day.
>
>John W. Colby
>www.ColbyConsulting.com
>
>Contribute your unused CPU cycles to a good cause:
>http://folding.stanford.edu/
>
>
>John W. Colby
>www.ColbyConsulting.com
>
>Contribute your unused CPU cycles to a good cause:
>http://folding.stanford.edu/
>
>-----Original Message-----
>From: accessd-bounces at databaseadvisors.com
>[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Anna Hopkins
>Sent: Friday, January 07, 2005 10:36 PM
>To: Access Developers discussion and problem solving
>Subject: RE: [AccessD] Send Filtered Report
>
>
>Thanks.
>
>I've never used hidden forms but I can see how that could work.
>
>
>
>--
>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