Sorry!
Here's what I did..
Open a new form in Design View with 4 text boxes bound to 4 fields in a
table.
In the Properties Box, selected the BeforeInsert event, and typed in
[Event Procedure]
"Call CarryOver(Me)"
Created a module "basCarryOver" and typed this code:
Sub CarryOver(frm As Form)
On Error GoTo Err_CarryOver
' Purpose: Carry the values over from the last record to a new one.
' Usage: In a form's BeforeInsert event procedure, enter:
' Call CarryOver(Me)
' Notes: This example limited to text boxes and combo boxes.
' Text/combo boxes must have same Name as the fields they
represent.
Dim rst As DAO.Recordset
Dim ctl As Control
Dim i As Integer
Set rst = frm.RecordsetClone
If rst.RecordCount > 0 Then
rst.MoveLast
For i = 0 To frm.count - 1
Set ctl = frm(i)
If TypeOf ctl Is TextBox Then
If Not IsNull(rst(ctl.Name)) Then
ctl = rst(ctl.Name)
End If
ElseIf TypeOf ctl Is ComboBox Then
If Not IsNull(rst(ctl.Name)) Then
ctl = rst(ctl.Name)
End If
End If
Next
End If
Exit_CarryOver:
Set rst = Nothing
Exit Sub
Err_CarryOver:
Select Case Err
Case 2448 'Cannot assign a value
Debug.Print "Value cannot be assigned to " & ctl.Name
Resume Next
Case 3265 'Name not found in this collection.
Debug.Print "No matching field name found for " & ctl.Name
Resume Next
Case Else
MsgBox "Carry-over values were not assigned, from " & ctl.Name
& _
". Error #" & Err.Number & ": " & Err.Description,
vbExclamation, "CarryOver()"
Resume Exit_CarryOver
End Select
End Sub
The record selector gives a new record but without the text boxes
pre-filled with the last record's values.
Thanks! Brian
John Welch - 30 Dec 2005 23:49 GMT
Ok, that's better. Does your event procedure look like this:
Private Sub Form_BeforeInsert(Cancel As Integer)
Call CarryOver(Me)
End Sub
And are the names of your textboxes exactly the same as the fields they are
bound to?
It's not clear if the function is getting called at all (being able to go to
a new record with the record selector isnt proof), so you could put this
line:
msgbox "Carry Over was called"
after the dim statements in the CarryOver procedure to make sure it got
called.
hope this helps
-John
> Sorry!
> Here's what I did..
[quoted text clipped - 59 lines]
>
> Thanks! Brian
Lyle Fairfield - 31 Dec 2005 02:23 GMT
I like to use
With DoCmd
.RunCommand acCmdSelectRecord
.RunCommand acCmdCopy
.RunCommand acCmdPasteAppend
End With
called with a Command Button's OnClick or a PopUp Menu Selection.
This permits "carrying" the values of any record, not just the last
entered or showing. More clicks are not required as the button creates
a new record with just one click.
One can have problems with unique indexes / primary keys / counters but
if one thinks things out carefully these can be overcome.
Allen Browne - 31 Dec 2005 02:44 GMT
To help you debug your code,
1. Check that it compiles okay, by choosing Compile on the Debug menu.
2. Temporarily comment out the error handler, by adding a single quote to
the first line:
'On Error GoTo Err_CarryOver
3. Immedately below that, enter:
Stop
Now when the code runs, it will stop and highlight the Stop line. You can
then press F8 to single-step through the code, and see what is happening
until you identify the problem.

Signature
Allen Browne - Microsoft MVP. Perth, Western Australia.
Tips for Access users - http://allenbrowne.com/tips.html
Reply to group, rather than allenbrowne at mvps dot org.
> Sorry!
> Here's what I did..
[quoted text clipped - 59 lines]
>
> Thanks! Brian