Yes. I agree that a *field* for each possible answer is a lousy design.
However, I don't have any control over that. The database already exists.
My
job (in this case) is to analyze the data that is in the database and
print
suitable reports.
Dan
You have a *field* for each possible answer?
There is a better way to design surveys than that. Duane Hookom has an
example here:
http://www.rogersaccesslibrary.com/Otherdownload.asp?SampleName='At Your Survey 2000'
Allen,
Thanks for the suggestion.
That is similar to the way that I started out to do it (passing each
variable as a parameter). However, it isn't really practical in this
instance. The table being reported on is a survey. Some questions have
50-100 independent choices ("choose all that apply") for answers which
would
mean passing 50-100 parameters to the function. The maximum length
of
an
expression is 2500 bytes (or so) and a function with that many
parameters
can exceed the maximum expression length.
I had thought that I could do something like:
Public Function CountSelected(strPrefix As String) As Integer
Dim DB As Database
Dim Tbl As TableDef
Dim fld As Field
CountSelected = 0
Set DB = CurrentDb
Set Tbl = DB.TableDefs("Survey")
For Each fld In Tbl.Fields
If Left(fld.Name, 4) = strPrefix Then
If (Not IsNull(fld)) And fld.Value Then
CountSelected = CountSelected + 1
End If
End If
Next fld
End Function
however, that dosen't work and I'm not sure why. Looks like maybe that
"table" that I get isn't the same as the table being processed. None of
the
fields have values. Accessing any of them raises an exception. I don't
do
enough MS Access programming to feel confident that this is really a
plausible solution.
I'll take a look at the ParamArray and see if that might suggest a
solution.
Dan
Dan, you will need to pass all the fields from the record to your
function.
If the function is called CountTrue, and you need to pass 3 fields,
you
would set the Control Source of your text box to:
=CountTrue([Field1], [Field2], [Field3])
If you need the function to accept an indeterminate number of fields,
you
can declare its arguments as a ParamArray. There's an example of
parsing
and
operating on the array parameters here:
http://allenbrowne.com/func-09.html
I need to be able to access multiple fields within a VBA function
called
for
each record of a report (MSAccess 2000). For example, suppose I
wanted
to
return a string containing the names of all of the boolean fields
that
are
true for each record, how could I do it? Or suppose I simply wanted
a
count
of all of the boolean fields that are true in each record, how could
I
do
that?