Only two problems this month, how easy can it get? Les: Calculating totals on a form - use the Recalc method on the LostFocus event of a control. Eric: Exporting text files - best to make your own method using VBA. You get the the result that you want. Build the string using any method you like and then use the SendToFile function. For instance, to create a tabbed CSV file: Function CreateTabFileFromSQL(ByVal sSQL As String, FilePathAndName As String) As Boolean On Error GoTo ErrorHandler 'Requires SendToFile() Dim db As DAO.Database Dim rs As DAO.Recordset Dim s As String Dim i As Integer Dim ii As Integer Dim sSysMsg As String Dim vSysCmd As Variant Dim lgSysCmdMeterCount As Long Dim lgResultStrPos As Long lgResultStrPos = 0 sSysMsg = "Running.... " ' & FilePathAndName Set db = CurrentDb Set rs = db.OpenRecordset(sSQL) With rs 'Set the fieldnames For i = 0 To .Fields.Count - 1 s = s & .Fields(i).Name & Chr(9) Next i 'Remove the last tab in the line s = Left(s, Len(s) - 1) 'Create a new line s = s & vbCrLf .MoveLast .MoveFirst vSysCmd = SysCmd(acSysCmdInitMeter, sSysMsg, .RecordCount + 1) For i = 1 To .RecordCount For ii = 0 To .Fields.Count - 1 s = s & Nz(.Fields(ii).Value, "") & Chr(9) Next ii vSysCmd = SysCmd(acSysCmdUpdateMeter, i) 'Remove the last tab in the line and add a CRLF s = Left(s, Len(s) - 1) & vbCrLf .MoveNext Next i End With 'Create the new file or overwrite the existing file Call SendToFile(FilePathAndName, s) vSysCmd = SysCmd(acSysCmdUpdateMeter, i + 1) CreateTabFileFromSQL = True GoTo ThatsIt ErrorHandler: Select Case Err.Number Case 91, 2501, 3201 Case 3021 MsgBox "There are no records to generate the file:" & vbCrLf & vbCrLf _ & FilePathAndName, vbInformation, "No Records" Case Else MsgBox "Error " & Err.Number & ": " & Err.Description & _ vbCrLf & "in CreateTabFileFromSQL" End Select CreateTabFileFromSQL = False ThatsIt: vSysCmd = SysCmd(acSysCmdClearStatus) rs.Close Set rs = Nothing Set db = Nothing End Function Function SendToFile(FileName As String, sText As String, _ Optional AppendToFile As Boolean = False) As Boolean On Error GoTo ErrorHandler If AppendToFile Then Open FileName For Append As #1 ' Open file to append. Else Open FileName For Output As #1 ' Open file to overwrite contents. End If Print #1, sText ' Print text to file. SendToFile = True GoTo ThatsIt ErrorHandler: Select Case Err.Number Case 76, -2147023665 MsgBox "The File Path entered cannot be found." _ & vbCrLf & "The Local Area Network may be disconnected." _ & vbCrLf & "Please check the path using Windows Explorer." Case Else MsgBox "Error " & Err.Number & ": " & Err.Description & vbCrLf _ & "in SendToFile()" End Select SendToFile = False ThatsIt: Close #1 End Function '--------------------------------------------------- 'Functions for changing mouse cursor 'Place in Declarations area of a module Declare Function apiLoadCursor Lib "user32" Alias "LoadCursorA" _ (ByVal hInstance As Long, ByVal lgCursor As Long) As Long Declare Function SetCursor Lib "user32" (ByVal lgCursor As Long) As Long Enum MouseCursorEnum eDirectionsNWSE = 32642& eDirectionsNESW '= 32643& eDirectionsLeftRight '= 32644& eDirectionsUpDown '= 32645& eDirectionsAll '= 32646& eBanned = 32648& eHandCursor '= 32649& eArrowHourglass '= 32650& eArrowQuestionMark '= 32651& eScrollUpDown '= 32652& eScrollLeftRight '= 32653& eScrollAllDirections '= 32654& eScrollUp '= 32655& eScrollDown '= 32656& eScrollLeft '= 32657& eScrollRight '= 32658& eScrollNorthWest '= 32659& eScrollNorthEast '= 32660& eScrollSouthWest '= 32661& eScrollSouthEast '= 32662& eArrowCD '= 32663& End Enum Function MouseCursor(CursorType As MouseCursorEnum) Dim lgReturnval As Long lgReturnval = apiLoadCursor(0&, CursorType) lgReturnval = SetCursor(lgReturnval) End Function Function HandCursor() Call MouseCursor(eHandCursor) End Function Function BannedCursor() Call MouseCursor(eBanned) End Function