IN THE SPOTLIGHT: MDE to MDB Conversion Service
(also supports: ACCDE to ACCDB, ADE to ADP, etc)
IN THE SPOTLIGHT: vbWatchdog
VBA error handling just got easier...
" vbWatchdog is off the chart. It solves a long standing problem of how to consolidate error handling into one global location and avoid repetitious code within applications. "
- Joe Anderson,
Microsoft Access MVP
Meet Shady, the vbWatchdog mascot watching over your VBA code →
(courtesy of Crystal Long, Microsoft Access MVP)
IN THE SPOTLIGHT: vbMAPI
An Outlook / MAPI code library for VBA, .NET and C# projects
Get emails out to your customers reliably, and without hassle, every single time.
Use vbMAPI alongside Microsoft Outlook to add professional emailing capabilities to your projects.
Provided by Allen Browne, January 2008.
Calculated expressions show #Error when a form or report has no records. This sort-of makes sense: if the controls don't exist, you cannot sum them.
The problem does not arise in forms that display the new record. It does occur if the form's Allow Additions property is Yes, or if the form is bound to a non-updatable query.
To avoid the problem, test the RecordCount of the form's Recordset. In older versions of Access, that meant changing:
=IIf([Form].[Recordset].[RecordCount] > 0, Sum([Amount]), 0)
Access 2007 has a bug, so that expression fails, even with SP1 applied. You need a function.
Copy this function into a standard module, and save the module with a name such as Module1:
Public Function FormHasData(frm As Form) As Boolean 'Purpose: Return True if the form has any records (other than new one). ' Return False for unbound forms, and forms with no records. 'Note: Avoids the bug in Access 2007 where text boxes cannot use: ' [Forms].[Form1].[Recordset].[RecordCount] On Error Resume Next 'To handle unbound forms. FormHasData = (frm.Recordset.RecordCount <> 0&) End Function
Now use this expression in the Control Source of the text box:
=IIf(FormHasData([Form]), Sum([Amount]), 0)
Use the HasData property property, specifically for this purpose.
So, instead of:
=IIf([Report].[HasData], Sum([Amount]), 0)
If you have many calculated controls, you need to do this on each one. When Access discovers one calculated control that it cannot resolve, it gives up on calculating the others. Therefore one bad expression can cause other calculated controls to display #Error, even if those controls are bound to valid expressions.
For details of how to do this with subreports, see Bring the total from a subreport onto a main report.
|Home||Index of tips||Top|
This is a cached tutorial, reproduced with permission.
Have your say - comment on this article.
What did you think of 'Avoid #Error in form/report with no records'?
No comments yet.
Why not be the first to comment on this article?!
Have your say...